Red Hatでソリューションアーキテクトをしている田中司恩(@tnk4on)です。
Apple Silicon搭載Mac(以下、ARM Mac)へのOpenShiftのインストールがさらに簡単になりました!前回の記事から短期間での内容更新ですが、動作確認ができたので世界最速で新しいインストール手順をご紹介します!
(いつものお約束。本記事の内容は検証を目的としており、本番環境での使用や公式なサポートを保証するものではありません。)
[前回記事] 本記事でも度々参照しますので合わせて確認してください。 rheb.hatenablog.com
(2023/5/10、追記) 支援付きインストーラーの記事を公開しました! rheb.hatenablog.com
-目次-
- エージェントベースのインストール
- SNO on ARM Mac(エージェントベース)の構成概要
- インストール方法
- まとめ
エージェントベースのインストール
エージェントベース(Agent-based)のインストールは、OpenShift Container Platform 4.12 でGAになった新しいインストール方法です。支援付きインストーラー(Assisted Installer)の使いやすさをオンプレのインストールに活用することができるインストール方法です。支援付きインストーラーのような対話式のGUIはありませんが、CLIでシンプルに実行ができ、また非接続環境への導入も可能な柔軟性も兼ね備えています。install-config.yaml
ファイルとagent-config.yaml
を使って起動用のエージェントISOを作成し、このISOで起動することでOpenShiftクラスターが自動で作成されます。
今回の記事ではエージェントベースのインストール自体は深く掘り下げませんが、下記の公式ブログで紹介されていますので参考にしてください。
- OpenShift Container Platform 4.12 リリースノート
- Meet The New Agent-Based OpenShift Installer
- Introducing a Game-Changing New Way to Deploy OpenShift Clusters in Disconnected Environments
SNO on ARM Mac(エージェントベース)の構成概要
エージェントベースのインストールの場合でもARM Macへのインストールの構成自体はほぼ変わりません。coreos-installer
の代わりにopenshift-install
をコンテナで実行する用に変更になったくらいです。
構成図
構成の特徴、前提条件、パラメーター一覧
構成の特徴、前提条件、パラメーター一覧は前回の記事を参照してください。
インストール方法
参照するインストールドキュメントは下記をベースとしますが、今回もARM Mac用に様々なカスタマイズを加えています。
第14章 エージェントベースのインストーラーを使用したオンプレミスクラスターのインストール
前回記事と重複する部分は多いですが、agent-config.yaml
の修正やopenshift-install
用のコンテナのビルドは今回新しく追加された手順です。
Gitリポジトリのクローン
インストールに必要なファイル類のテンプレートを用意しています。下記URLのリポジトリをクローンしてご利用ください。
GitHub - tnk4on/sno-on-arm-mac: Install Single Node OpenShift on Apple Silicon-based Mac (ARM Mac)
git clone https://github.com/tnk4on/sno-on-arm-mac.git cd sno-on-arm-mac
- agent-basedディレクトリ配下のファイルを使用します
インストーラーとOpenShift CLIの入手
インストールに必要な openshift-install
とクライアントの oc
を入手して実行パスに配置します。
今回のインストール方法ではコンテナ内で
openshift-install
を実行するのでMacに導入するものは直接インストールに関係しませんが、インストール中のログ確認等に使用するので導入しておきましょう。
export OCP_VERSION=4.13.0-rc.2 export ARCH=aarch64 mkdir src cd src curl -LO https://mirror.openshift.com/pub/openshift-v4/$ARCH/clients/ocp/$OCP_VERSION/openshift-install-mac.tar.gz curl -LO https://mirror.openshift.com/pub/openshift-v4/$ARCH/clients/ocp/$OCP_VERSION/openshift-client-mac.tar.gz tar zxf openshift-install-mac.tar.gz tar zxf openshift-client-mac.tar.gz sudo cp openshift-install oc /usr/local/bin/ cd ..
OCP_VERSION
: 「4.13.0-rc.2」以降を指定します- (注意)4.13.0-rc.0ではインストールが完了しません
ARCH
: ARM Macに対応した「aarch64」を指定します- ダウンロードしたアーカイブは
src
ディレクトリに一時保存します - 実行バイナリの配置先はPATH環境変数であればどこでも可能です
RHCOS ISOの入手
今回はインストールには使用しませんが、agent-config.yaml
に記載するストレージデバイス名とNIC名の確認に使用します。
mkdir iso export ISO_URL=$(openshift-install coreos print-stream-json | grep location | grep $ARCH | grep iso | cut -d\" -f4) curl -L $ISO_URL -o iso/rhcos-live.iso
- 一度デバイス名の確認が完了すれば削除してしまって問題ありません
DNSサーバーの実行
前回の記事を参照 - DNSサーバーの実行
Macホストの設定変更
前回の記事を参照 - Macホストの設定変更
RHCOS ISOのテスト起動とデバイス名の確認
前回の記事を参照 - RHCOS ISOのテスト起動とデバイス名の確認
install-config.yamlの更新
ご利用の環境に合わせてinstall-config.yaml
の内容を修正します。前回記事との違いはインストール先ディスクの指定が無い点です。*1
agent-based/install-config.yamlのサンプルを展開
apiVersion: v1 baseDomain: home.lab compute: - name: worker replicas: 0 controlPlane: name: master replicas: 1 metadata: name: sno networking: clusterNetworks: - cidr: 10.128.0.0/14 hostPrefix: 23 machineNetwork: - cidr: 192.168.1.0/24 networkType: OVNKubernetes serviceNetwork: - 172.30.0.0/16 platform: none: {} pullSecret: '{"auths":...}' sshKey: 'ssh-ed25519 AAAA...'
1. プルシークレット
前回の記事を参照 - 1. プルシークレット
2. SSHキー
前回の記事を参照 - SSHキー
agent-config.yamlの更新
今回のインストール方法のポイントとなるセクションです。使用環境に合わせて内容を修正します。
agent-based/agent-config.yamlのサンプルを展開
apiVersion: v1alpha1 kind: AgentConfig metadata: name: sno rendezvousIP: 192.168.1.40 hosts: - hostname: m1-ocp interfaces: - name: enp0s1 macAddress: 6a:75:4d:0c:7e:a5 rootDeviceHints: deviceName: /dev/vda networkConfig: interfaces: - name: enp0s1 type: ethernet state: up mac-address: 6a:75:4d:0c:7e:a5 ipv4: enabled: true address: - ip: 192.168.1.40 prefix-length: 24 dhcp: false dns-resolver: config: server: - 192.168.1.150 routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.168.1.1 next-hop-interface: enp0s1 table-id: 254
1. ランデブーIP
rendezvousIP:
:シングルノード構成なのでOpenShiftノードと同じIPアドレスを設定します
2. ネットワーク設定
hostname:
:OpenShiftノードのホスト名を設定しますmacAddress:
,mac-address:
:NICのMACアドレスを記載します。RHCOSのテスト起動時や仮想環境アプリで確認してください。2箇所あります。- NIC名:確認したNIC名を記載します。3箇所あります。
hosts: interfaces: - name: enp0s1
networkConfig: interfaces: - name: enp0s1
next-hop-interface: enp0s1
- DNSサーバー:コンテナ実行したDNSサーバーを使用するためARM MacホストのIPアドレスを指定します
dns-resolver: config: server: - 192.168.1.150
next-hop-address:
:デフォルトゲートウェイのIPアドレスを記載します
3. ルートデバイスヒント
確認したストレージデバイス名を記載します。
rootDeviceHints: deviceName: /dev/vda
- ルートデバイスヒントは記載しなくてもインストールが可能ですが、ディスクの検出のプロセスに時間がかかるため記載しておくと時間短縮になります
- (注意)ストレージの容量は必ず120GB以上にしてください。120GB未満だとディスクが検出されてもインストールが開始されません。
エージェントISO作成用コンテナイメージのビルド
エージェントISOの作成はopenshift-install
を使用します。今回はagent-config.yaml
に静的IPアドレスの設定を加えており、このネットワークの設定を行うためにNMState
が必要です。RHELなどのLinuxサーバーであればNMState
は簡単にインストールできますが、調べたところMac用はありません。そこでopenshift-install
とNMState
が入ったLinuxベースのコンテナイメージを作成し、その中でエージェントISOの作成を行うようにします。
Containerfile
コンテナイメージのビルドに使用するContainerfileは下記の内容になります。
agent-based/Containerfileの内容を展開
# Preparation Build FROM quay.io/centos/centos:stream9-minimal as prep # ARG ARG VERSION # ENV ENV VERSION=${VERSION} ENV ARCH=aarch64 # Download binary RUN microdnf install tar gzip -y RUN curl -LO https://mirror.openshift.com/pub/openshift-v4/${ARCH}/clients/ocp/${VERSION}/openshift-install-linux.tar.gz RUN curl -LO https://mirror.openshift.com/pub/openshift-v4/${ARCH}/clients/ocp/${VERSION}/openshift-client-linux.tar.gz RUN tar xzf openshift-install-linux.tar.gz RUN tar xzf openshift-client-linux.tar.gz # Build image FROM quay.io/centos/centos:stream9-minimal as build RUN microdnf update -y \ && microdnf install nmstate -y \ && microdnf clean all COPY --from=prep openshift-install /usr/local/bin COPY --from=prep oc /usr/local/bin ENTRYPOINT ["/usr/local/bin/openshift-install"]
- ベースイメージにCentOS 9 Stream minimalを使用します*2
- ツールのダウンロードと実行用のステージを分けたマルチステージビルドを行います
openshift-install
の実行の際にoc
も必要となるのでoc
も導入します- ビルド引数を使用してOpenShiftのバージョンを指定します
- ENTRYPOINTに
openshift-install
の実行を指定します
コンテナのビルド
ビルド引数にOpenShiftのバージョンを指定してビルドを実行します
export OCP_VERSION=4.13.0-rc.2 podman build -f agent-based/Containerfile -t openshift-install --build-arg VERSION=${OCP_VERSION} podman run -it --rm openshift-install version
- バージョンが表示されたらコンテナのビルドは成功です
- タグ名は
openshift-install
にしてますが、任意で変更可能です
エージェントISOの作成
インストールディレクトリおよびイメージ、ツール類が格納されるキャッシュディレクトリを作成します。install-config.yaml
とagent-config.yaml
をインストールディレクトリにコピーし、ビルドしたopenshift-install
コンテナイメージを使用してエージェントISOの作成を実行します。
mkdir -p ocp image_cache files_cache cp agent-based/*.yaml ocp podman run --privileged --rm \ -v $PWD:/data \ -v ./image_cache:/root/.cache/agent/image_cache \ -v ./files_cache:/root/.cache/agent/files_cache \ -w /data openshift-install:latest \ --dir ocp agent create image
- 初回は元になるISO(image_cache配下に保存される)のダウンロードから開始するので時間がかかります。
- 2回目以降の実行時はキャッシュを再利用します。キャッシュを検証し、インストーラーのバージョンが更新されていれば再度ダウンロードが行われます。
- (注意)ISOを作成すると使用した
install-config.yaml
とagent-config.yaml
は失われるので、毎回コピーして元ファイルを残すようにしましょう
エージェントISOの作成後のインストールディレクトリとキャッシュディレクトリの構成は下記のようになります
. ├── files_cache │ ├── agent-tui │ └── libnmstate.so.1.3.3 ├── image_cache │ └── coreos-aarch64.iso └── ocp ├── .openshift_install.log ├── .openshift_install_state.json ├── agent.aarch64.iso ├── auth │ ├── kubeadmin-password │ └── kubeconfig └── rendezvousIP
ocp/.openshift_install.log
にエージェントISO作成時のログが作成されます。うまくいかない時はログの内容をチェックしてみてください。
エージェントISOの起動
インストールディレクトリ配下に作成されたagent.aarch64.iso
を使用して仮想マシンを起動します。ISO起動後は自動でクラスターのインストールが開始されます。
起動後しばらくすると下記のような画面が表示されます。ネットワークの接続確認にパスするとさらに追加で設定変更するかどうかの選択ができます。事前にagent-config.yaml
で設定済みなので変更する必要はありません。そのまま放置すると自動でインストールが継続されます。
(参考)NetworkManager TUI
エージェントベースインストールの特徴がエージェントISO起動時に出てくるNetworkManager TUIです。ツール自体はRHELでもお馴染みのnmtui
そのものです。設定画面を開いてみるとagent-config.yaml
で設定した内容が自動で入力されているのが確認できます。
インストール中の自動再起動
インストールの自動実行中、下記のタイミングで再起動が2回行われます。
- 1回目:ISO起動→ディスクへ書き込み完了後
- 2回目:Bootstrap開始→Bootstrap完了後
インストール完了の確認
下記のコマンドを実行し、クラスターのインストールが完了したことを確認します。
export KUBECONFIG=ocp/auth/kubeconfig openshift-install --dir=ocp wait-for install-complete
インストール完了後のログ出力でkubeadmin
のパスワードを確認できます。
〜省略〜 INFO Install complete! INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/Users/*****/***/ocp-on-arm-mac/ocp/auth/kubeconfig' INFO Access the OpenShift web-console here: https://console-openshift-console.apps.sno.home.lab INFO Login to the console with user: "kubeadmin", and password: "BJpWp-8dGqa-XNGoW-vzGfV"
- 同じくログに表示されているWebコンソールのURLにアクセスしてOpenShiftを使用開始します
(参考)インストール状況のモニタリング
OpenShiftのインストール実行中、ターミナルウィンドウを複数開き下記のコマンドを利用してログのモニタリングができます。
前回の記事を参照 - (参考)インストール状況のモニタリング
エージェントベースのインストール用に下記のモニタリングコマンドが使えます。
export KUBECONFIG=ocp/auth/kubeconfig openshift-install --dir=ocp agent wait-for bootstrap-complete
wait-for bootstrap-complete
はISO起動からBootstrap完了まで
インストールログのサンプルを展開
INFO Waiting for cluster install to initialize. Sleeping for 30 seconds 〜中略〜 INFO Waiting for cluster install to initialize. Sleeping for 30 seconds INFO Cluster is not ready for install. Check validations WARNING Cluster validation: The cluster has hosts that are not ready to install. WARNING Host m1-ocp validation: Host couldn't synchronize with any NTP server WARNING Host m1-ocp: updated status from discovering to insufficient (Host cannot be installed due to following failing validation(s): Host couldn't synchronize with any NTP server) INFO Host m1-ocp: updated status from insufficient to known (Host is ready to be installed) INFO Cluster is ready for install INFO Cluster validation: All hosts in the cluster are ready to install. INFO Preparing cluster for installation INFO Host m1-ocp: updated status from known to preparing-for-installation (Host finished successfully to prepare for installation) INFO Host m1-ocp: New image status quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:250b5a39dd30e13afcdcefdfa99586811b438c3e6dc9df350f9a4132188d4fe6. result: success. time: 7.04 seconds; size: 438.75 Megabytes; download rate: 65.31 MBps WARNING Host's disk /dev/disk/by-path/pci-0000:00:05.0 is slower than the supported speed, and may cause degraded cluster performance (fdatasync duration: 21 ms) INFO Host m1-ocp: updated status from preparing-for-installation to preparing-successful (Host finished successfully to prepare for installation) INFO Cluster installation in progress INFO Host m1-ocp: updated status from preparing-successful to installing (Installation is in progress) INFO Host: m1-ocp, reached installation stage Installing: bootstrap INFO Host: m1-ocp, reached installation stage Waiting for bootkube INFO Bootstrap Kube API Initialized INFO Host: m1-ocp, reached installation stage Writing image to disk INFO Host: m1-ocp, reached installation stage Writing image to disk: 11% INFO Host: m1-ocp, reached installation stage Writing image to disk: 24% INFO Host: m1-ocp, reached installation stage Writing image to disk: 36% INFO Host: m1-ocp, reached installation stage Writing image to disk: 49% INFO Host: m1-ocp, reached installation stage Writing image to disk: 61% INFO Host: m1-ocp, reached installation stage Writing image to disk: 66% INFO Host: m1-ocp, reached installation stage Writing image to disk: 77% INFO Host: m1-ocp, reached installation stage Writing image to disk: 88% INFO Host: m1-ocp, reached installation stage Writing image to disk: 94% INFO Host: m1-ocp, reached installation stage Writing image to disk: 100% INFO Bootstrap configMap status is complete INFO cluster bootstrap is complete
環境のリセット
インストールに問題があった場合はインストールディレクトリを削除してエージェントISOの作成からやり直します。毎回キャッシュ済みのISOやツール類のチェックは行われるので、キャッシュディレクトリは残しておいて問題ありません。
インストールディレクトリの削除
rm -rf ocp
エージェントISOの再作成
mkdir -p ocp cp agent-based/*.yaml ocp podman run --privileged --rm \ -v $PWD:/data \ -v ./image_cache:/root/.cache/agent/image_cache \ -v ./files_cache:/root/.cache/agent/files_cache \ -w /data openshift-install:latest \ --dir ocp agent create image
まとめ
前回記事の最後にチラッと紹介したエージェントベースのインストールが早くも使えるようになりました。エージェントISO作成用のコンテナイメージさえ事前に用意しておけばすぐにインストールが開始できます。前回記事のUPIをベースとした手動インストールもかなり手順を簡略化しましたが、今後はこのエージェントベースのみでも十分になりそうです。 前回、今回の記事を活用するとRed Hat公式のARM Macで動作するOpenShift Localのリリース待つまでもなくすぐにお手持ちのM1、M2 MacでOpenShiftを動かせます。さぁ、ARM MacでのOpenShift体験を今すぐ試してみましょう!