第5章 ノードにイメージを固定する
イメージレジストリーへの接続が遅く、信頼性が低いと、クラスターの更新やアプリケーションのデプロイなど、イメージのプルを必要とする操作が妨げられる可能性があります。これには、帯域幅が低いクラスター、信頼できるインターネット接続がないクラスター、または非接続環境にあるクラスターが含まれる場合があります。たとえば、クラスターの更新では 100 を超えるイメージのプルが必要になる場合があります。これらのイメージをプルできないと再試行が発生し、更新プロセスが妨げられ、更新が失敗する可能性があります。
これを防ぐ 1 つの方法は、実際に必要になる前に必要なイメージを事前にプルし、それらのイメージを特定のマシン設定プール (MCP) に 固定 することです。これにより、必要なときにノードでイメージが利用できるようになります。固定されたイメージは、より一貫性のある更新を提供できます。これは、メンテナンスウィンドウに更新をスケジュールするときに重要です。
固定されたイメージにより、アプリケーションのデプロイ時にイメージが確実に使用可能になるため、より信頼性の高いデプロイが可能になります。
イメージを固定する で説明されているように、PinnedImageSet カスタムリソース (CR) を使用して、イメージを特定のノードに固定できます。固定されたイメージは、ノード上の /etc/crio/crio.conf.d/50-pinned-images ファイルに保存されます。ファイルの内容は次の例のようになります。
[crio]
[crio.image]
pinned_images = ["quay.io/openshift-release-dev/ocp-release@sha256:4198606580b69c8335ad7ae531c3a74e51aee25db5faaf368234e8c8dae5cbea", "quay.io/openshift-release-dev/ocp-release@sha256:513cf1028aa1a021fa73d0601427a0fbcf6d212b88aaf9d76d4e4841a061e44e", "quay.io/openshift-release-dev/ocp-release@sha256:61eae2d261e54d1b8a0e05f6b5326228b00468364563745eed88460af04f909b"]
固定されたイメージのもう 1 つの利点は、イメージのガベージコレクションによって固定されたイメージが削除されないことです。
イメージをプルする前に、Machine Config Operator (MCO) は、影響を受ける各ノードに十分なストレージスペースがあることを確認します。ノードに十分なスペースがある場合、MCO は固定されたイメージファイルを作成し、イメージをプルして、CRI-O をリロードします。十分なスペースがない場合、MCO はイメージをプルせず、エラーメッセージを表示します。
5.1. イメージを固定する リンクのコピーリンクがクリップボードにコピーされました!
PinnedImageSet カスタムリソース (CR) を使用して、イメージをノードに固定できます。固定イメージセットは、事前にロードするイメージのリストと、イメージを固定するマシン設定プールを定義します。
イメージは、ノード上の /etc/crio/crio.conf.d/50-pinned-images ファイルに保存されます。
podman manifest inspect <IMAGE_URL> コマンドで正常に検査できるイメージのみが、固定されたイメージセットで使用できます。イメージ検査は、サポートされていないマニフェスト形式、レジストリー認可の問題、無効なスキーマ、ネットワーク接続の問題、またはその他の問題により失敗する可能性があります。
手順
次の例のように、
PinnedImageSetオブジェクトを定義する YAML ファイルを作成します。apiVersion: machineconfiguration.openshift.io/v1 kind: PinnedImageSet metadata: labels:1 machineconfiguration.openshift.io/role: worker name: worker-pinned-images spec: pinnedImages:2 - name: quay.io/openshift-release-dev/ocp-release@sha256:513cf1028aa1a021fa73d0601427a0fbcf6d212b88aaf9d76d4e4841a061e44e - name: quay.io/openshift-release-dev/ocp-release@sha256:61eae2d261e54d1b8a0e05f6b5326228b00468364563745eed88460af04f909bここでは、以下のようになります。
labels- オプションのノードセレクターを指定して、イメージを固定するマシン設定プールを指定します。指定しない場合は、イメージはクラスター内のすべてのノードに固定されます。
pinnedImages- 事前に読み込む 1 つ以上のイメージのリストを指定します。
次のコマンドを実行して、
PinnedImageSetオブジェクトを作成します。$ oc create -f <file_name>.yaml
検証
次のコマンドを実行して、影響を受けるマシン設定プールのマシン設定ノードオブジェクトに固定イメージセットが報告されていることを確認します。
$ oc describe machineconfignode <machine_config_node_name>コマンドの例
$ oc describe machineconfignode ci-ln-25hlkvt-72292-jrs48-worker-a-2bdjイメージのプルと固定が成功した場合の出力例
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigNode metadata: creationTimestamp: "2025-04-28T18:40:29Z" generation: 3 name: <machine_config_node_name> # ... status pinnedImageSets: - currentGeneration: 1 desiredGeneration: 1 name: worker-pinned-images1 - 1 1
PinnedImagesetオブジェクトは、マシン設定ノードに関連付けられています。次の例に示すように、
MachineConfigNodeオブジェクトのステータスフィールドに、失敗またはエラーメッセージが表示されます。イメージのプルと固定が失敗した場合の出力例
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigNode metadata: creationTimestamp: "2025-04-28T18:40:29Z" generation: 3 name: <machine_config_node_name> # ... - lastTransitionTime: "2025-04-29T19:37:23Z" message: One or more PinnedImageSet is experiencing an error. See PinnedImageSet list for more details. reason: PrefetchFailed status: "True" type: PinnedImageSetsDegraded configVersion: current: rendered-worker-cef1b52c532e19a20add12e369261fba desired: rendered-worker-cef1b52c532e19a20add12e369261fba observedGeneration: 3 pinnedImageSets: - desiredGeneration: 1 lastFailedGeneration: 1 lastFailedGenerationError: 'failed to execute podman manifest inspect for "quay.io/rh-ee/machine-config-operator@sha256:65d3a308767b1773b6e3499dde6ef085753d7e20e685f78841079": exit status 125' name: worker-pinned-images
固定されたイメージファイルが作成され、正しいイメージが含まれていることを確認します。
次のコマンドを実行して、ノードのデバッグセッションを開始します。
$ oc debug node/<node_name>次のコマンドを実行して、デバッグシェル内のルートディレクトリーとして
/hostを設定します。sh-5.1# chroot /host次のコマンドを実行して、固定されたイメージファイルの内容を確認します。
$ cat /etc/crio/crio.conf.d/50-pinned-images出力例
[crio] [crio.image] pinned_images = ["quay.io/openshift-release-dev/ocp-release@sha256:4198606580b69c8335ad7ae531c3a74e51aee25db5faaf368234e8c8dae5cbea", "quay.io/openshift-release-dev/ocp-release@sha256:513cf1028aa1a021fa73d0601427a0fbcf6d212b88aaf9d76d4e4841a061e44e", "quay.io/openshift-release-dev/ocp-release@sha256:61eae2d261e54d1b8a0e05f6b5326228b00468364563745eed88460af04f909b"]ここでは、以下のようになります。
pinnedImages- 影響を受けるマシン設定プールにプルされ、固定されたイメージを指定します。