5.6. ミラーレジストリーで Windows コンテナーを使用する
Windows Machine Config Operator (WMCO) は、ImageDigestMirrorSet (IDMS) または ImageTagMirrorSet (ITMS) オブジェクトを使用してクラスターを設定し、ミラーレジストリーからイメージをプルすることにより、パブリックレジストリーではなくレジストリーミラーからイメージをプルできます。
ミラーレジストリーには次の利点があります。
- パブリックレジストリーの停止を回避
- ノードと Pod の作成を高速化
- 組織のファイアウォールの背後からイメージを取得します
ミラーレジストリーは、切断されたネットワークまたはエアギャップネットワーク内の OpenShift Container Platform クラスターでも使用できます。切断されたネットワーク は、直接インターネットに接続できない制限されたネットワークです。クラスターはインターネットにアクセスできないため、外部のコンテナーイメージを参照することはできません。
ミラーレジストリーを使用するには、次の一般的な手順が必要です。
- Red Hat Quay などのツールを使用して、ミラーレジストリーを作成します。
- コンテナーイメージレジストリー認証情報ファイルを作成します。
- オンラインイメージリポジトリーからミラーレジストリーにイメージをコピーします。
これらの手順の詳細は、「切断されたインストールのミラーリングについて」を参照してください。
ミラーレジストリーを作成してイメージをミラーリングした後、ImageDigestMirrorSet (IDMS) または ImageTagMirrorSet (ITMS) オブジェクトを使用して、各 Pod 仕様を更新せずにミラーレジストリーからイメージをプルするようにクラスターを設定できます。IDMS および ITMS オブジェクトは、ソースイメージレジストリーのリポジトリーからイメージをプルする要求をリダイレクトし、代わりにミラーリポジトリーによって解決されるようにします。
IDMS または ITMS オブジェクトに変更が加えられた場合、WMCO は Windows ノード上の適切な hosts.toml ファイルを新しい情報で自動的に更新します。ミラー設定が変更になると、WMCO は各 Windows ノードを順番に更新することに注意してください。そのため、これらの更新に必要な時間は、クラスター内の Windows ノードの数に応じて増加します。
WMCO によって設定される Windows ノードは、containerd コンテナーランタイムに依存しています。そのため、WMCO は containerd の設定ファイルをレジストリーの設定で最新の状態に維持します。新しいノードの場合、これらのファイルは作成時にインスタンスにコピーされます。既存のノードの場合、レジストリーコントローラーが、ミラーレジストリーをアクティブ化した後、SSH を使用して各ノードにアクセスし、生成された設定ファイルをコピーして、既存のファイルを置き換えます。
マシンセットまたは Bring-Your-Own-Host (BYOH) Windows ノードでミラーレジストリーを使用できます。
IDMS または ITMS オブジェクトを使用して Windows ノード上のコンテナーイメージをミラーリングする場合は、次の動作が Linux ノードとは異なる点に注意してください。
Windows ノードでのミラーリングは、レジストリーレベルで機能します。Linux ノードのように、イメージレベルでは機能しません。そのため、IDMS または ITMS オブジェクトを使用してミラーリングされる Windows イメージには、特定の命名要件があります。
namespace の最後の部分とミラーイメージのイメージ名は、ミラーリングされるイメージと一致する必要があります。たとえば、
mcr.microsoft.com/oss/kubernetes/pause:3.9イメージをミラーリングする場合、ミラーは$mirrorRegistry/<organization>/oss/kubernetes/pause:3.9形式である必要があります。$orgは、任意の組織名または namespace にすることも、完全に除外することもできます。有効な値は、$mirrorRegistry/oss/kubernetes/pause:3.9、$mirrorRegistry/custom/oss/kubernetes/pause:3.9、$mirrorRegistry/x/y/z/oss/kubernetes/pause:3.9などです。Windows ノードは、ITMS オブジェクトを取得し、それを使用してレジストリー全体のミラーを設定します。次の例では、
quay.io/remote-org/imageをquay.io/my-org/imageにミラーリングするように設定します。その結果、Windows ノードはそのミラーをquay.io/remote-orgのすべてのイメージに使用するようになります。そのため、quay.io/remote-org/image:tagは期待どおりquay.io/my-org/image:tagイメージを使用しますが、quay.io/remote-org/different-image:tagを使用する別のコンテナーもquay.io/remote-org/different-image:tagミラーを使用しようとします。これを考慮しないと、意図しない動作が発生する可能性があります。このため、コンテナーイメージを指定するには、ITMS オブジェクトではなく、IDMS オブジェクトによるダイジェストを使用してください。ダイジェストを使用すると、コンテナーが指定するイメージとプルされるイメージのダイジェストが同じになるため、間違ったコンテナーイメージが使用されるのを防止できます。
5.6.1. イメージレジストリーリポジトリーのミラーリングについて リンクのコピーリンクがクリップボードにコピーされました!
コンテナーレジストリーのリポジトリーのミラーリングを設定すると、次のタスクを実行できます。
- ソースイメージのレジストリーのリポジトリーからイメージをプルする要求をリダイレクトするように OpenShift Container Platform クラスターを設定し、これをミラーリングされたイメージレジストリーのリポジトリーで解決できるようにします。
- 各ターゲットリポジトリーに対して複数のミラーリングされたリポジトリーを特定し、1 つのミラーがダウンした場合に別のミラーを使用できるようにします。
OpenShift Container Platform のリポジトリーミラーリングには、以下の属性が含まれます。
- イメージプルには、レジストリーのダウンタイムに対する回復性があります。
-
切断された環境のクラスターは、
quay.ioなどの重要な場所からイメージをプルし、会社のファイアウォールの背後にあるレジストリーに要求されたイメージを提供することができます。 - イメージのプル要求時にレジストリーへの接続が特定の順序で試行され、通常は永続レジストリーが最後に試行される。
-
入力したミラー情報は、OpenShift Container Platform クラスター内のすべての Windows ノード上の適切な
hosts.tomlcontainerd 設定ファイルに追加されます。 - ノードがソースリポジトリーからイメージの要求を行うと、要求されたコンテンツを見つけるまで、ミラーリングされた各リポジトリーに対する接続を順番に試行する。すべてのミラーで障害が発生した場合、クラスターはソースリポジトリーに対して試行する。成功すると、イメージはノードにプルされる。
次の方法でリポジトリーミラーリングを設定できます。
OpenShift Container Platform のインストール時:
OpenShift Container Platform に必要なコンテナーイメージをプルし、それらのイメージを会社のファイアウォールの背後に配置することで、非接続環境にあるデータセンターに OpenShift Container Platform をインストールできます。
OpenShift Container Platform の新規インストール後:
OpenShift Container Platform のインストール中にミラーリングを設定しなかった場合は、以下のカスタムリソース (CR) オブジェクトのいずれかを使用して、インストール後に設定できます。
-
ImageDigestMirrorSet(IDMS)。このオブジェクトを使用すると、ダイジェスト仕様を使用して、ミラーリングされたレジストリーからイメージを取得できます。IDMS CR を使用すると、イメージのプルが失敗した場合に、ソースレジストリーからのプルの継続的な試行を許可または停止するフォールバックポリシーを設定できます。 -
ImageTagMirrorSet(ITMS)。このオブジェクトを使用すると、イメージタグを使用して、ミラーリングされたレジストリーからイメージをプルできます。ITMS CR を使用すると、イメージのプルが失敗した場合に、ソースレジストリーからのプルの継続的な試行を許可または停止するフォールバックポリシーを設定できます。
-
これらのカスタムリソースオブジェクトはそれぞれ、次の情報を識別します。
- ミラーリングするコンテナーイメージリポジトリーのソース
- コンテンツを提供する各ミラーリポジトリーの個別のエントリー
次のアクションと、それがノードの drain 動作にどのように影響するかに注意してください。
- IDMS または ICSP CR オブジェクトを作成すると、MCO はノードの drain またはリブートを実行しません。
- ITMS CR オブジェクトを作成すると、MCO はノードの drain とリブートを実行します。
- ITMS または IDMS CR オブジェクトを削除すると、MCO はノードをドレインして再起動します。
- ITMS または IDMS CR オブジェクトを変更すると、MCO はノードをドレインして再起動します。
Windows Machine Config Operator (WMCO) は、IDMS および ITMS リソースへの変更を監視し、それらの変更を含む hosts.toml containerd 設定ファイルのセットをソースレジストリーごとに 1 つずつ生成します。次に、WMCO は既存の Windows ノードを更新して、新しいレジストリー設定を使用します。
ミラー化されたレジストリーを使用して Windows ノードを追加する前に、IDMS および ITMS オブジェクトを作成する必要があります。
5.6.2. イメージレジストリーのリポジトリーミラーリングの設定 リンクのコピーリンクがクリップボードにコピーされました!
インストール後のミラー設定カスタムリソース (CR) を作成して、ソースイメージレジストリーからミラーリングされたイメージレジストリーにイメージプル要求をリダイレクトできます。
ImageDigestMirrorSet および ImageTagMirrorSet オブジェクトを通じてミラーリングされた Windows イメージには、特定の命名要件があります。これは「ミラーレジストリーで Windows コンテナーを使用する」で説明されています。
前提条件
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。
手順
ミラーリングされたリポジトリーを設定します。以下のいずれかを実行します。
Red Hat Quay でミラーリングされたリポジトリーのセットアップRed Hat Quay を使用して、あるリポジトリーから別のリポジトリーにイメージをコピーでき、それらのリポジトリーを時間の経過とともに繰り返し同期することもできます。
skopeoなどのツールを使用して、ソースリポジトリーからミラーリングされたリポジトリーにイメージを手動でコピーします。たとえば、{op-system-base-full システム} に skopeo RPM パッケージをインストールした後、以下の例に示すように
skopeoコマンドを使用します。$ skopeo copy --all \ docker://registry.access.redhat.com/ubi9/ubi-minimal:latest@sha256:5cf... \ docker://example.io/example/ubi-minimalこの例では、
example.ioという名前のコンテナーイメージレジストリーと、exampleという名前のイメージリポジトリーがあります。ubi9/ubi-minimalイメージをregistry.access.redhat.comからexample.ioにコピーします。ミラーリングされたレジストリーを作成した後、OpenShift Container Platform クラスターを設定して、ソースリポジトリーに送信された要求をミラーリングされたリポジトリーにリダイレクトできます。
重要mcr.microsoft.com/oss/kubernetes/pause:3.9イメージをミラーリングする必要があります。たとえば、次のskopeoコマンドを使用してイメージをミラーリングできます。$ skopeo copy \ docker://mcr.microsoft.com/oss/kubernetes/pause:3.9\ docker://example.io/oss/kubernetes/pause:3.9- OpenShift Container Platform クラスターにログインします。
必要に応じて
ImageDigestMirrorSetまたはImageTagMirrorSetCR を作成し、ソースとミラーを独自のレジストリーとリポジトリーのペアとイメージに置き換えます。apiVersion: config.openshift.io/v1 kind: ImageDigestMirrorSet metadata: name: ubi9repo spec: imageDigestMirrors: - mirrors: - example.io/example/ubi-minimal - example.com/example2/ubi-minimal source: registry.access.redhat.com/ubi9/ubi-minimal mirrorSourcePolicy: AllowContactingSource - mirrors: - mirror.example.com source: registry.redhat.io mirrorSourcePolicy: NeverContactSource - mirrors: - docker.io source: docker-mirror.internal mirrorSourcePolicy: AllowContactingSource次のコマンドを実行して、新しいオブジェクトを作成します。
$ oc create -f registryrepomirror.yamlミラーリングされた設定が適用されていることを確認するには、ノードのいずれかで以下を実行します。
ノードの一覧を表示します。
$ oc get node出力例
NAME STATUS ROLES AGE VERSION ip-10-0-137-44.ec2.internal Ready worker 7m v1.32.3 ip-10-0-138-148.ec2.internal Ready master 11m v1.32.3 ip-10-0-139-122.ec2.internal Ready master 11m v1.32.3 ip-10-0-147-35.ec2.internal Ready worker 7m v1.32.3 ip-10-0-153-12.ec2.internal Ready worker 7m v1.32.3 ip-10-0-154-10.ec2.internal Ready master 11m v1.32.3デバッグプロセスを開始し、ノードにアクセスします。
$ oc debug node/ip-10-0-147-35.ec2.internal出力例
Starting pod/ip-10-0-147-35ec2internal-debug ... To use host binaries, run `chroot /host`ルートディレクトリーを
/hostに変更します。sh-4.2# chroot /hostWMCO が各 Windows インスタンスの各レジストリーに対して
hosts.tomlファイルを生成したことを確認します。前述の IDMS オブジェクトの例の場合は、次のファイル構造に 3 つのファイルが存在するはずです。$ tree $config_path出力例
C:/k/containerd/registries/ |── registry.access.redhat.com | └── hosts.toml |── mirror.example.com | └── hosts.toml └── docker.io └── hosts.toml:次の出力は、前の例の IDMS オブジェクトが適用された
hosts.tomlcontainerd 設定ファイルを表しています。host.toml ファイルの例
$ cat "$config_path"/registry.access.redhat.com/host.toml server = "https://registry.access.redhat.com" # default fallback server since "AllowContactingSource" mirrorSourcePolicy is set [host."https://example.io/example/ubi-minimal"] capabilities = ["pull"] [host."https://example.com/example2/ubi-minimal"] # secondary mirror capabilities = ["pull"] $ cat "$config_path"/registry.redhat.io/host.toml # "server" omitted since "NeverContactSource" mirrorSourcePolicy is set [host."https://mirror.example.com"] capabilities = ["pull"] $ cat "$config_path"/docker.io/host.toml server = "https://docker.io" [host."https://docker-mirror.internal"] capabilities = ["pull", "resolve"] # resolve tagsソースからノードにイメージをプルし、ミラーによって解決されるかどうかを確認します。
sh-4.2# podman pull --log-level=debug registry.access.redhat.com/ubi9/ubi-minimal@sha256:5cf...
トラブルシューティング
リポジトリーのミラーリング手順が説明どおりに機能しない場合は、リポジトリーミラーリングの仕組みに関する以下の情報を使用して、問題のトラブルシューティングを行うことができます。
- 最初に機能するミラーは、プルされるイメージを指定するために使用されます。
- メインレジストリーは、他のミラーが機能していない場合にのみ使用されます。
-
システムコンテキストによって、
Insecureフラグがフォールバックとして使用されます。