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-config
namespace のuser-ca-bundle
configmap を更新することによる信頼できる CA の変更
-
-
カスタムレイヤーイメージの作成に使用するイメージは、プッシュレジストリー内の領域を占有します。レジストリー内の空き領域に常に注意して、必要に応じてイメージを削除してください。イメージを作成した
MachineOSBuild
オブジェクトを削除することで、クラスター上のカスタムレイヤーイメージをリポジトリーから自動的に削除できます。レジストリープッシュシークレットによって提供される認証情報は、レジストリーからイメージを削除するパーミッションも付与する必要があることに注意してください。詳細は、「クラスター上のカスタムレイヤーイメージの削除」を参照してください。
前提条件
MCO がベースオペレーティングシステムイメージをプルするために必要なプルシークレットのコピーが
openshift-machine-config-operator
namespace にある。たとえば、グローバルプルシークレットを使用している場合は、次のコマンドを実行できます。
$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
MachineConfig
CR に必要なmachineconfiguration.openshift.io/v1
API を指定します。- 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>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
MachineOSBuild
オブジェクトが作成されてREADY
状態になったら、必要に応じて、新しいカスタムレイヤーイメージを使用するノードのノード仕様を変更します。MachineOSBuild
オブジェクトがREADY
であることを確認します。SUCCEEDED
値がTrue
になったら、ビルドは完了です。oc get machineosbuild
$ oc get machineosbuild
Copy 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 False
Copy 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-operator
Copy 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 2m40s
1 # ... machine-os-builder-6fb66cfb99-zcpvq 1/1 Running 0 2m42s
2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
MachineOSConfig
オブジェクトに新しいカスタムレイヤーイメージへの参照が含まれていることを確認します。oc get machineosbuilds
$ oc get machineosbuilds
Copy 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 False
1 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 /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rpm-ostree status
コマンドを実行して、カスタムレイヤーイメージが使用されていることを確認します。rpm-ostree status
sh-5.1# rpm-ostree status
Copy 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
1 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 machineosbuild
Copy 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 False
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
BUILDING
列のTrue
値は、MachineOSBuild
オブジェクトがビルド中であることを示します。SUCCEEDED
列にTrue
が表示されたら、ビルドは完了です。
次のコマンドを使用して、新しいマシン設定がノードにロールアウトされる様子を確認できます。
oc get machineconfigpools
$ oc get machineconfigpools
Copy 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 3h38m
1 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 /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 適切なコマンドを使用して、変更が適用されたことを確認します。次の例は、
rngd
デーモンがインストールされたことを示しています。rpm -qa |grep rng-tools
sh-5.1# rpm -qa |grep rng-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
rng-tools-6.17-3.fc41.x86_64
rng-tools-6.17-3.fc41.x86_64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rngd -v
sh-5.1# rngd -v
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
rngd 6.16
rngd 6.16
Copy 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 machineosbuild
Copy 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 2m41s
1 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 mcp
Copy 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 5h26m
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
UPDATED
列のFALSE
値は、MachineOSBuild
オブジェクトがビルド中であることを示します。UPDATED
列にFALSE
が表示される場合、ノードへのベースイメージのロールアウトが完了しています。
ノードをチェックして、ノードのスケジューリングが無効になっていることを確認します。これは、変更が適用されていることを示しています。
oc get nodes
$ oc get nodes
Copy 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 /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rpm-ostree status
コマンドを実行して、ベースイメージが使用中であることを確認します。rpm-ostree status
sh-5.1# rpm-ostree status
Copy 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
アノテーションによって示されます。