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
Copy to Clipboard Toggle word wrap

ビルダー Pod の例

NAME                                                READY   STATUS      RESTARTS        AGE
build-layered-c8765e26ebc87e1e17a7d6e0a78e8bae      2/2     Running     0               11m
Copy to Clipboard Toggle word wrap

ビルドが完了すると、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 
1
Copy to Clipboard Toggle word wrap

1
worker マシン設定プールは一時停止しています。これは、3 つの False ステータスと、READYMACHINECOUNT0 であることからわかります。

変更がロールアウトされたら、マシン設定プールの一時停止を解除できます。

ネットワークの問題や無効なシークレットなどによりビルドが失敗した場合、MCO は、ジョブが失敗する前に、ビルドをさらに 3 回再試行します。MCO は、ビルドの試行ごとに異なるビルド Pod を作成します。ビルド Pod のログを使用すると、ビルドの失敗をトラブルシューティングできます。ただし、MCO は、しばらくするとこれらのビルド Pod を自動的に削除します。

失敗した MachineOSBuild オブジェクトの例

NAME                                       PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED
layered-c8765e26ebc87e1e17a7d6e0a78e8bae   False      False      False        False        True
Copy to Clipboard Toggle word wrap

MachineOSConfig オブジェクトを変更するか、MachineOSConfig オブジェクトにアノテーションを適用することで、カスタムレイヤーイメージを手動で再ビルドできます。詳細は、「クラスター上のカスタムレイヤーイメージの再ビルド」を参照してください。

カスタムマシン設定プールを使用してクラスター上のレイヤーイメージをノードに適用した場合は、ノードからカスタムレイヤーイメージを削除し、ベースイメージに戻すことができます。詳細は「クラスター上のレイヤーノードを元に戻す」を参照してください。

MachineOSConfig オブジェクトを編集することで、必要に応じてカスタム上のレイヤーイメージを変更し、追加パッケージのインストール、既存パッケージの削除、リポジトリーの変更、シークレットの更新、またはその他の同様の変更を行うことができます。詳細は、「カスタムレイヤーイメージの変更」を参照してください。

7.3.1. クラスター上の階層化の既知の制限

クラスター上のレイヤー化機能を使用する場合は、次の制限に注意してください。

  • クラスター上でのレイヤー化は、AMD64 アーキテクチャー上の OpenShift Container Platform クラスターでのみサポートされています。
  • マルチアーキテクチャーコンピューティングマシンまたは単一ノードの OpenShift クラスターでは、クラスター上の階層化はサポートされません。
  • カスタムレイヤーイメージを使用するマシンセットをスケールアップすると、ノードが 2 回再起動します。1 回目は、ノードがベースイメージを使用して最初に作成されるとき、2 回目はカスタムレイヤーイメージが適用されるときです。
  • カスタムレイヤーイメージを持つノードでは、node disruption policy がサポートされません。その結果、次の設定変更によりノードが再起動します。

    • /var または /etc ディレクトリー内の設定ファイルの変更
    • systemd サービスの追加または変更
    • SSH キーの変更
    • ICSPITMS、および 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}}')
    Copy to Clipboard Toggle word wrap
  • MCO が新しいカスタムレイヤーイメージをプッシュするために必要なレジストリーのプッシュシークレットがある。
  • ノードがレジストリーから新しいカスタムレイヤーイメージをプルするために必要なプルシークレットがある。これは、イメージをリポジトリーにプッシュするために使用するシークレットとは異なるシークレットである必要があります。
  • Containerfile を設定する方法をよく理解している。Containerfile の作成方法は、このドキュメントの範囲外です。
  • オプション: カスタムレイヤーイメージを適用するノード用に、別のマシン設定プールがある。ノード用のカスタムマシン設定プールを持つことの利点の 1 つは、必要に応じて簡単にベースイメージに戻すことができることです。詳細は「クラスター上のレイヤーノードを元に戻す」を参照してください。

手順

  1. MachineOSconfig オブジェクトを作成します。

    1. 以下のような YAML ファイルを作成します。

      apiVersion: machineconfiguration.openshift.io/v1 
      1
      
      kind: MachineOSConfig
      metadata:
        name: layered 
      2
      
      spec:
        machineConfigPool:
          name: layered 
      3
      
        containerFile: 
      4
      
        - containerfileArch: NoArch 
      5
      
          content: |-
            FROM configs AS final
            RUN dnf install -y cowsay && \
              dnf clean all && \
              ostree container commit
        imageBuilder: 
      6
      
          imageBuilderType: Job
        baseImagePullSecret: 
      7
      
          name: global-pull-secret-copy
        renderedImagePushSpec: image-registry.openshift-image-registry.svc:5000/openshift/os-image:latest  
      8
      
        renderedImagePushSecret: 
      9
      
          name: builder-dockercfg-mtcl23
      Copy to Clipboard Toggle word wrap
      1
      MachineConfig CR に必要な machineconfiguration.openshift.io/v1 API を指定します。
      2
      MachineOSConfig オブジェクトの名前を指定します。この名前は、関連付けられているマシン設定プールの名前と一致する必要があります。この名前は、クラスター上でのレイヤー化用のリソースで使用されます。このドキュメントの例では、layered という名前を使用します。
      3
      カスタムレイヤーイメージをデプロイするノードに関連付けられているマシン設定プールの名前を指定します。このドキュメントの例では、layered マシン設定プールを使用します。
      4
      カスタムレイヤーイメージを設定するための Containerfile を指定します。
      5
      この Containerfile をビルドするアーキテクチャーを ARM64AMD64PPC64LES390X、または 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 が新しくビルドされたカスタムレイヤーイメージをそのレジストリーにプッシュするために必要なプッシュシークレットの名前を指定します。
    2. MachineOSConfig オブジェクトを作成します。

      $ oc create -f <file_name>.yaml
      Copy to Clipboard Toggle word wrap
  2. MachineOSBuild オブジェクトが作成されて READY 状態になったら、必要に応じて、新しいカスタムレイヤーイメージを使用するノードのノード仕様を変更します。

    1. MachineOSBuild オブジェクトが READY であることを確認します。SUCCEEDED 値が True になったら、ビルドは完了です。

      $ oc get machineosbuild
      Copy to Clipboard Toggle word wrap

      MachineOSBuild オブジェクトが準備完了状態であることを示す出力例

      NAME                                               PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED
      layered-ad5a3cad36303c363cf458ab0524e7c0-builder   False      False      True        False         False
      Copy to Clipboard Toggle word wrap

    2. MachineOSConfig オブジェクトで指定したマシン設定プールのラベルを追加して、カスタムレイヤーイメージをデプロイするノードを編集します。

      $ oc label node <node_name> 'node-role.kubernetes.io/<mcp_name>='
      Copy to Clipboard Toggle word wrap

      ここでは、以下のようになります。

      node-role.kubernetes.io/<mcp_name>=
      カスタムレイヤーイメージをデプロイするノードを特定するノードセレクターを指定します。

      変更を保存すると、MCO がノードをドレインし、スケジューリング対象から外して再起動します。再起動後、ノードは新しいカスタムレイヤーイメージを使用します。

検証

  1. 次のコマンドを実行して、新しい Pod の準備ができていることを確認します。

    $ oc get pods -n openshift-machine-config-operator
    Copy to Clipboard Toggle word wrap

    出力例

    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 Toggle word wrap

    1
    これは、カスタムレイヤーイメージがビルドされるビルド Pod です。build-<MachineOSConfig_CR_name>-<hash> という形式の名前が付けられます。
    2
    この Pod はトラブルシューティングに使用できます。
  2. 次のコマンドを実行して、MachineOSConfig オブジェクトに新しいカスタムレイヤーイメージへの参照が含まれていることを確認します。

    $ oc get machineosbuilds
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                       PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED
    layered-ad5a3cad36303c363cf458ab0524e7c0   False      True       False       False         False 
    1
    Copy to Clipboard Toggle word wrap

    1
    MachineOSBuild の名前は、<MachineOSConfig_CR_name>-<hash> という形式で付けられます。
  3. 次のコマンドを実行して、MachineOSBuild オブジェクトに新しいカスタムレイヤーイメージへの参照が含まれていることを確認します。

    $ oc describe machineosbuild <object_name>
    Copy to Clipboard Toggle word wrap

    出力例

    Name:         layered-ad5a3cad36303c363cf458ab0524e7c0
    # ...
    API Version:  machineconfiguration.openshift.io/v1
    Kind:         MachineOSBuild
    # ...
    Spec:
      Config Generation:  1
      Desired Config:
        Name:  rendered-layered-ad5a3cad36303c363cf458ab0524e7c0
      Machine OS Config:
        Name:                   layered
      Rendered Image Pushspec:  image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-images:layered-ad5a3cad36303c363cf458ab0524e7c0
    # ...
        Last Transition Time:  2025-02-12T19:21:28Z
        Message:               Build Ready
        Reason:                Ready
        Status:                True
        Type:                  Succeeded
      Final Image Pullspec:    image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-images@sha256:312e48825e074b01a913deedd6de68abd44894ede50b2d14f99d722f13cda04b 
    1
    Copy to Clipboard Toggle word wrap

    1
    新しいカスタムレイヤーイメージのダイジェスト付きイメージプル仕様。
  4. 適切なノードが新しいカスタムレイヤーイメージを使用していることを確認します。

    1. コントロールプレーンノードの root としてデバッグセッションを開始します。

      $ oc debug node/<node_name>
      Copy to Clipboard Toggle word wrap
    2. /host をデバッグシェル内のルートディレクトリーとして設定します。

      sh-4.4# chroot /host
      Copy to Clipboard Toggle word wrap
    3. rpm-ostree status コマンドを実行して、カスタムレイヤーイメージが使用されていることを確認します。

      sh-5.1# rpm-ostree status
      Copy to Clipboard Toggle word wrap

      出力例

      # ...
      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 Toggle word wrap

      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 
1
Copy to Clipboard Toggle word wrap

1
worker マシン設定プールは一時停止しています。これは、3 つの False ステータスと、READYMACHINECOUNT0 であることからわかります。

変更がロールアウトされたら、マシン設定プールの一時停止を解除できます。

前提条件

  • MachineOSConfig オブジェクトを作成して、クラスター上でのレイヤー化を使用することを選択した。

手順

  • オブジェクトを変更して、関連するカスタムレイヤーイメージを更新します。

    1. MachineOSConfig オブジェクトを編集して、カスタムレイヤーイメージを変更します。次の例では、カスタムレイヤーイメージを使用してインストールされたツリーパッケージがすでにあるノードに、rngd デーモンを追加します。

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineOSConfig
      metadata:
        name: layered
      spec:
        machineConfigPool:
          name: layered
        containerFile:
        - containerfileArch: NoArch
          content: |- 
      1
      
            FROM configs AS final
            RUN dnf install -y cowsay && \
              dnf clean all && \
              ostree container commit
        imageBuilder:
          imageBuilderType: Job
        baseImagePullSecret:
          name: global-pull-secret-copy 
      2
      
        renderedImagePushSpec: image-registry.openshift-image-registry.svc:5000/openshift/os-image:latest 
      3
      
        renderedImagePushSecret: 
      4
      
          name: builder-dockercfg-mtcl23
      Copy to Clipboard Toggle word wrap
      1
      オプション: パッケージを追加または削除するなどして、Containerfile を変更します。
      2
      オプション: レジストリーからベースオペレーティングシステムイメージを取得するために必要なシークレットを更新します。
      3
      オプション: 新しくビルドされたカスタムレイヤーイメージのプッシュ先のイメージレジストリーを変更します。
      4
      オプション: 新しくビルドされたカスタムレイヤーイメージをレジストリーにプッシュするために必要なシークレットを更新します。

      変更を保存すると、MCO がノードをドレインし、スケジューリング対象から外して再起動します。再起動後、ノードはクラスターベースの Red Hat Enterprise Linux CoreOS (RHCOS) イメージを使用します。シークレットだけを変更した場合、新しいビルドがトリガーされず、再起動も実行されません。

検証

  1. 次のコマンドを使用して、新しい MachineOSBuild オブジェクトが作成されたことを確認します。

    $ oc get machineosbuild
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                       PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED
    layered-a5457b883f5239cdcb71b57e1a30b6ef   False      False      True        False         False
    layered-f91f0f5593dd337d89bf4d38c877590b   False      True       False       False         False 
    1
    Copy to Clipboard Toggle word wrap

    1
    BUILDING 列の True 値は、MachineOSBuild オブジェクトがビルド中であることを示します。SUCCEEDED 列に True が表示されたら、ビルドは完了です。
  2. 次のコマンドを使用して、新しいマシン設定がノードにロールアウトされる様子を確認できます。

    $ oc get machineconfigpools
    Copy to Clipboard Toggle word wrap

    出力例

    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 Toggle word wrap

    1
    UPDATED 列の FALSE 値は、MachineOSBuild オブジェクトがビルド中であることを示します。UPDATED 列に FALSE が表示される場合、ノードへの新しいカスタムレイヤーイメージのロールアウトが完了しています。
  3. ノードが Ready 状態に戻ったら、変更が適用されたことを確認します。

    1. 次のコマンドを実行して、ノードへの oc debug セッションを開きます。

      $ oc debug node/<node_name>
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、デバッグシェル内のルートディレクトリーとして /host を設定します。

      sh-5.1# chroot /host
      Copy to Clipboard Toggle word wrap
    3. 適切なコマンドを使用して、変更が適用されたことを確認します。次の例は、rngd デーモンがインストールされたことを示しています。

      sh-5.1# rpm -qa |grep rng-tools
      Copy to Clipboard Toggle word wrap

      出力例

      rng-tools-6.17-3.fc41.x86_64
      Copy to Clipboard Toggle word wrap

      sh-5.1# rngd -v
      Copy to Clipboard Toggle word wrap

      出力例

      rngd 6.16
      Copy to Clipboard Toggle word wrap

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>
    Copy to Clipboard Toggle word wrap

    MachineOSConfig オブジェクトの例

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineOSConfig
    metadata:
      annotations:
        machineconfiguration.openshift.io/current-machine-os-build: layering-c26d4a003432df70ee66c83981144cfa
        machineconfiguration.openshift.io/rebuild: "" 
    1
    
    # ...
      name: layered
    # ...
    Copy to Clipboard Toggle word wrap

    1
    このアノテーションを追加すると、カスタムレイヤーイメージの再ビルドがトリガーされます。

検証

  • 次のコマンドを使用して、MachineOSBuild オブジェクトがビルドされていることを確認します。

    $ oc get machineosbuild
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                             PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED   AGE
    layered-d6b929a29c6dbfa8e4007c8069a2fd08   False      True       False       False         False    2m41s 
    1
    Copy to Clipboard Toggle word wrap

    1
    BUILDING 列の True 値は、MachineOSBuild オブジェクトがビルド中であることを示します。
  • 次のコマンドを使用して、MachineOSConfig オブジェクトを編集し、MCO が machineconfiguration.openshift.io/rebuild アノテーションを削除したことを確認します。

    $ oc edit MachineOSConfig <object_name>
    Copy to Clipboard Toggle word wrap

    MachineOSConfig オブジェクトの例

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineOSConfig
    metadata:
      annotations:
        machineconfiguration.openshift.io/current-machine-os-build: layering-c26d4a003432df70ee66c83981144cfa
    # ...
      name: layered
    # ...
    Copy to Clipboard Toggle word wrap

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>-
    Copy to Clipboard Toggle word wrap

    変更を保存すると、MCO がノードをドレインし、スケジューリング対象から外して再起動します。再起動後、ノードはクラスターベースの Red Hat Enterprise Linux CoreOS (RHCOS) イメージを使用します。

検証

次のチェックを実行することで、カスタムレイヤーイメージが削除されたことを確認できます。

  1. ワーカーマシン設定プールが以前のマシン設定で更新されていることを確認します。

    $ oc get mcp
    Copy to Clipboard Toggle word wrap

    出力例

    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 Toggle word wrap

    1
    UPDATED 列の FALSE 値は、MachineOSBuild オブジェクトがビルド中であることを示します。UPDATED 列に FALSE が表示される場合、ノードへのベースイメージのロールアウトが完了しています。
  2. ノードをチェックして、ノードのスケジューリングが無効になっていることを確認します。これは、変更が適用されていることを示しています。

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    出力例

    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
    Copy to Clipboard Toggle word wrap

  3. ノードが Ready 状態に戻ったら、ノードが基本イメージを使用していることを確認します。

    1. ノードへの oc debug セッションを開きます。以下に例を示します。

      $ oc debug node/<node_name>
      Copy to Clipboard Toggle word wrap
    2. /host をデバッグシェル内のルートディレクトリーとして設定します。

      sh-5.1# chroot /host
      Copy to Clipboard Toggle word wrap
    3. rpm-ostree status コマンドを実行して、ベースイメージが使用中であることを確認します。

      sh-5.1# rpm-ostree status
      Copy to Clipboard Toggle word wrap

      出力例

      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 Toggle word wrap

7.3.5. クラスター上のカスタムレイヤーイメージの削除

カスタムレイヤーイメージがレジストリー内で過剰なスペースを占有しないようにするには、イメージを作成した MachineOSBuild オブジェクトを削除することで、クラスター上のカスタムレイヤーイメージをリポジトリーから自動的に削除できます。

MachineOSBuild オブジェクトに追加したレジストリープッシュシークレットによって提供される認証情報は、レジストリーからイメージを削除するパーミッションを付与する必要があります。削除パーミッションが付与されていない場合、MachineOSBuild オブジェクトを削除してもイメージは削除されません。

カスタムレイヤーイメージがノードで現在使用中であるか、またはノードに要求されている場合、そのイメージは削除されません。この状態は、MachineOSConfig オブジェクトの作成時にノードへ追加される、machineconfiguration.openshift.io/currentImage または machineconfiguration.openshift.io/desiredImage アノテーションによって示されます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat