7.4. クラスター外でのレイヤー化を使用してカスタムレイヤーイメージを適用する
特定のマシン設定プール内のノードで、Red Hat Enterprise Linux CoreOS (RHCOS) イメージのレイヤー化を簡単に設定できます。Machine Config Operator (MCO) は、ベースの Red Hat Enterprise Linux CoreOS (RHCOS) イメージを上書きして、新しいカスタムレイヤーイメージでこれらのノードを再起動します。
カスタムレイヤーイメージをクラスターに適用するには、クラスターがアクセスできるリポジトリーにカスタムレイヤーイメージが必要です。次に、カスタムレイヤーイメージを指す MachineConfig オブジェクトを作成します。設定するマシン設定プールごとに個別の MachineConfig オブジェクトが必要です。
カスタムレイヤーイメージを設定すると、OpenShift Container Platform は、カスタムレイヤーイメージを使用するノードを自動的に更新しなくなりました。必要に応じてノードを手動で更新する必要があります。カスタムレイヤーをロールバックすると、OpenShift Container Platform は再びノードを自動的に更新します。カスタムレイヤーイメージを使用するノードの更新に関する重要な情報は、以下の追加リソースセクションを参照してください。
前提条件
タグではなく、OpenShift Container Platform イメージダイジェストに基づくカスタムレイヤーイメージを作成する必要があります。
注記クラスターの残りの部分にインストールされているのと同じ RHCOS の基本イメージを使用する必要があります。
oc adm release info --image-for rhel-coreosコマンドを使用して、クラスターで使用されている基本イメージを取得します。たとえば、次の Containerfile は、OpenShift Container Platform 4.18 イメージからカスタムレイヤーイメージを作成し、カーネルパッケージを CentOS 9 Stream のカーネルパッケージでオーバーライドします。
カスタムレイヤーイメージの Containerfile の例
# Using a 4.18.0 image FROM quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256...1 #Install hotfix rpm RUN rpm-ostree override replace http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/kernel-{,core-,modules-,modules-core-,modules-extra-}5.14.0-295.el9.x86_64.rpm && \2 rpm-ostree cleanup -m && \ ostree container commit注記Containerfile の作成方法は、このドキュメントの範囲外です。
-
カスタムレイヤーイメージをビルドするプロセスはクラスターの外部で実行されるため、Podman または Buildah で
--authfile /path/to/pull-secretオプションを使用する必要があります。あるいは、これらのツールでプルシークレットを自動的に読み取るようにするには、デフォルトのファイルの場所のいずれかに追加できます。~/.docker/config.json、$XDG_RUNTIME_DIR/containers/auth.json、~/.docker/config.json、または~/.dockercfg。詳細は、containers-auth.jsonのマニュアルページを参照してください。 - カスタムレイヤーイメージを、クラスターがアクセスできるリポジトリーにプッシュする必要があります。
手順
マシン設定ファイルを作成します。
以下のような YAML ファイルを作成します。
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker1 name: os-layer-custom spec: osImageURL: quay.io/my-registry/custom-image@sha256...2 MachineConfigオブジェクトを作成します。$ oc create -f <file_name>.yaml重要クラスターにロールアウトする前に、実稼働環境の外でイメージをテストすることを強く推奨します。
検証
次のチェックのいずれかを実行することで、カスタムレイヤーイメージが適用されていることを確認できます。
ワーカーマシン設定プールが新しいマシン設定でロールアウトされていることを確認します。
新しいマシン設定が作成されたことを確認します。
$ oc get mc出力例
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 00-worker 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 01-master-container-runtime 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 01-master-kubelet 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 01-worker-container-runtime 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 01-worker-kubelet 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 99-master-generated-registries 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 99-master-ssh 3.2.0 98m 99-worker-generated-registries 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 99-worker-ssh 3.2.0 98m os-layer-custom 10s1 rendered-master-15961f1da260f7be141006404d17d39b 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m rendered-worker-5aff604cb1381a4fe07feaf1595a797e 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m rendered-worker-5de4837625b1cbc237de6b22bc0bc873 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 4s2 新しいマシン設定の
osImageURL値が予測されるイメージを指していることを確認します。$ oc describe mc rendered-worker-5de4837625b1cbc237de6b22bc0bc873出力例
Name: rendered-worker-5de4837625b1cbc237de6b22bc0bc873 Namespace: Labels: <none> Annotations: machineconfiguration.openshift.io/generated-by-controller-version: 5bdb57489b720096ef912f738b46330a8f577803 machineconfiguration.openshift.io/release-image-version: 4.18.0-ec.3 API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig ... Os Image URL: quay.io/my-registry/custom-image@sha256...関連するマシン設定プールが新しいマシン設定で更新されていることを確認します。
$ oc get mcp出力例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-15961f1da260f7be141006404d17d39b True False False 3 3 3 0 39m worker rendered-worker-5de4837625b1cbc237de6b22bc0bc873 True False False 3 0 0 0 39m1 - 1
UPDATINGフィールドがTrueの場合、マシン設定プールは新しいマシン設定で更新されます。この場合、新しいマシン設定は出力にリストされません。フィールドがFalseになると、ワーカーマシン設定プールが新しいマシン設定にロールアウトされます。
ノードをチェックして、ノードのスケジューリングが無効になっていることを確認します。これは、変更が適用されていることを示しています。
$ oc get nodes出力例
NAME STATUS ROLES AGE VERSION ip-10-0-148-79.us-west-1.compute.internal Ready worker 32m v1.31.3 ip-10-0-155-125.us-west-1.compute.internal Ready,SchedulingDisabled worker 35m v1.31.3 ip-10-0-170-47.us-west-1.compute.internal Ready control-plane,master 42m v1.31.3 ip-10-0-174-77.us-west-1.compute.internal Ready control-plane,master 42m v1.31.3 ip-10-0-211-49.us-west-1.compute.internal Ready control-plane,master 42m v1.31.3 ip-10-0-218-151.us-west-1.compute.internal Ready worker 31m v1.31.3
ノードが
Ready状態に戻ったら、ノードがカスタムレイヤーイメージを使用していることを確認します。ノードへの
oc debugセッションを開きます。以下に例を示します。$ oc debug node/ip-10-0-155-125.us-west-1.compute.internal/hostをデバッグシェル内のルートディレクトリーとして設定します。sh-4.4# chroot /hostrpm-ostree statusコマンドを実行して、カスタムレイヤーイメージが使用されていることを確認します。sh-4.4# sudo rpm-ostree status出力例
State: idle Deployments: * ostree-unverified-registry:quay.io/my-registry/... Digest: sha256:...
7.4.1. クラスター外のノードを元に戻す リンクのコピーリンクがクリップボードにコピーされました!
特定のマシン設定プール内のノードから、クラスター外のカスタムレイヤーイメージを元に戻すことができます。Machine Config Operator (MCO) は、クラスターベースの Red Hat Enterprise Linux CoreOS (RHCOS) イメージを使用してこれらのノードを再起動し、カスタムレイヤーイメージをオーバーライドします。
クラスターから Red Hat Enterprise Linux CoreOS (RHCOS) カスタムレイヤーイメージを削除するには、イメージを適用したマシン設定を削除する必要があります。
手順
カスタムレイヤーイメージを適用したマシン設定を削除します。
$ oc delete mc os-layer-customマシン設定を削除した後、ノードが再起動します。
検証
次のチェックのいずれかを実行することで、カスタムレイヤーイメージが削除されたことを確認できます。
ワーカーマシン設定プールが以前のマシン設定で更新されていることを確認します。
$ oc get mcp出力例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-6faecdfa1b25c114a58cf178fbaa45e2 True False False 3 3 3 0 39m worker rendered-worker-6b000dbc31aaee63c6a2d56d04cd4c1b False True False 3 0 0 0 39m1 - 1
UPDATINGフィールドがTrueの場合、マシン設定プールは以前のマシン設定で更新されます。フィールドがFalseになると、ワーカーマシン設定プールが以前のマシン設定にロールアウトされます。
ノードをチェックして、ノードのスケジューリングが無効になっていることを確認します。これは、変更が適用されていることを示しています。
$ oc get nodes出力例
NAME STATUS ROLES AGE VERSION ip-10-0-148-79.us-west-1.compute.internal Ready worker 32m v1.31.3 ip-10-0-155-125.us-west-1.compute.internal Ready,SchedulingDisabled worker 35m v1.31.3 ip-10-0-170-47.us-west-1.compute.internal Ready control-plane,master 42m v1.31.3 ip-10-0-174-77.us-west-1.compute.internal Ready control-plane,master 42m v1.31.3 ip-10-0-211-49.us-west-1.compute.internal Ready control-plane,master 42m v1.31.3 ip-10-0-218-151.us-west-1.compute.internal Ready worker 31m v1.31.3ノードが
Ready状態に戻ったら、ノードが基本イメージを使用していることを確認します。次のコマンドを実行して、ノードへの
oc debugセッションを開きます。$ oc debug node/<node_name>次のコマンドを実行して、デバッグシェル内のルートディレクトリーとして
/hostを設定します。sh-5.1# chroot /hostrpm-ostree statusコマンドを実行して、カスタムレイヤーイメージが使用されていることを確認します。sh-5.1# sudo rpm-ostree status出力例
State: idle Deployments: * ostree-unverified-registry:podman pull quay.io/openshift-release-dev/ocp-release@sha256:e2044c3cfebe0ff3a99fc207ac5efe6e07878ad59fd4ad5e41f88cb016dacd73 Digest: sha256:e2044c3cfebe0ff3a99fc207ac5efe6e07878ad59fd4ad5e41f88cb016dacd73