7.3. クラスター上でのレイヤー化を使用してカスタムレイヤーイメージを適用する
クラスター上のビルドプロセスを使用してクラスターにカスタムレイヤーイメージを適用するには、次のパラメーターを指定した MachineOSConfig カスタムリソース (CR) を作成します。
- ビルドする Containerfile
- ビルドを関連付けるマシン設定プール
- 最終的なイメージをプッシュおよびプルする場所
- 使用するプッシュシークレットとプルシークレット
各マシン設定プールに対して、MachineOSConfig CR を 1 つだけ作成できます。
オブジェクトを作成すると、Machine Config Operator (MCO) によって MachineOSBuild オブジェクトとビルダー Pod が作成されます。ビルドプロセスでは、設定マップなどの一時的なオブジェクトも作成されますが、これらはビルドの完了後にクリーンアップされます。MachineOSBuild オブジェクトと関連する builder-* Pod は、<MachineOSConfig_CR_name>-<hash> という同じ命名スキームを使用します。次に例を示します。
MachineOSBuild オブジェクトの例
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-c8765e26ebc87e1e17a7d6e0a78e8bae False False True False False
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED
layered-c8765e26ebc87e1e17a7d6e0a78e8bae False False True False False
ビルダー Pod の例
NAME READY STATUS RESTARTS AGE build-layered-c8765e26ebc87e1e17a7d6e0a78e8bae 2/2 Running 0 11m
NAME READY STATUS RESTARTS AGE
build-layered-c8765e26ebc87e1e17a7d6e0a78e8bae 2/2 Running 0 11m
ビルドが完了すると、MCO は新しいカスタムレイヤーイメージをリポジトリーにプッシュし、関連するマシン設定プール内のノードにロールアウトします。新しいカスタムレイヤーイメージのダイジェスト付きイメージプル仕様を、MachineOSBuild オブジェクトと machine-os-builder Pod で確認できます。
非実稼働ノードを含むカスタムマシン設定プールを使用すると、カスタムレイヤーイメージをアクティブなノードにロールアウトせずに、MachineOSBuild オブジェクトをテストして、正しくビルドされることを確認できます。または、ノードのないカスタムマシン設定プールを使用することもできます。MachineOSBuild オブジェクトは、MCO がカスタムレイヤーイメージをデプロイするためのノードがない場合でもビルドされます。
これらの新しいオブジェクトや machine-os-builder Pod を操作する必要はありません。ただし、これらのリソースは、必要に応じて、すべてトラブルシューティングに使用できます。
カスタムレイヤーイメージを使用するマシン設定プールごとに、個別の MachineOSConfig CR が必要です。
MachineOSConfig オブジェクトに特定の変更を加えると、関連するカスタムレイヤーイメージの自動再ビルドがトリガーされます。「マシン設定プールの一時停止」で説明されているように、カスタムレイヤーイメージが適用されているマシン設定プールを一時停止することで、再ビルドの影響を軽減できます。プールの一時停止中、ビルド完了後に新しくビルドされたイメージを、MCO がノードにロールアウトすることはありません。ただし、プールが一時停止しているかどうかに関係なく、ビルドは引き続き実行されます。たとえば、MachineOSCOnfig オブジェクトを削除して置き換える必要がある場合、変更を行う前にマシン設定プールを一時停止すると、関連するノードが MCO によってベースイメージに戻されるのを防ぎ、必要な再起動の回数を減らすことができます。
マシン設定プールを一時停止すると、oc get machineconfigpools で次のステータスが報告されます。
出力例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-a0b404d061a6183cc36d302363422aba True False False 3 3 3 0 4h14m worker rendered-worker-221507009cbcdec0eec8ab3ccd789d18 False False False 2 2 2 0 4h14m
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE
master rendered-master-a0b404d061a6183cc36d302363422aba True False False 3 3 3 0 4h14m
worker rendered-worker-221507009cbcdec0eec8ab3ccd789d18 False False False 2 2 2 0 4h14m
- 1
workerマシン設定プールは一時停止しています。これは、3 つのFalseステータスと、READYMACHINECOUNTが0であることからわかります。
変更がロールアウトされたら、マシン設定プールの一時停止を解除できます。
ネットワークの問題や無効なシークレットなどによりビルドが失敗した場合、MCO は、ジョブが失敗する前に、ビルドをさらに 3 回再試行します。MCO は、ビルドの試行ごとに異なるビルド Pod を作成します。ビルド Pod のログを使用すると、ビルドの失敗をトラブルシューティングできます。ただし、MCO は、しばらくするとこれらのビルド Pod を自動的に削除します。
失敗した MachineOSBuild オブジェクトの例
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-c8765e26ebc87e1e17a7d6e0a78e8bae False False False False True
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED
layered-c8765e26ebc87e1e17a7d6e0a78e8bae False False False False True
MachineOSConfig オブジェクトを変更するか、MachineOSConfig オブジェクトにアノテーションを適用することで、カスタムレイヤーイメージを手動で再ビルドできます。詳細は、「クラスター上のカスタムレイヤーイメージの再ビルド」を参照してください。
カスタムマシン設定プールを使用してクラスター上のレイヤーイメージをノードに適用した場合は、ノードからカスタムレイヤーイメージを削除し、ベースイメージに戻すことができます。詳細は「クラスター上のレイヤーノードを元に戻す」を参照してください。
MachineOSConfig オブジェクトを編集することで、必要に応じてカスタム上のレイヤーイメージを変更し、追加パッケージのインストール、既存パッケージの削除、リポジトリーの変更、シークレットの更新、またはその他の同様の変更を行うことができます。詳細は、「カスタムレイヤーイメージの変更」を参照してください。
7.3.1. クラスター上の階層化の既知の制限 リンクのコピーリンクがクリップボードにコピーされました!
クラスター上のレイヤー化機能を使用する場合は、次の制限に注意してください。
- クラスター上でのレイヤー化は、AMD64 アーキテクチャー上の OpenShift Container Platform クラスターでのみサポートされています。
- マルチアーキテクチャーコンピューティングマシンまたは単一ノードの OpenShift クラスターでは、クラスター上の階層化はサポートされません。
- カスタムレイヤーイメージを使用するマシンセットをスケールアップすると、ノードが 2 回再起動します。1 回目は、ノードがベースイメージを使用して最初に作成されるとき、2 回目はカスタムレイヤーイメージが適用されるときです。
カスタムレイヤーイメージを持つノードでは、node disruption policy がサポートされません。その結果、次の設定変更によりノードが再起動します。
-
/varまたは/etcディレクトリー内の設定ファイルの変更 - systemd サービスの追加または変更
- SSH キーの変更
-
ICSP、ITMS、およびIDMSオブジェクトからミラーリングルールの削除 -
openshift-confignamespace のuser-ca-bundleconfigmap を更新することによる信頼できる CA の変更
-
-
カスタムレイヤーイメージの作成に使用するイメージは、プッシュレジストリー内の領域を占有します。レジストリー内の空き領域に常に注意して、必要に応じてイメージを削除してください。イメージを作成した
MachineOSBuildオブジェクトを削除することで、クラスター上のカスタムレイヤーイメージをリポジトリーから自動的に削除できます。レジストリープッシュシークレットによって提供される認証情報は、レジストリーからイメージを削除するパーミッションも付与する必要があることに注意してください。詳細は、「クラスター上のカスタムレイヤーイメージの削除」を参照してください。
前提条件
MCO がベースオペレーティングシステムイメージをプルするために必要なプルシークレットのコピーが
openshift-machine-config-operatornamespace にある。たとえば、グローバルプルシークレットを使用している場合は、次のコマンドを実行できます。
$oc create secret docker-registry global-pull-secret-copy \ --namespace "openshift-machine-config-operator" \ --from-file=.dockerconfigjson=<(oc get secret/pull-secret -n openshift-config -o go-template='{{index .data ".dockerconfigjson" | base64decode}}')$oc create secret docker-registry global-pull-secret-copy \ --namespace "openshift-machine-config-operator" \ --from-file=.dockerconfigjson=<(oc get secret/pull-secret -n openshift-config -o go-template='{{index .data ".dockerconfigjson" | base64decode}}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- MCO が新しいカスタムレイヤーイメージをプッシュするために必要なレジストリーのプッシュシークレットがある。
- ノードがレジストリーから新しいカスタムレイヤーイメージをプルするために必要なプルシークレットがある。これは、イメージをリポジトリーにプッシュするために使用するシークレットとは異なるシークレットである必要があります。
- Containerfile を設定する方法をよく理解している。Containerfile の作成方法は、このドキュメントの範囲外です。
- オプション: カスタムレイヤーイメージを適用するノード用に、別のマシン設定プールがある。ノード用のカスタムマシン設定プールを持つことの利点の 1 つは、必要に応じて簡単にベースイメージに戻すことができることです。詳細は「クラスター上のレイヤーノードを元に戻す」を参照してください。
手順
MachineOSconfigオブジェクトを作成します。以下のような YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
MachineConfigCR に必要なmachineconfiguration.openshift.io/v1API を指定します。- 2
MachineOSConfigオブジェクトの名前を指定します。この名前は、関連付けられているマシン設定プールの名前と一致する必要があります。この名前は、クラスター上でのレイヤー化用のリソースで使用されます。このドキュメントの例では、layeredという名前を使用します。- 3
- カスタムレイヤーイメージをデプロイするノードに関連付けられているマシン設定プールの名前を指定します。このドキュメントの例では、
layeredマシン設定プールを使用します。 - 4
- カスタムレイヤーイメージを設定するための Containerfile を指定します。
- 5
- この Containerfile をビルドするアーキテクチャーを
ARM64、AMD64、PPC64LE、S390X、またはNoArchから指定します。デフォルトはNoArchで、任意のアーキテクチャーに適用できる Containerfile を定義します。 - 6
- 使用する Image Builder の名前を指定します。これは、イメージビルドを管理している
jobオブジェクトへの参照であるJobである必要があります。 - 7
- オプション: MCO がレジストリーからベースオペレーティングシステムイメージをプルするために必要なプルシークレットの名前を指定します。デフォルトでは、グローバルプルシークレットが使用されます。
- 8
- 新しくビルドされたカスタムレイヤーイメージをプッシュするイメージレジストリーを指定します。これは、
host[:port][/namespace]/nameまたはsvc_name.namespace.svc[:port]/repository/name:<tag>形式で、クラスターがアクセスできる任意のレジストリーにすることができます。この例では、内部 OpenShift Container Platform レジストリーを使用します。クラスターがミラーレジストリーを使用するように適切に設定されている場合は、ミラーレジストリーを指定できます。 - 9
- MCO が新しくビルドされたカスタムレイヤーイメージをそのレジストリーにプッシュするために必要なプッシュシークレットの名前を指定します。
MachineOSConfigオブジェクトを作成します。oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
MachineOSBuildオブジェクトが作成されてREADY状態になったら、必要に応じて、新しいカスタムレイヤーイメージを使用するノードのノード仕様を変更します。MachineOSBuildオブジェクトがREADYであることを確認します。SUCCEEDED値がTrueになったら、ビルドは完了です。oc get machineosbuild
$ oc get machineosbuildCopy to Clipboard Copied! Toggle word wrap Toggle overflow MachineOSBuildオブジェクトが準備完了状態であることを示す出力例NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-ad5a3cad36303c363cf458ab0524e7c0-builder False False True False False
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-ad5a3cad36303c363cf458ab0524e7c0-builder False False True False FalseCopy to Clipboard Copied! Toggle word wrap Toggle overflow MachineOSConfigオブジェクトで指定したマシン設定プールのラベルを追加して、カスタムレイヤーイメージをデプロイするノードを編集します。oc label node <node_name> 'node-role.kubernetes.io/<mcp_name>='
$ oc label node <node_name> 'node-role.kubernetes.io/<mcp_name>='Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
- node-role.kubernetes.io/<mcp_name>=
- カスタムレイヤーイメージをデプロイするノードを特定するノードセレクターを指定します。
変更を保存すると、MCO がノードをドレインし、スケジューリング対象から外して再起動します。再起動後、ノードは新しいカスタムレイヤーイメージを使用します。
検証
次のコマンドを実行して、新しい Pod の準備ができていることを確認します。
oc get pods -n openshift-machine-config-operator
$ oc get pods -n openshift-machine-config-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE build-layered-ad5a3cad36303c363cf458ab0524e7c0-hxrws 2/2 Running 0 2m40s # ... machine-os-builder-6fb66cfb99-zcpvq 1/1 Running 0 2m42s
NAME READY STATUS RESTARTS AGE build-layered-ad5a3cad36303c363cf458ab0524e7c0-hxrws 2/2 Running 0 2m40s1 # ... machine-os-builder-6fb66cfb99-zcpvq 1/1 Running 0 2m42s2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
MachineOSConfigオブジェクトに新しいカスタムレイヤーイメージへの参照が含まれていることを確認します。oc get machineosbuilds
$ oc get machineosbuildsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-ad5a3cad36303c363cf458ab0524e7c0 False True False False False
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-ad5a3cad36303c363cf458ab0524e7c0 False True False False False1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
MachineOSBuildの名前は、<MachineOSConfig_CR_name>-<hash>という形式で付けられます。
次のコマンドを実行して、
MachineOSBuildオブジェクトに新しいカスタムレイヤーイメージへの参照が含まれていることを確認します。oc describe machineosbuild <object_name>
$ oc describe machineosbuild <object_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 新しいカスタムレイヤーイメージのダイジェスト付きイメージプル仕様。
適切なノードが新しいカスタムレイヤーイメージを使用していることを確認します。
コントロールプレーンノードの root としてデバッグセッションを開始します。
oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow /hostをデバッグシェル内のルートディレクトリーとして設定します。chroot /host
sh-4.4# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow rpm-ostree statusコマンドを実行して、カスタムレイヤーイメージが使用されていることを確認します。rpm-ostree status
sh-5.1# rpm-ostree statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
# ... Deployments: * ostree-unverified-registry:image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-images@sha256:312e48825e074b01a913deedd6de68abd44894ede50b2d14f99d722f13cda04b Digest: sha256:312e48825e074b01a913deedd6de68abd44894ede50b2d14f99d722f13cda04b Version: 418.94.202502100215-0 (2025-02-12T19:20:44Z)# ... Deployments: * ostree-unverified-registry:image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-images@sha256:312e48825e074b01a913deedd6de68abd44894ede50b2d14f99d722f13cda04b Digest: sha256:312e48825e074b01a913deedd6de68abd44894ede50b2d14f99d722f13cda04b1 Version: 418.94.202502100215-0 (2025-02-12T19:20:44Z)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 新しいカスタムレイヤーイメージのダイジェスト付きイメージプル仕様。
7.3.2. カスタムレイヤーイメージの変更 リンクのコピーリンクがクリップボードにコピーされました!
必要に応じて、クラスター上のカスタムレイヤーイメージを変更できます。これにより、追加のパッケージをインストールしたり、既存のパッケージを削除したり、プルまたはプッシュリポジトリーを変更したり、シークレットを更新したり、その他の同様の変更を行ったりすることができます。また、MachineOSConfig オブジェクトを編集したり、MachineOSConfig オブジェクトを作成した YAML ファイルに変更を適用したり、その目的のために新しい YAML ファイルを作成したりできます。
MachineOSConfig オブジェクト YAML を変更して適用するか、新しい YAML ファイルを作成すると、MachineOSConfig オブジェクト自体に直接行った変更が YAML によって上書きされます。
MachineOSConfig オブジェクトに特定の変更を加えると、関連するカスタムレイヤーイメージの自動再ビルドがトリガーされます。「マシン設定プールの一時停止」で説明されているように、カスタムレイヤーイメージが適用されているマシン設定プールを一時停止することで、再ビルドの影響を軽減できます。プールの一時停止中、ビルド完了後に新しくビルドされたイメージを、MCO がノードにロールアウトすることはありません。ただし、プールが一時停止しているかどうかに関係なく、ビルドは引き続き実行されます。たとえば、MachineOSCOnfig オブジェクトを削除して置き換える必要がある場合、変更を行う前にマシン設定プールを一時停止すると、関連するノードが MCO によってベースイメージに戻されるのを防ぎ、必要な再起動の回数を減らすことができます。
マシン設定プールを一時停止すると、oc get machineconfigpools で次のステータスが報告されます。
出力例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-a0b404d061a6183cc36d302363422aba True False False 3 3 3 0 4h14m worker rendered-worker-221507009cbcdec0eec8ab3ccd789d18 False False False 2 2 2 0 4h14m
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE
master rendered-master-a0b404d061a6183cc36d302363422aba True False False 3 3 3 0 4h14m
worker rendered-worker-221507009cbcdec0eec8ab3ccd789d18 False False False 2 2 2 0 4h14m
- 1
workerマシン設定プールは一時停止しています。これは、3 つのFalseステータスと、READYMACHINECOUNTが0であることからわかります。
変更がロールアウトされたら、マシン設定プールの一時停止を解除できます。
前提条件
-
MachineOSConfigオブジェクトを作成して、クラスター上でのレイヤー化を使用することを選択した。
手順
オブジェクトを変更して、関連するカスタムレイヤーイメージを更新します。
MachineOSConfigオブジェクトを編集して、カスタムレイヤーイメージを変更します。次の例では、カスタムレイヤーイメージを使用してインストールされたツリーパッケージがすでにあるノードに、rngdデーモンを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を保存すると、MCO がノードをドレインし、スケジューリング対象から外して再起動します。再起動後、ノードはクラスターベースの Red Hat Enterprise Linux CoreOS (RHCOS) イメージを使用します。シークレットだけを変更した場合、新しいビルドがトリガーされず、再起動も実行されません。
検証
次のコマンドを使用して、新しい
MachineOSBuildオブジェクトが作成されたことを確認します。oc get machineosbuild
$ oc get machineosbuildCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-a5457b883f5239cdcb71b57e1a30b6ef False False True False False layered-f91f0f5593dd337d89bf4d38c877590b False True False False False
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-a5457b883f5239cdcb71b57e1a30b6ef False False True False False layered-f91f0f5593dd337d89bf4d38c877590b False True False False False1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
BUILDING列のTrue値は、MachineOSBuildオブジェクトがビルド中であることを示します。SUCCEEDED列にTrueが表示されたら、ビルドは完了です。
次のコマンドを使用して、新しいマシン設定がノードにロールアウトされる様子を確認できます。
oc get machineconfigpools
$ oc get machineconfigpoolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-a0b404d061a6183cc36d302363422aba True False False 3 3 3 0 3h38m worker rendered-worker-221507009cbcdec0eec8ab3ccd789d18 False True False 2 2 2 0 3h38m
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-a0b404d061a6183cc36d302363422aba True False False 3 3 3 0 3h38m worker rendered-worker-221507009cbcdec0eec8ab3ccd789d18 False True False 2 2 2 0 3h38m1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
UPDATED列のFALSE値は、MachineOSBuildオブジェクトがビルド中であることを示します。UPDATED列にFALSEが表示される場合、ノードへの新しいカスタムレイヤーイメージのロールアウトが完了しています。
ノードが
Ready状態に戻ったら、変更が適用されたことを確認します。次のコマンドを実行して、ノードへの
oc debugセッションを開きます。oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、デバッグシェル内のルートディレクトリーとして
/hostを設定します。chroot /host
sh-5.1# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 適切なコマンドを使用して、変更が適用されたことを確認します。次の例は、
rngdデーモンがインストールされたことを示しています。rpm -qa |grep rng-tools
sh-5.1# rpm -qa |grep rng-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
rng-tools-6.17-3.fc41.x86_64
rng-tools-6.17-3.fc41.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow rngd -v
sh-5.1# rngd -vCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
rngd 6.16
rngd 6.16Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
7.3.3. クラスター上のカスタムレイヤーイメージの再ビルド リンクのコピーリンクがクリップボードにコピーされました!
クラスター上のカスタムレイヤーイメージを再ビルドする必要がある場合は、MachineOSConfig オブジェクトを変更するか、MachineOSConfig オブジェクトにアノテーションを追加することができます。これら両方のアクションにより、オブジェクトの自動再ビルドがトリガーされます。たとえば、Containerfile を変更した場合や、マシン設定内の osimageurl の場所を更新する必要がある場合は、再ビルドを実行できます。
アノテーションを追加すると、Machine Config Operator (MCO) は現在の MachineOSBuild オブジェクトを削除し、その代わりに新しいオブジェクトを作成します。ビルドプロセスが完了すると、MCO は自動的にアノテーションを削除します。
前提条件
-
MachineOSConfigオブジェクトを作成し、{image-mode-os-on-lower} にオプトインしている。
手順
次のコマンドを使用して、
MachineOSConfigオブジェクトを編集し、machineconfiguration.openshift.io/rebuildアノテーションを追加します。oc edit MachineOSConfig <object_name>
$ oc edit MachineOSConfig <object_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow MachineOSConfigオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- このアノテーションを追加すると、カスタムレイヤーイメージの再ビルドがトリガーされます。
検証
次のコマンドを使用して、
MachineOSBuildオブジェクトがビルドされていることを確認します。oc get machineosbuild
$ oc get machineosbuildCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED AGE layered-d6b929a29c6dbfa8e4007c8069a2fd08 False True False False False 2m41s
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED AGE layered-d6b929a29c6dbfa8e4007c8069a2fd08 False True False False False 2m41s1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
BUILDING列のTrue値は、MachineOSBuildオブジェクトがビルド中であることを示します。
次のコマンドを使用して、
MachineOSConfigオブジェクトを編集し、MCO がmachineconfiguration.openshift.io/rebuildアノテーションを削除したことを確認します。oc edit MachineOSConfig <object_name>
$ oc edit MachineOSConfig <object_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow MachineOSConfigオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.4. クラスター上のカスタムレイヤーイメージを元に戻す リンクのコピーリンクがクリップボードにコピーされました!
MachineOSConfig オブジェクトで指定したマシン設定プール (MCP) のラベルを削除することで、クラスター上のカスタムレイヤーイメージをノードから元に戻すことができます。ラベルを削除すると、Machine Config Operator (MCO) が、クラスターベースの Red Hat Enterprise Linux CoreOS (RHCOS) イメージと、以前に行われたマシン設定の変更を使用して、その MCP 内のノードを再起動し、カスタムレイヤーイメージを上書きします。
カスタムレイヤーイメージがデプロイされているノードがカスタムマシン設定プールを使用している場合は、ラベルを削除する前に、ノードが 2 番目の MCP に関連付けられていることを確認してください。
oc label node/<node_name> 'node-role.kubernetes.io/<mcp_name>=' ラベルを使用すると、カスタムレイヤーイメージをノードに再適用できます。
前提条件
-
MachineOSConfigオブジェクトを作成して、クラスター上でのレイヤー化を使用することを選択した。
手順
次のコマンドを使用して、ノードからラベルを削除します。
oc label node/<node_name> node-role.kubernetes.io/<mcp_name>-
$ oc label node/<node_name> node-role.kubernetes.io/<mcp_name>-Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を保存すると、MCO がノードをドレインし、スケジューリング対象から外して再起動します。再起動後、ノードはクラスターベースの Red Hat Enterprise Linux CoreOS (RHCOS) イメージを使用します。
検証
次のチェックを実行することで、カスタムレイヤーイメージが削除されたことを確認できます。
ワーカーマシン設定プールが以前のマシン設定で更新されていることを確認します。
oc get mcp
$ oc get mcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-8332482204e0b76002f15ecad15b6c2d True False False 3 3 3 0 5h26m worker rendered-worker-bde4e4206442c0a48b1a1fb35ba56e85 False True False 3 2 2 0 5h26m
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-8332482204e0b76002f15ecad15b6c2d True False False 3 3 3 0 5h26m worker rendered-worker-bde4e4206442c0a48b1a1fb35ba56e85 False True False 3 2 2 0 5h26m1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
UPDATED列のFALSE値は、MachineOSBuildオブジェクトがビルド中であることを示します。UPDATED列にFALSEが表示される場合、ノードへのベースイメージのロールアウトが完了しています。
ノードをチェックして、ノードのスケジューリングが無効になっていることを確認します。これは、変更が適用されていることを示しています。
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードが
Ready状態に戻ったら、ノードが基本イメージを使用していることを確認します。ノードへの
oc debugセッションを開きます。以下に例を示します。oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow /hostをデバッグシェル内のルートディレクトリーとして設定します。chroot /host
sh-5.1# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow rpm-ostree statusコマンドを実行して、ベースイメージが使用中であることを確認します。rpm-ostree status
sh-5.1# rpm-ostree statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
State: idle Deployments: * ostree-unverified-image:containers-storage:quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:76721c875a2b79688be46b1dca654c2c6619a6be28b29a2822cd86c3f9d8e3c1 Digest: sha256:76721c875a2b79688be46b1dca654c2c6619a6be28b29a2822cd86c3f9d8e3c1 Version: 418.94.202501300706-0 (2025-01-30T07:10:58Z)State: idle Deployments: * ostree-unverified-image:containers-storage:quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:76721c875a2b79688be46b1dca654c2c6619a6be28b29a2822cd86c3f9d8e3c1 Digest: sha256:76721c875a2b79688be46b1dca654c2c6619a6be28b29a2822cd86c3f9d8e3c1 Version: 418.94.202501300706-0 (2025-01-30T07:10:58Z)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.5. クラスター上のカスタムレイヤーイメージの削除 リンクのコピーリンクがクリップボードにコピーされました!
カスタムレイヤーイメージがレジストリー内で過剰なスペースを占有しないようにするには、イメージを作成した MachineOSBuild オブジェクトを削除することで、クラスター上のカスタムレイヤーイメージをリポジトリーから自動的に削除できます。
MachineOSBuild オブジェクトに追加したレジストリープッシュシークレットによって提供される認証情報は、レジストリーからイメージを削除するパーミッションを付与する必要があります。削除パーミッションが付与されていない場合、MachineOSBuild オブジェクトを削除してもイメージは削除されません。
カスタムレイヤーイメージがノードで現在使用中であるか、またはノードに要求されている場合、そのイメージは削除されません。この状態は、MachineOSConfig オブジェクトの作成時にノードへ追加される、machineconfiguration.openshift.io/currentImage または machineconfiguration.openshift.io/desiredImage アノテーションによって示されます。