14.4. OpenShift Update Service を使用しない非接続環境でのクラスターの更新
以下の手順を使用して、OpenShift Update Service にアクセスせずに非接続環境でクラスターを更新します。
14.4.1. 前提条件
-
oc
コマンドツールインターフェイス (CLI) ツールがインストールされている。 - OpenShift Container Platform イメージリポジトリーのミラーリング で説明されているように、更新用のコンテナーイメージを使用してローカルのコンテナーイメージレジストリーをプロビジョニングしている。
-
admin
権限を持つユーザーとしてクラスターにアクセスできる。RBAC の使用によるパーミッションの定義および適用 を参照してください。 - 更新が失敗し、クラスターを以前の状態に復元する 必要がある場合に備えて、最新の etcd バックアップ を用意している。
- すべてのマシン設定プール (MCP) が実行中であり、一時停止していないことを確認する。一時停止した MCP に関連付けられたノードは、更新プロセス中にスキップされます。カナリアロールアウト更新ストラテジーを実行している場合は、MCP を一時停止できる。
- クラスターが手動で維持された認証情報を使用している場合は、新しいリリース用にクラウドプロバイダーリソースを更新します。これがクラスターの要件かどうかを判断する方法などの詳細は、手動で維持された認証情報でクラスターを更新する準備 を参照してください。
-
Operator を実行している場合、または Pod 中断バジェットを使用してアプリケーションを設定している場合、アップグレードプロセス中に中断が発生する可能性があります。
PodDisruptionBudget で minAvailable
が 1 に設定されている場合、削除
プロセスをブロックする可能性がある保留中のマシン設定を適用するためにノードがドレインされます。複数のノードが再起動された場合に、すべての Pod が 1 つのノードでのみ実行される可能性があり、PodDisruptionBudget
フィールドはノードのドレインを防ぐことができます。
Operator を実行している場合、または Pod 中断バジェットを使用してアプリケーションを設定している場合、アップグレードプロセス中に中断が発生する可能性があります。PodDisruptionBudget で minAvailable
が 1 に設定されている場合、削除
プロセスをブロックする可能性がある保留中のマシン設定を適用するためにノードがドレインされます。複数のノードが再起動された場合に、すべての Pod が 1 つのノードでのみ実行される可能性があり、PodDisruptionBudget
フィールドはノードのドレインを防ぐことができます。
14.4.2. MachineHealthCheck リソースの一時停止
アップグレードプロセスで、クラスター内のノードが一時的に利用できなくなる可能性があります。ワーカーノードの場合、マシンのヘルスチェックにより、このようなノードは正常ではないと識別され、それらが再起動される場合があります。このようなノードの再起動を回避するには、クラスターを更新する前にすべての MachineHealthCheck
リソースを一時停止します。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。
手順
一時停止する利用可能なすべての
MachineHealthCheck
リソースをリスト表示するには、以下のコマンドを実行します。$ oc get machinehealthcheck -n openshift-machine-api
マシンヘルスチェックを一時停止するには、
cluster.x-k8s.io/paused=""
アノテーションをMachineHealthCheck
リソースに追加します。以下のコマンドを実行します。$ oc -n openshift-machine-api annotate mhc <mhc-name> cluster.x-k8s.io/paused=""
アノテーション付きの
MachineHealthCheck
リソースは以下の YAML ファイルのようになります。apiVersion: machine.openshift.io/v1beta1 kind: MachineHealthCheck metadata: name: example namespace: openshift-machine-api annotations: cluster.x-k8s.io/paused: "" spec: selector: matchLabels: role: worker unhealthyConditions: - type: "Ready" status: "Unknown" timeout: "300s" - type: "Ready" status: "False" timeout: "300s" maxUnhealthy: "40%" status: currentHealthy: 5 expectedMachines: 5
重要クラスターの更新後にマシンヘルスチェックを再開します。チェックを再開するには、以下のコマンドを実行して
MachineHealthCheck
リソースから pause アノテーションを削除します。$ oc -n openshift-machine-api annotate mhc <mhc-name> cluster.x-k8s.io/paused-
14.4.3. リリースイメージダイジェストの取得
--to-image
オプションを指定して oc adm upgrade
コマンドを使用することで非接続環境でクラスターを更新する場合、ターゲットリリースイメージに対応する sha256 ダイジェストを参照する必要があります。
手順
インターネットに接続されているデバイスで、以下のコマンドを実行します。
$ oc adm release info -o 'jsonpath={.digest}{"\n"}' quay.io/openshift-release-dev/ocp-release:${OCP_RELEASE_VERSION}-${ARCHITECTURE}
{OCP_RELEASE_VERSION}
では、更新する OpenShift Container Platform のバージョン (例:4.10.16
) を指定します。{ARCHITECTURE}
では、クラスターアーキテクチャー (例:x86_64
、aarch64
、s390x
、ppc64le
) を指定します。出力例
sha256:a8bfba3b6dddd1a2fbbead7dac65fe4fb8335089e4e7cae327f3bad334add31d
- クラスターの更新時に使用する sha256 ダイジェストをコピーします。
14.4.4. 切断されたクラスターの更新
切断されたクラスターを、リリースイメージをダウンロードした OpenShift Container Platform バージョンに更新します。
ローカルの OpenShift Update Service がある場合は、この手順ではなく、接続された Web コンソールまたは CLI の手順を使用して更新できます。
前提条件
- 新規リリースのイメージをレジストリーに対してミラーリングしている。
新規リリースのリリースイメージ署名 ConfigMap をクラスターに適用している。
注記リリースイメージ署名 config map を使用すると、Cluster Version Operator (CVO) は、実際のイメージ署名が想定された署名と一致するか検証し、リリースイメージの整合性を確保できます。
- ターゲットリリースイメージの sha256 ダイジェストを取得している。
-
OpenShift CLI (
oc
) がインストールされている。 -
すべての
MachineHealthCheck
リソースを一時停止している。
手順
クラスターを更新します。
$ oc adm upgrade --allow-explicit-upgrade --to-image <defined_registry>/<defined_repository>@<digest>
ここでは、以下のようになります。
<defined_registry>
- イメージのミラーリング先であるミラーレジストリーの名前を指定します。
<defined_repository>
- ミラーレジストリーで使用するイメージリポジトリーの名前を指定します。
<digest>
-
ターゲットリリースイメージの sha256 ダイジェストを指定します (例:
sha256:81154f5c03294534e1eaf0319bef7a601134f891689ccede5d705ef659aa8c92
)。
注記- ミラーレジストリーとリポジトリー名の定義を確認するには、「OpenShift Container Platform イメージのミラーリング」を参照してください。
-
ImageContentSourcePolicy
またはImageDigestMirrorSet
を使用した場合は、定義した名前の代わりに標準的なレジストリー名とリポジトリー名を使用できます。標準的なレジストリー名はquay.io
、標準的なリポジトリー名はopenshift-release-dev/ocp-release
です。 -
ImageContentSourcePolicy
オブジェクトを持つクラスターのグローバルプルシークレットのみを設定できます。プロジェクトにプルシークレットを追加することはできません。
14.4.5. イメージレジストリーリポジトリーのミラーリングについて
コンテナーレジストリーリポジトリーのミラーリングを設定すると、次のタスクを実行できます。
- ソースイメージのレジストリーのリポジトリーからイメージをプルする要求をリダイレクトするように OpenShift Container Platform クラスターを設定し、これをミラーリングされたイメージレジストリーのリポジトリーで解決できるようにします。
- 各ターゲットリポジトリーに対して複数のミラーリングされたリポジトリーを特定し、1 つのミラーがダウンした場合に別のミラーを使用できるようにします。
OpenShift Container Platform のリポジトリーミラーリングには、以下の属性が含まれます。
- イメージプルには、レジストリーのダウンタイムに対する回復性があります。
- 非接続環境のクラスターは、quay.io などの重要な場所からイメージをプルし、会社のファイアウォールの背後にあるレジストリーに要求されたイメージを提供することができます。
- イメージのプル要求時にレジストリーへの接続が特定の順序で試行され、通常は永続レジストリーが最後に試行されます。
-
入力したミラー情報は、OpenShift Container Platform クラスターの全ノードの
/etc/containers/registries.conf
ファイルに追加されます。 - ノードがソースリポジトリーからイメージの要求を行うと、要求されたコンテンツを見つけるまで、ミラーリングされた各リポジトリーに対する接続を順番に試行します。すべてのミラーで障害が発生した場合、クラスターはソースリポジトリーに対して試行します。成功すると、イメージはノードにプルされます。
リポジトリーミラーリングのセットアップは次の方法で実行できます。
OpenShift Container Platform のインストール時:
OpenShift Container Platform に必要なコンテナーイメージをプルし、それらのイメージを会社のファイアウォールの背後に配置することで、非接続環境にあるデータセンターに OpenShift Container Platform をインストールできます。
OpenShift Container Platform の新規インストール後:
OpenShift Container Platform のインストール中にミラーリングを設定しなかった場合は、以下のカスタムリソース (CR) オブジェクトのいずれかを使用して、インストール後に設定できます。
-
ImageDigestMirrorSet
(IDMS)。このオブジェクトを使用すると、ダイジェスト仕様を使用して、ミラーリングされたレジストリーからイメージを取得できます。IDMS CR を使用すると、イメージのプルが失敗した場合に、ソースレジストリーからのプルの継続的な試行を許可または停止するフォールバックポリシーを設定できます。 -
ImageTagMirrorSet
(ITMS)。このオブジェクトを使用すると、イメージタグを使用して、ミラーリングされたレジストリーからイメージをプルできます。ITMS CR を使用すると、イメージのプルが失敗した場合に、ソースレジストリーからのプルの継続的な試行を許可または停止するフォールバックポリシーを設定できます。 -
ImageContentSourcePolicy
(ICSP)。このオブジェクトを使用すると、ダイジェスト仕様を使用して、ミラーリングされたレジストリーからイメージを取得できます。ミラーが機能しない場合、ICSP CR は必ずソースレジストリーにフォールバックします。
重要ImageContentSourcePolicy
(ICSP) オブジェクトを使用してリポジトリーミラーリングを設定することは、非推奨の機能です。非推奨の機能は依然として OpenShift Container Platform に含まれており、引き続きサポートされますが、本製品の今後のリリースで削除されるため、新規デプロイメントでの使用は推奨されません。ImageContentSourcePolicy
オブジェクトの作成に使用した既存の YAML ファイルがある場合は、oc adm migrate icsp
コマンドを使用して、それらのファイルをImageDigestMirrorSet
YAML ファイルに変換できます。詳細は、次のセクションの「イメージレジストリーリポジトリーミラーリング用の ImageContentSourcePolicy (ICSP) ファイルの変換」を参照してください。-
これらのカスタムリソースオブジェクトはそれぞれ、次の情報を識別します。
- ミラーリングするコンテナーイメージリポジトリーのソース
- ソースリポジトリーから要求されたコンテンツを提供する各ミラーリポジトリーの個別のエントリー。
新しいクラスターの場合は、必要に応じて IDMS、ITMS、および ICSP CR オブジェクトを使用できます。ただし、IDMS と ITMS の使用を推奨します。
クラスターをアップグレードした場合、既存の ICSP オブジェクトは安定を維持し、IDMS オブジェクトと ICSP オブジェクトの両方がサポートされるようになります。ICSP オブジェクトを使用するワークロードは、引き続き期待どおりに機能します。一方、IDMS CR で導入されたフォールバックポリシーを利用する場合は、oc adm migrate icsp
コマンドを使用して、現在のワークロードを IDMS オブジェクトに移行できます。これについては、後述の イメージレジストリーリポジトリーミラーリング用の ImageContentSourcePolicy (ICSP) ファイルの変換 セクションで説明しています。IDMS オブジェクトへの移行に、クラスターの再起動は必要ありません。
クラスターで ImageDigestMirrorSet
、ImageTagMirrorSet
、または ImageContentSourcePolicy
オブジェクトを使用してリポジトリーミラーリングを設定する場合、ミラーリングされたレジストリーにはグローバルプルシークレットのみを使用できます。プロジェクトにプルシークレットを追加することはできません。
14.4.5.1. イメージレジストリーリポジトリーミラーリング用の ImageContentSourcePolicy (ICSP) ファイルの変換
ImageContentSourcePolicy
(ICSP) オブジェクトを使用してリポジトリーミラーリングを設定することは、非推奨の機能です。この機能は引き続き OpenShift Container Platform に含まれており、引き続きサポートされます。ただし、この製品の将来のリリースでは削除される予定であり、新しいデプロイメントには推奨されません。
ICSP オブジェクトは、リポジトリーミラーリングを設定するために ImageDigestMirrorSet
および ImageTagMirrorSet
オブジェクトに置き換えられています。ImageContentSourcePolicy
オブジェクトの作成に使用した既存の YAML ファイルがある場合は、oc adm migrate icsp
コマンドを使用して、それらのファイルを ImageDigestMirrorSet
YAML ファイルに変換できます。このコマンドは、API を現在のバージョンに更新し、kind
値を ImageDigestMirrorSet
に変更し、spec.repositoryDigestMirrors
を spec.imageDigestMirrors
に変更します。ファイルの残りの部分は変更されません。
移行によって registries.conf
ファイルは変更されないため、クラスターを再起動する必要はありません。
ImageDigestMirrorSet
または ImageTagMirrorSet
オブジェクトの詳細は、前のセクションの「イメージレジストリーリポジトリーミラーリングの設定」を参照してください。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
クラスターに
ImageContentSourcePolicy
オブジェクトがあることを確認します。
手順
次のコマンドを使用して、1 つ以上の
ImageContentSourcePolicy
YAML ファイルをImageDigestMirrorSet
YAML ファイルに変換します。$ oc adm migrate icsp <file_name>.yaml <file_name>.yaml <file_name>.yaml --dest-dir <path_to_the_directory>
ここでは、以下のようになります。
<file_name>
-
ソース
ImageContentSourcePolicy
YAML の名前を指定します。複数のファイル名をリストできます。 --dest-dir
-
オプション: 出力
ImageDigestMirrorSet
YAML のディレクトリーを指定します。設定されていない場合、ファイルは現在のディレクトリーに書き込まれます。
たとえば、次のコマンドは
icsp.yaml
およびicsp-2.yaml
ファイルを変換し、新しい YAML ファイルをidms-files
ディレクトリーに保存します。$ oc adm migrate icsp icsp.yaml icsp-2.yaml --dest-dir idms-files
出力例
wrote ImageDigestMirrorSet to idms-files/imagedigestmirrorset_ubi8repo.5911620242173376087.yaml wrote ImageDigestMirrorSet to idms-files/imagedigestmirrorset_ubi9repo.6456931852378115011.yaml
次のコマンドを実行して CR オブジェクトを作成します。
$ oc create -f <path_to_the_directory>/<file-name>.yaml
ここでは、以下のようになります。
<path_to_the_directory>
-
--dest-dir
フラグを使用した場合は、ディレクトリーへのパスを指定します。 <file_name>
-
ImageDigestMirrorSet
YAML の名前を指定します。
- IDMS オブジェクトがロールアウトされた後、ICSP オブジェクトを削除します。
14.4.6. クラスターノードの再起動の頻度を減らすために、ミラーイメージカタログの範囲を拡大
リポジトリーレベルまたはより幅広いレジストリーレベルでミラーリングされたイメージカタログのスコープを設定できます。幅広いスコープの ImageContentSourcePolicy
リソースにより、リソースの変更に対応するためにノードが再起動する必要のある回数が減ります。
ImageContentSourcePolicy
リソースのミラーイメージカタログの範囲を拡大するには、以下の手順を実行します。
前提条件
-
OpenShift Container Platform CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。 - 非接続クラスターで使用するようにミラーリングされたイメージカタログを設定する。
手順
<local_registry>
,<pull_spec>
, and<pull_secret_file>
の値を指定して、以下のコマンドを実行します。$ oc adm catalog mirror <local_registry>/<pull_spec> <local_registry> -a <pull_secret_file> --icsp-scope=registry
ここでは、以下のようになります。
- <local_registry>
-
非接続クラスター (例:
local.registry:5000
) 用に設定したローカルレジストリーです。 - <pull_spec>
-
非接続レジストリーで設定されるプル仕様です (例:
redhat/redhat-operator-index:v4.13
)。 - <pull_secret_file>
-
.json
ファイル形式のregistry.redhat.io
プルシークレットです。プルシークレットは、Red Hat Open Shift Cluster Manager から ダウンロードできます。
oc adm catalog mirror
コマンドは、/redhat-operator-index-manifests
ディレクトリーを作成し、imageContentSourcePolicy.yaml
、catalogSource.yaml
、およびmapping.txt
ファイルを生成します。新しい
ImageContentSourcePolicy
リソースをクラスターに適用します。$ oc apply -f imageContentSourcePolicy.yaml
検証
oc apply
がImageContentSourcePolicy
に変更を正常に適用していることを確認します。$ oc get ImageContentSourcePolicy -o yaml
出力例
apiVersion: v1 items: - apiVersion: operator.openshift.io/v1alpha1 kind: ImageContentSourcePolicy metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"operator.openshift.io/v1alpha1","kind":"ImageContentSourcePolicy","metadata":{"annotations":{},"name":"redhat-operator-index"},"spec":{"repositoryDigestMirrors":[{"mirrors":["local.registry:5000"],"source":"registry.redhat.io"}]}} ...
ImageContentSourcePolicy
リソースを更新した後に、OpenShift Container Platform は新しい設定を各ノードにデプロイし、クラスターはソースリポジトリーへの要求のためにミラーリングされたリポジトリーの使用を開始します。