9.3. OpenShift Update Service を使用した非接続環境でのクラスターの更新
9.3.1. OpenShift Update Service について
OpenShift Update Service (OSUS) は、Red Hat Enterprise Linux CoreOS (RHCOS) を含む OpenShift Container Platform の更新を提供します。コンポーネント Operator のグラフ、または 頂点 とそれらを結ぶ 辺 を含む図表が提示されます。グラフのエッジでは、安全に更新できるバージョンが表示されます。頂点は、マネージドクラスターコンポーネントの意図された状態を指定する更新ペイロードです。
クラスター内の Cluster Version Operator (CVO) は、OpenShift Update Service をチェックして、グラフの現在のコンポーネントバージョンとグラフの情報に基づき、有効な更新および更新パスを確認します。ユーザーが更新をリクエストすると、CVO はその更新のリリースイメージを使ってクラスターを更新します。リリースアーティファクトは、コンテナーイメージとして Quay でホストされます。
OpenShift Update Service が互換性のある更新のみを提供できるようにするために、リリース検証 Pipeline で自動化を支援します。それぞれのリリースアーティファクトについて、他のコンポーネントパッケージだけでなくサポートされているクラウドプラットフォームおよびシステムアーキテクチャーとの互換性の有無が検証されます。Pipeline がリリースの適合性を確認した後に、OpenShift Update Service は更新が利用可能であることを通知します。
OpenShift Update Service は、現在のクラスターに推奨される更新をすべて表示します。OpenShift Update Service が推奨するアップグレードパスがない場合には、更新またはターゲットリリースに関連する既知の問題がある可能性があります。
連続更新モード中は、2 つのコントローラーが実行されます。1 つのコントローラーはペイロードマニフェストを絶えず更新し、そのマニフェストをクラスターに適用し、Operator が利用可能か、アップグレード中か、または失敗しているかに応じて Operator の制御されたロールアウトのステータスを出力します。2 つ目のコントローラーは OpenShift Update Service をポーリングして、更新が利用可能かどうかを判別します。
サポートされているのは、新規バージョンへのアップグレードのみです。クラスターを以前のバージョンに戻すまたはロールバックすることはサポートされていません。更新が失敗した場合は、Red Hat サポートに連絡してください。
更新プロセスで、Machine Config Operator (MCO) は新規設定をクラスターマシンに適用します。MCO は、マシン設定プールの maxUnavailable
フィールドによって指定されるノードの数を分離し、それらを利用不可としてマークします。デフォルトで、この値は 1
に設定されます。次に、MCO は新しい設定を適用して、マシンを再起動します。
Red Hat Enterprise Linux (RHEL) マシンをワーカーとして使用する場合、まず OpenShift API をそれらのマシンで更新する必要があるため、MCO は kubelet を更新しません。
新規バージョンの仕様は古い kubelet に適用されるため、RHEL マシンを Ready
状態に戻すことができません。マシンが利用可能になるまで更新を完了することはできません。ただし、利用不可のノードの最大数は、その数のマシンがサービス停止状態のマシンとして分離されても通常のクラスター操作が継続できるようにするために設定されます。
OpenShift Update Service は Operator および 1 つ以上のアプリケーションインスタンスで設定されます。
更新プロセスで、クラスター内のノードが一時的に利用できなくなる可能性があります。MachineHealthCheck
は正常でないノードを特定し、再起動する可能性があります。このようなノードを再起動するのを回避するには、クラスターを更新する前にデプロイした MachineHealthCheck
リソースを削除します。ただし、デフォルトでデプロイされる MachineHealthCheck リソース (machine-api-termination-handler
など) は削除できず、再作成されます。
関連情報
インターネットにアクセスできるクラスターの場合、Red Hat は、パブリック API の背後にあるホストされたサービスとして、OpenShift Container Platform 更新サービスを介して更新の推奨事項を提供します。ただし、切断された環境のクラスターには、更新情報のためにパブリック API にアクセスする方法がありません。
切断された環境で同様の更新エクスペリエンスを提供するために、OpenShift Update Service をローカルにインストールおよび設定して、切断された環境内で使用できるようにすることができます。
次のセクションでは、切断されたクラスターとその基盤となるオペレーティングシステムに更新プログラムを提供する方法について説明します。
9.3.2. 前提条件
-
oc
コマンドツールインターフェイス (CLI) ツールがインストールされていること。 - OpenShift Container Platform イメージリポジトリーのミラーリング で説明されているように、更新用のコンテナーイメージを使用してローカルのコンテナーイメージレジストリーをプロビジョニングしている。
9.3.3. OpenShift Update Service 向けの セキュリティー保護されたレジストリーへのアクセス設定
リリースイメージが、HTTPS X.509 証明書がカスタム認証局によって署名されているレジストリーに含まれている場合は イメージレジストリーアクセスのトラストストアの追加設定 の手順と、更新サービスに以下の変更を加えます。
OpenShift Update Service Operator では、設定マップのキー名 updateservice-registry
がレジストリー CA 証明書に必要です。
更新サービス向けのイメージレジストリー CA の設定マップの例
apiVersion: v1 kind: ConfigMap metadata: name: my-registry-ca data: updateservice-registry: | 1 -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- registry-with-port.example.com..5000: | 2 -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
9.3.4. グローバルクラスターのプルシークレットの更新
現在のプルシークレットを置き換えるか、新しいプルシークレットを追加することで、クラスターのグローバルプルシークレットを更新できます。
ユーザーがインストール中に使用したレジストリーとは別のレジストリーを使用してイメージを保存する場合は、この手順が必要です。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
オプション: 既存のプルシークレットに新しいプルシークレットを追加するには、以下の手順を実行します。
以下のコマンドを入力してプルシークレットをダウンロードします。
$ oc get secret/pull-secret -n openshift-config --template='{{index .data ".dockerconfigjson" | base64decode}}' ><pull_secret_location> 1
- 1
- プルシークレットファイルへのパスを指定します。
以下のコマンドを実行して、新しいプルシークレットを追加します。
$ oc registry login --registry="<registry>" \ 1 --auth-basic="<username>:<password>" \ 2 --to=<pull_secret_location> 3
または、プルシークレットファイルを手動で更新することもできます。
以下のコマンドを実行して、クラスターのグローバルプルシークレットを更新します。
$ oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=<pull_secret_location> 1
- 1
- 新規プルシークレットファイルへのパスを指定します。
この更新はすべてのノードにロールアウトされます。これには、クラスターのサイズに応じて多少時間がかかる場合があります。
注記OpenShift Container Platform 4.7.4 の時点で、グローバルプルシークレットへの変更によってノードドレインまたは再起動がトリガーされなくなりました。
9.3.5. OpenShift Update Service のインストール
OpenShift Update Service をインストールするには、まず OpenShift Container Platform Web コンソールまたは CLI を使用して OpenShift Update Service Operator をインストールする必要があります。
切断された環境 (非接続クラスターとして知られる) にインストールされているクラスターの場合には、デフォルトで Operator Lifecycle Manager はリモートレジストリーでホストされる Red Hat が提供する OperatorHub ソースにアクセスできません。それらのリモートソースには完全なインターネット接続が必要であるためです。詳細は、ネットワークが制限された環境での Operator Lifecycle Manager の使用 を参照してください。
9.3.5.1. Web コンソールを使用した OpenShift Update Service Operator のインストール
Web コンソールを使用して、OpenShift Update Service Operator をインストールできます。
手順
Web コンソールで Operators
OperatorHub をクリックします。 注記Update Service
と Filter by keyword… フィールドに入力し、素早く Operator を見つけます。利用可能な Operator の一覧から OpenShift Update Service を選択し、Install をクリックします。
-
本リリースで利用可能な唯一のチャネルであるため、チャネル
v1
が Update Channel として選択されます。 - A specific namespace on the cluster が Installation Mode で選択します。
-
Installed Namespace の namespace を選択するか、推奨される namespace
openshift-update-service
を受け入れます。 Approval Strategy を選択します。
- Automatic ストラテジーにより、Operator Lifecycle Manager (OLM) は新規バージョンが利用可能になると Operator を自動的に更新できます。
- Manual ストラテジーには、クラスター管理者が Operator の更新を承認する必要があります。
- Install をクリックします。
-
本リリースで利用可能な唯一のチャネルであるため、チャネル
-
Operators
Installed Operators ページに切り替えて、OpenShift Update Service Operator がインストールされていることを確認します。 - Status が Succeeded の OpenShift Update Service が選択された namespace に一覧表示されていることを確認します。
9.3.5.2. CLI を使用した OpenShift Update Service Operator のインストール
OpenShift CLI (oc
) を使用して、OpenShift Update Service Operator をインストールできます。
手順
OpenShift Update Service Operator の namespace を作成します。
OpenShift Update Service Operator の
namespace
オブジェクト YAML ファイル (update-service-namespace.yaml
など) を作成します。apiVersion: v1 kind: Namespace metadata: name: openshift-update-service annotations: openshift.io/node-selector: "" labels: openshift.io/cluster-monitoring: "true" 1
- 1
openshift.io/cluster-monitoring
ラベルを設定して、k この namespace で Operator が推奨するクラスターのモニターリングを有効にします。
namespace を作成します。
$ oc create -f <filename>.yaml
以下に例を示します。
$ oc create -f update-service-namespace.yaml
以下のオブジェクトを作成して OpenShift Update Service Operator をインストールします。
OperatorGroup
オブジェクト YAML ファイルを作成します (例:update-service-operator-group.yaml
)。apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: update-service-operator-group spec: targetNamespaces: - openshift-update-service
OperatorGroup
オブジェクトを作成します。$ oc -n openshift-update-service create -f <filename>.yaml
以下に例を示します。
$ oc -n openshift-update-service create -f update-service-operator-group.yaml
Subscription
オブジェクト YAML ファイルを作成します (例:update-service-subscription.yaml
)。Subscription の例
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: update-service-subscription spec: channel: v1 installPlanApproval: "Automatic" source: "redhat-operators" 1 sourceNamespace: "openshift-marketplace" name: "cincinnati-operator"
- 1
- Operator を提供するカタログソースの名前を指定します。カスタム Operator Lifecycle Manager (OLM) を使用しないクラスターの場合には、
redhat-operators
を指定します。OpenShift Container Platform クラスターが切断された環境にインストールされている場合、Operator Lifecycle Manager (OLM) を設定したときに作成されたCatalogSource
オブジェクトの名前を指定します。
Subscription
オブジェクトを作成します。$ oc create -f <filename>.yaml
以下に例を示します。
$ oc -n openshift-update-service create -f update-service-subscription.yaml
OpenShift Update Service Operator は
openshift-update-service
namespace にインストールされ、openshift-update-service
namespace をターゲットにします。
Operator のインストールを確認します。
$ oc -n openshift-update-service get clusterserviceversions
出力例
NAME DISPLAY VERSION REPLACES PHASE update-service-operator.v4.6.0 OpenShift Update Service 4.6.0 Succeeded ...
OpenShift Update Service Operator が記載されている場合には、インストールが成功しています。バージョン番号が表示されるものと異なる場合があります。
9.3.6. OpenShift Update Service グラフデータコンテナーイメージの作成
OpenShift Update Service には、OpenShift Update Service がチャネルメンバーシップについての情報を取得し、更新エッジをブロックするグラフデータコンテナーイメージが必要です。通常、グラフデータはアップグレードグラフデータリポジトリーから直接取得します。インターネット接続が利用できない場合には、グラフデータを OpenShift Update Service で利用できるようにする別の方法として init コンテナーからこの情報を読み込むことができます。init コンテナーのロールとして、グラフデータのローカルコピーを提供し、Pod の初期化時に init コンテナーはデータをサービスがアクセスできるボリュームにコピーすることが挙げられます。
手順
以下を含む Dockerfile (
./Dockerfile
など) を作成します。FROM registry.access.redhat.com/ubi8/ubi:8.1 RUN curl -L -o cincinnati-graph-data.tar.gz https://github.com/openshift/cincinnati-graph-data/archive/master.tar.gz CMD exec /bin/bash -c "tar xvzf cincinnati-graph-data.tar.gz -C /var/lib/cincinnati/graph-data/ --strip-components=1"
上記の手順で作成した docker ファイルを使用して、グラフデータコンテナーイメージ (例:
registry.example.com/openshift/graph-data:latest
) を構築します。$ podman build -f ./Dockerfile -t registry.example.com/openshift/graph-data:latest
前の手順で作成した graph-data コンテナーイメージを、OpenShift Update Service (例:
registry.example.com/openshift/graph-data:latest
) からアクセスできるリポジトリーにプッシュします。$ podman push registry.example.com/openshift/graph-data:latest
注記切断された環境でグラフデータイメージをローカルレジストリーにプッシュするには、前の手順で作成したグラフデータコンテナーイメージを、OpenShift Update Service からアクセス可能なリポジトリーにコピーします。利用可能なオプションについては、
oc image mirror --help
を実行します。
9.3.7. OpenShift Update Service アプリケーションの作成
OpenShift Container Platform Web コンソールまたは CLI を使用し、OpenShift Update Service アプリケーションを作成できます。
9.3.7.1. Web コンソールを使用した OpenShift Update Service アプリケーションの作成
OpenShift Container Platform Web コンソールを使用して、OpenShift Update Service Operator で OpenShift Update Service アプリケーションを作成できます。
前提条件
- OpenShift Update Service Operator がインストールされている。
- OpenShift Update Service の graph-data コンテナーイメージを作成して、OpenShift Update Service がアクセスできるリポジトリーにプッシュしておく。
- 現在のリリースおよび更新ターゲットリリースがローカルアクセス可能なレジストリーにミラーリングされている。
手順
-
Web コンソールで Operators
Installed Operators をクリックします。 - インストールされた Operator の一覧から OpenShift Update Service を選択します。
- Update Service タブをクリックします。
- Create UpdateService をクリックします。
-
service
など、Name フィールドに名前を入力します。 -
Graph Data Image フィールドに OpenShift Update Service グラフデータコンテナーイメージの作成で作成した graph-data コンテナーイメージにローカルの pullspec を入力します (例:
registry.example.com/openshift/graph-data:latest
)。 -
Releases フィールドに、OpenShift Container Platform イメージリポジトリーのミラーリングでリリースイメージを含むように作成したローカルのレジストリーとリポジトリー (例:
registry.example.com/ocp4/openshift4-release-images
) を入力します。 -
Replicas フィールドに
2
と入力します。 - Create をクリックして OpenShift Update Service アプリケーションを作成します。
OpenShift Update Service アプリケーションを検証します。
- Update Service タブの UpdateServices 一覧から、作成した Update Service アプリケーションをクリックします。
- Resources タブをクリックします。
- 各アプリケーションリソースのステータスが Created であることを確認します。
9.3.7.2. CLI を使用した OpenShift Update Service アプリケーションの作成
OpenShift CLI (oc
) を使用して、OpenShift Update Service アプリケーションを作成できます。
前提条件
- OpenShift Update Service Operator がインストールされている。
- OpenShift Update Service の graph-data コンテナーイメージを作成して、OpenShift Update Service がアクセスできるリポジトリーにプッシュしておく。
- 現在のリリースおよび更新ターゲットリリースがローカルアクセス可能なレジストリーにミラーリングされている。
手順
OpenShift Update Service ターゲット namespace を設定します (例:
openshift-update-service
)。$ NAMESPACE=openshift-update-service
namespace は Operator グループの
targetNamespaces
値と一致する必要があります。OpenShift Update Service アプリケーションの名前 (例:
service
) を設定します。$ NAME=service
OpenShift Container Platform イメージリポジトリーの設ミラーリング (例:
registry.example.com/ocp4/openshift4-release-images
) に設定されるように、リリースイメージのローカルレジストリーおよびリポジトリーを設定します。$ RELEASE_IMAGES=registry.example.com/ocp4/openshift4-release-images
OpenShift Update Service グラフデータコンテナーイメージの作成で作成した graph-data コンテナーイメージにローカルの pullspec を入力します (例:
registry.example.com/openshift/graph-data:latest
)。$ GRAPH_DATA_IMAGE=registry.example.com/openshift/graph-data:latest
OpenShift Update Service アプリケーションオブジェクトを作成します。
$ oc -n "${NAMESPACE}" create -f - <<EOF apiVersion: updateservice.operator.openshift.io/v1 kind: UpdateService metadata: name: ${NAME} spec: replicas: 2 releases: ${RELEASE_IMAGES} graphDataImage: ${GRAPH_DATA_IMAGE} EOF
OpenShift Update Service アプリケーションを検証します。
以下のコマンドを使用してポリシーエンジンルートを取得します。
$ while sleep 1; do POLICY_ENGINE_GRAPH_URI="$(oc -n "${NAMESPACE}" get -o jsonpath='{.status.policyEngineURI}/api/upgrades_info/v1/graph{"\n"}' updateservice "${NAME}")"; SCHEME="${POLICY_ENGINE_GRAPH_URI%%:*}"; if test "${SCHEME}" = http -o "${SCHEME}" = https; then break; fi; done
コマンドが成功するまでポーリングが必要になる場合があります。
ポリシーエンジンからグラフを取得します。
チャネル
に有効なバージョンを指定してください。たとえば、OpenShift Container Platform 4.8 で実行している場合は、stable-4.8
を使用します。$ while sleep 10; do HTTP_CODE="$(curl --header Accept:application/json --output /dev/stderr --write-out "%{http_code}" "${POLICY_ENGINE_GRAPH_URI}?channel=stable-4.6")"; if test "${HTTP_CODE}" -eq 200; then break; fi; echo "${HTTP_CODE}"; done
これにより、グラフ要求が成功するまでポーリングされます。ただし、ミラーリングしたリリースイメージによっては、生成されるグラフが空白の場合があります。
ポリシーエンジンのルート名は、RFC-1123 に基づき、63 文字以上を指定できません。host must conform to DNS 1123 naming convention and must be no more than 63 characters
が原因で、ReconcileCompleted
のステータスが false
、理由が CreateRouteFailed
となっている場合には、更新サービスをもう少し短い名前で作成してみてください。
9.3.7.2.1. Cluster Version Operator (CVO) の設定
OpenShift Update Service Operator をインストールして、OpenShift Update Service アプリケーションを作成した後に、ローカルインストールされた OpenShift Update Service からグラフデータをプルするように Cluster Version Operator (CVO) を更新できます。
前提条件
- OpenShift Update Service Operator がインストールされている。
- OpenShift Update Service の graph-data コンテナーイメージを作成して、OpenShift Update Service がアクセスできるリポジトリーにプッシュしておく。
- 現在のリリースおよび更新ターゲットリリースがローカルアクセス可能なレジストリーにミラーリングされている。
- OpenShift Update Service アプリケーションが作成されている。
手順
OpenShift Update Service ターゲット namespace を設定します (例:
openshift-update-service
)。$ NAMESPACE=openshift-update-service
OpenShift Update Service アプリケーションの名前 (例:
service
) を設定します。$ NAME=service
ポリシーエンジンルートを取得します。
$ POLICY_ENGINE_GRAPH_URI="$(oc -n "${NAMESPACE}" get -o jsonpath='{.status.policyEngineURI}/api/upgrades_info/v1/graph{"\n"}' updateservice "${NAME}")"
プルグラフデータのパッチを設定します。
$ PATCH="{\"spec\":{\"upstream\":\"${POLICY_ENGINE_GRAPH_URI}\"}}"
CVO にパッチを適用して、ローカルの OpenShift Update Service を使用します。
$ oc patch clusterversion version -p $PATCH --type merge
クラスター全体のプロキシーを有効 にして、更新サーバーを信頼するように CA を設定するを参照してください。
9.3.8. OpenShift Update Service アプリケーションの削除
OpenShift Container Platform Web コンソールまたは CLI を使用して OpenShift Update Service アプリケーションを削除できます。
9.3.8.1. Web コンソールを使用した OpenShift Update Service アプリケーションの削除
OpenShift Container Platform Web コンソールを使用して、OpenShift Update Service Operator で OpenShift Update Service アプリケーションを削除できます。
前提条件
- OpenShift Update Service Operator がインストールされている。
手順
-
Web コンソールで Operators
Installed Operators をクリックします。 - インストールされた Operator の一覧から OpenShift Update Service を選択します。
- Update Service タブをクリックします。
- インストールされた OpenShift Update Service アプリケーションの一覧から、削除するアプリケーションを選択して、Delete UpdateService をクリックします。
- Delete UpdateService? 確認ダイアログで、Delete をクリックし、削除を確定します。
9.3.8.2. CLI を使用した OpenShift Update Service アプリケーションの削除
OpenShift CLI (oc
) を使用して、OpenShift Update Service アプリケーションを削除できます。
手順
OpenShift Update Service アプリケーションを作成した namespace を使用して OpenShift Update Service アプリケーション名を取得します (例:
openshift-update-service
)。$ oc get updateservice -n openshift-update-service
出力例
NAME AGE service 6s
直前の手順の
NAME
の値を使用して OpenShift Update Service アプリケーションと、OpenShift Update Service アプリケーションを作成した namespace (例:openshift-update-service
) を削除します。$ oc delete updateservice service -n openshift-update-service
出力例
updateservice.updateservice.operator.openshift.io "service" deleted
9.3.9. OpenShift Update Service Operator のアンインストール
OpenShift Update Service をアンインストールするには、まず OpenShift Container Platform Web コンソールまたは CLI を使用してすべての OpenShift Update Service アプリケーションを削除する必要があります。
9.3.9.1. Web コンソールを使用した OpenShift Update Service Operator のアンインストール
OpenShift Container Platform Web コンソールを使って OpenShift Update Service Operator をアンインストールすることができます。
前提条件
- OpenShift Update Service アプリケーションがすべて削除されている。
手順
-
Web コンソールで Operators
Installed Operators をクリックします。 - インストールされた Operator の一覧から OpenShift Update Service を選択し、Uninstall Operator をクリックします。
- Uninstall Operator? 確認ダイアログから Uninstall をクリックし、アンインストールを確定します。
9.3.9.2. CLI を使用した OpenShift Update Service Operator のアンインストール
OpenShift CLI (oc
) を使用して、OpenShift Update Service Operator をアンインストールできます。
前提条件
- OpenShift Update Service アプリケーションがすべて削除されている。
手順
OpenShift Update Service Operator (例:
openshift-update-service
) が含まれるプロジェクトに切り替えます。$ oc project openshift-update-service
出力例
Now using project "openshift-update-service" on server "https://example.com:6443".
OpenShift Update Service Operator Operator グループの名前を取得します。
$ oc get operatorgroup
出力例
NAME AGE openshift-update-service-fprx2 4m41s
Operator グループを削除します (例:
openshift-update-service-fprx2
)。$ oc delete operatorgroup openshift-update-service-fprx2
出力例
operatorgroup.operators.coreos.com "openshift-update-service-fprx2" deleted
OpenShift Update Service Operator サブスクリプションの名前を取得します。
$ oc get subscription
出力例
NAME PACKAGE SOURCE CHANNEL update-service-operator update-service-operator updateservice-index-catalog v1
直前の手順で
Name
の値を使用して、currentCSV
フィールドで、サブスクライブされた OpenShift Update Service Operator の現行バージョンを確認します。$ oc get subscription update-service-operator -o yaml | grep " currentCSV"
出力例
currentCSV: update-service-operator.v0.0.1
サブスクリプション (例:
update-service-operator
) を削除します。$ oc delete subscription update-service-operator
出力例
subscription.operators.coreos.com "update-service-operator" deleted
直前の手順の
currentCSV
値を使用し、OpenShift Update Service Operator の CSV を削除します。$ oc delete clusterserviceversion update-service-operator.v0.0.1
出力例
clusterserviceversion.operators.coreos.com "update-service-operator.v0.0.1" deleted