8.3. クラスター上のイメージモードについて


「クラスター上のイメージモードを使用してカスタムレイヤーイメージを適用する」で説明されているように、OpenShift クラスター上のビルドプロセスのイメージモードを使用して MachineOSConfig カスタムリソース (CR) を作成し、カスタムレイヤーイメージをノードに適用できます。

オブジェクトを作成すると、Machine Config Operator (MCO) によって MachineOSBuild オブジェクトとビルダー Pod が作成されます。このプロセスでは、config map などの一時オブジェクトも作成されますが、これらはビルドの完了後にクリーンアップされます。MachineOSBuild オブジェクトと関連する builder-* Pod は、<MachineOSConfig_CR_name>-<hash> という同じ命名スキームを使用します。次に例を示します。

MachineOSBuild オブジェクトの例

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

ビルダー Pod の例

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

これらの新しいオブジェクトや machine-os-builder Pod を操作する必要はありません。ただし、これらのリソースは、必要に応じて、すべてトラブルシューティングに使用できます。

ビルドが完了すると、MCO は新しいカスタムレイヤーイメージをリポジトリーにプッシュし、関連付けられているマシン設定プール内のノードにイメージをロールアウトします。新しいカスタムレイヤーイメージのダイジェスト付きイメージプル仕様は、MachineOSConfig オブジェクトで確認できます。これは現在、この MachineOSConfig のアクティブなイメージプル仕様です。

ダイジェスト付きイメージプル仕様の例

apiVersion: machineconfiguration.openshift.io/v1
kind: MachineOSConfig
metadata:
  annotations:
    machineconfiguration.openshift.io/current-machine-os-build: layered-9a8f89455246fa0c42ecee6ff1fa1a45
  labels:
    machineconfiguration.openshift.io/createdByOnClusterBuildsHelper: ""
  name: layered-image
# ...
status:
  currentImagePullSpec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image@sha256:3c8fc667adcb432ce0c83581f16086afec08a961dd28fed69bb6bad6db0a0754
Copy to Clipboard Toggle word wrap

ヒント

非実稼働ノードを含むカスタムマシン設定プールを使用すると、カスタムレイヤーイメージをアクティブなノードにロールアウトせずに、MachineOSBuild オブジェクトをテストして、正しくビルドされることを確認できます。または、ノードのないカスタムマシン設定プールを使用することもできます。MachineOSBuild オブジェクトは、MCO がカスタムレイヤーイメージをデプロイするためのノードがない場合でもビルドされます。

コントロールプレーン、ワーカー、カスタムプールなど、クラスター内の任意のマシン設定プールにカスタムレイヤーイメージを適用できます。

注記

シングルノード OpenShift クラスターの場合、カスタムレイヤーイメージをコントロールプレーンノードにのみ適用できます。

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   AGE
layered-image-c8765e26ebc87e1e17a7d6e0a78e8bae   False      False      False        False        True     12m
Copy to Clipboard Toggle word wrap

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

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

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

8.3.1. クラスター上のイメージモードにおける既知の制限

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

  • マルチアーキテクチャーコンピュートマシンでは、クラスター上のイメージモードはサポートされていません。
  • 同じマシン設定プールで複数の MachineOSConfig オブジェクトを使用することはサポートされていません。異なるカスタムレイヤーイメージを使用したいマシン設定プールごとに、個別の MachineOSConfig CR が必要です。
  • カスタムレイヤーイメージを使用するマシンセットをスケールアップすると、ノードが 2 回再起動します。1 回目は、ノードがベースイメージを使用して最初に作成されるとき、2 回目はカスタムレイヤーイメージが適用されるときです。
  • カスタムレイヤーイメージを持つノードでは、node disruption policy がサポートされません。その結果、次の設定変更によりノードが再起動します。

    • /var または /etc ディレクトリー内の設定ファイルの変更
    • systemd サービスの追加または変更
    • SSH キーの変更
    • ICSPITMS、および IDMS オブジェクトからミラーリングルールの削除
    • openshift-config namespace の user-ca-bundle configmap を更新することによる信頼できる CA の変更
  • カスタムレイヤーイメージの作成に使用するイメージは、プッシュレジストリー内の領域を占有します。レジストリー内の空き領域に常に注意して、必要に応じてイメージを削除してください。イメージを作成した MachineOSBuild オブジェクトを削除することで、クラスター上のカスタムレイヤーイメージをリポジトリーから自動的に削除できます。レジストリープッシュシークレットによって提供される認証情報は、レジストリーからイメージを削除するパーミッションも付与する必要があることに注意してください。詳細は、「クラスター上のカスタムレイヤーイメージの削除」を参照してください。

8.3.2. クラスター上のイメージモードを使用してカスタムレイヤーイメージを適用する

クラスター上のビルドプロセスを使用してカスタムレイヤーイメージをクラスターに適用するには、次のパラメーターを指定する MachineOSConfig カスタムリソース (CR) を作成します。

  • ビルドする Containerfile
  • ビルドを関連付けるマシン設定プール
  • 最終的なイメージをプッシュおよびプルする場所
  • 使用するプッシュシークレットとプルシークレット

各マシン設定プールに対して、MachineOSConfig CR を 1 つだけ作成できます。

前提条件

  • リポジトリーからベースオペレーティングシステムイメージをプルするために Machine Config Operator (MCO) が必要とするプルシークレットが openshift-machine-config-operator namespace にある。デフォルトでは、MCO はクラスターのグローバルプルシークレットを使用し、これを openshift-machine-config-operator namespace に同期します。プルシークレットを OpenShift Container Platform グローバルプルシークレットに追加することも、別のプルシークレットを使用することもできます。グローバルプルシークレットの変更は、「グローバルクラスターのプルシークレットの更新」を参照してください。
  • MCO が新しいカスタムレイヤーイメージをプッシュするために必要なレジストリーのプッシュシークレットがある。シークレットによって提供される認証情報は、レジストリーからイメージを削除するパーミッションも付与する必要があります。

    注記

    非接続環境では、非接続クラスターがイメージをプッシュするレジストリーにアクセスできることを確認します。イメージのミラーリングはイメージのプルにのみ適用されます。

  • ノードがレジストリーから新しいカスタムレイヤーイメージをプルするために必要なプルシークレットがあります。これは、イメージをリポジトリーにプッシュするために使用するシークレットとは異なるシークレットである必要があります。
  • Containerfile を設定する方法をよく理解している。Containerfile の作成方法は、このドキュメントの範囲外です。
  • オプション: カスタムレイヤーイメージを適用するノード用に、別のマシン設定プールがある。ノード用のカスタムマシン設定プールを持つことの利点の 1 つは、必要に応じて簡単にベースイメージに戻すことができることです。詳細は「クラスター上のレイヤーノードを元に戻す」を参照してください。

手順

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

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

      apiVersion: machineconfiguration.openshift.io/v1 
      1
      
      kind: MachineOSConfig
      metadata:
        name: layered-image 
      2
      
      spec:
        machineConfigPool:
          name: layered-image 
      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-image という名前を使用します。
      3
      カスタムレイヤーイメージをデプロイするノードに関連付けられているマシン設定プールの名前を指定します。このドキュメントの例では、layered-image マシン設定プールを使用します。
      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 <filename>.yaml
      Copy to Clipboard Toggle word wrap
  2. MachineOSBuild オブジェクトが作成されて READY 状態になったら、必要に応じて、新しいカスタムレイヤーイメージを使用するノードのノード仕様を変更します。

    1. 次のコマンドを実行して、MachineOSBuild オブジェクトの準備ができていることを確認します。

      $ oc get machineosbuild
      Copy to Clipboard Toggle word wrap

      SUCCEEDED 値が True になったら、ビルドは完了です。

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

      NAME                                                     PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED   AGE
      layered-image-ad5a3cad36303c363cf458ab0524e7c0-builder   False      False      True        False         False    43s
      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-image-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. 次のコマンドを実行して、レイヤービルドの現在のステージを確認します。

    $ oc get machineosbuilds
    Copy to Clipboard Toggle word wrap

    出力例

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

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

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

    ダイジェスト付きイメージプル仕様の例

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineOSConfig
    metadata:
      annotations:
        machineconfiguration.openshift.io/current-machine-os-build: layered-9a8f89455246fa0c42ecee6ff1fa1a45
      labels:
        machineconfiguration.openshift.io/createdByOnClusterBuildsHelper: ""
      name: layered-image
    # ...
    status:
      currentImagePullSpec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image@sha256:3c8fc667adcb432ce0c83581f16086afec08a961dd28fed69bb6bad6db0a0754 
    1
    Copy to Clipboard Toggle word wrap

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

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

      $ 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:3c8fc667adcb432ce0c83581f16086afec08a961dd28fed69bb6bad6db0a0754
                         Digest: sha256:3c8fc667adcb432ce0c83581f16086afec08a961dd28fed69bb6bad6db0a0754 
      1
      
                        Version: 419.94.202502100215-0 (2025-02-12T19:20:44Z)
      Copy to Clipboard Toggle word wrap

      1
      新しいカスタムレイヤーイメージのダイジェスト付きイメージプル仕様。

8.3.3. クラスター上のカスタムレイヤーイメージの変更

必要に応じて、クラスター上のカスタムレイヤーイメージを変更できます。これにより、追加のパッケージをインストールしたり、既存のパッケージを削除したり、プルまたはプッシュリポジトリーを変更したり、シークレットを更新したり、その他の同様の変更を行ったりすることができます。また、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-image
      spec:
        machineConfigPool:
          name: layered-image
        containerFile:
        - containerfileArch: noarch
          content: |- 
      1
      
            FROM configs AS final
      
            RUN rpm-ostree install rng-tools && \
                systemctl enable rngd && \
                rpm-ostree cleanup -m && \
                ostree container commit
      
            RUN rpm-ostree install tree && \
                ostree container commit
        imageBuilder:
          imageBuilderType: PodImageBuilder
        baseImagePullSecret:
          name: global-pull-secret-copy 
      2
      
        renderedImagePushspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-images:latest 
      3
      
        renderedImagePushSecret:  
      4
      
          name: new-secret-name
      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   AGE
    layered-image-a5457b883f5239cdcb71b57e1a30b6ef   False      False      True        False         False    4d17h
    layered-image-f91f0f5593dd337d89bf4d38c877590b   False      True       False       False         False    2m41s 
    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

8.3.4. クラスター上のカスタムレイヤーイメージの再ビルド

クラスター上のカスタムレイヤーイメージを再ビルドする必要がある場合は、MachineOSConfig オブジェクトを変更するか、MachineOSConfig オブジェクトにアノテーションを追加することができます。これら両方のアクションにより、オブジェクトの自動再ビルドがトリガーされます。たとえば、Containerfile を変更した場合や、マシン設定内の osimageurl の場所を更新する必要がある場合は、再ビルドを実行できます。

アノテーションを追加すると、Machine Config Operator (MCO) は現在の MachineOSBuild オブジェクトを削除し、その代わりに新しいオブジェクトを作成します。ビルドプロセスが完了すると、MCO は自動的にアノテーションを削除します。

前提条件

  • MachineOSConfig オブジェクトを作成して、クラスター上のイメージモードを選択している。

手順

  • 次のコマンドを使用して、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-image
    # ...
    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-image-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-image
    # ...
    Copy to Clipboard Toggle word wrap

8.3.5. クラスター上のカスタムレイヤーイメージを元に戻す

カスタムマシン設定プール (MCP) 内のノードにクラスター上のレイヤーイメージを適用した場合は、ノードからカスタムレイヤーイメージを削除して、ベースイメージに戻すことができます。

ノードを元に戻すには、ノードからカスタムマシン設定プールラベルを削除して、カスタム MCP からノードを削除します。ラベルを削除すると、Machine Config Operator (MCO) はクラスターベースの Red Hat Enterprise Linux CoreOS (RHCOS) イメージを使用してノードを再起動し、カスタムレイヤードイメージをオーバーライドします。

重要

ラベルを削除する前に、ノードが別の MCP に関連付けられていることを確認してください。

前提条件

  • MachineOSConfig オブジェクトを作成して、クラスター上のイメージモードを選択している。
  • カスタムマシン設定プール内のノードに 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) イメージを使用します。

検証

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

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

      $ oc get mcp
      Copy to Clipboard Toggle word wrap

      出力例

      NAME      CONFIG                                              UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
      layered   rendered-layered-e8c8bc1de69777325003e80bc0c04b82   True      False      False      0              0                   0                     0                      4h20m 
      1
      
      master    rendered-master-50d7bc27ee8b9ca2250383f0647ade7f    True      False      False      3              3                   3                     0                      5h39m
      worker    rendered-worker-e8c8bc1de69777325003e80bc0c04b82    True      False      False      3              3                   3                     0                      5h39m 
      2
      Copy to Clipboard Toggle word wrap

      1
      カスタムマシン設定プールにはノードがなくなりました。
      2
      UPDATING フィールドが True の場合、マシン設定プールは以前のマシン設定で更新されます。フィールドが False になると、ワーカーマシン設定プールが以前のマシン設定にロールアウトされます。
    • ノードをチェックして、ノードのスケジューリングが無効になっていることを確認します。これは、変更が適用されていることを示しています。

      $ 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.32.3
      ip-10-0-155-125.us-west-1.compute.internal   Ready,SchedulingDisabled   worker                 35m   v1.32.3
      ip-10-0-170-47.us-west-1.compute.internal    Ready                      control-plane,master   42m   v1.32.3
      ip-10-0-174-77.us-west-1.compute.internal    Ready                      control-plane,master   42m   v1.32.3
      ip-10-0-211-49.us-west-1.compute.internal    Ready                      control-plane,master   42m   v1.32.3
      ip-10-0-218-151.us-west-1.compute.internal   Ready                      worker                 31m   v1.32.3
      Copy to Clipboard Toggle word wrap

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

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

        $ oc debug node/ip-10-0-155-125.us-west-1.compute.internal
        Copy to Clipboard Toggle word wrap
      2. /host をデバッグシェル内のルートディレクトリーとして設定します。

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

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

        出力例

        State: idle
        Deployments:
        * ostree-unverified-registry:registry.build05.ci.openshift.org/ci-ln-qd0hmqk/stable@sha256:a8bd32573f787f6d1c23e1d669abbefd1e31339826d06e750c0ca632ad6c414f
                           Digest: sha256:a8bd32573f787f6d1c23e1d669abbefd1e31339826d06e750c0ca632ad6c414f
                          Version: 419.96.202501202201-0 (2025-01-20T22:06:13Z)
        Copy to Clipboard Toggle word wrap

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

カスタムレイヤーイメージがレジストリー内で過剰なスペースを占有しないようにするには、イメージを作成した 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