第5章 ブートイメージ更新
Machine Config Operator (MCO) は、ブートイメージを使用して Red Hat Enterprise Linux CoreOS (RHCOS) ノードを起動します。デフォルトでは、ブートイメージは OpenShift Container Platform によって管理されません。
そのため、クラスター内のブートイメージはクラスターとともに更新されません。たとえば、クラスターが元々 OpenShift Container Platform 4.12 で作成されていた場合、クラスターがノードを作成するために使用するブートイメージは、クラスターがそれ以降のバージョンであっても、同じ 4.12 バージョンになります。クラスターが後で 4.13 以降にアップグレードされた場合、新しいノードは同じ 4.12 イメージを使用してスケーリングを継続します。
このプロセスにより、以下の問題が発生する可能性があります。
- ノードの起動に余分に時間がかかる
- 証明書の有効期限の問題が発生する
- バージョンスキューの問題が発生する
これらの問題を回避するには、クラスターを更新するたびにブートイメージも更新するようにクラスターを設定できます。MachineConfiguration オブジェクトを変更することで、この機能を有効にできます。現在、ブートイメージを更新する機能は、Google Cloud Platform (GCP) および Amazon Web Services (AWS) クラスターでのみ利用できます。Cluster CAPI Operator によって管理されるクラスターではサポートされません。
マシンセットでデフォルトのユーザーデータシークレット (worker-user-data という名前) を使用していない場合、または worker-user-data シークレットを変更した場合は、管理されたブートイメージの更新を使用しないでください。これは、Machine Config Operator (MCO) が、シークレットの管理バージョンを使用するようにマシンセットを更新するためです。管理されたブートイメージ機能を使用すると、マシンセットオブジェクトに保存されているシークレットをカスタマイズする機能が失われます。
クラスターで使用されている現在のブートイメージを表示するには、マシンセットを調べます。
マシンセット内のブートイメージの場所と形式は、プラットフォームによって異なります。ただし、ブートイメージは常に spec.template.spec.providerSpec. パラメーターにリスト表示されます。
ブートイメージ参照を含む GCP マシンセットの例
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
name: ci-ln-hmy310k-72292-5f87z-worker-a
namespace: openshift-machine-api
spec:
# ...
template:
# ...
spec:
# ...
providerSpec:
# ...
value:
disks:
- autoDelete: true
boot: true
image: projects/rhcos-cloud/global/images/rhcos-412-85-202203181601-0-gcp-x86-64
# ...
- 1
- このブートイメージは、クラスターの現在のバージョンに関係なく、最初にインストールされた OpenShift Container Platform バージョン (この例では OpenShift Container Platform 4.12) と同じです。
providerSpecフィールドの構造はプラットフォームごとに異なるため、マシンセット内でブートイメージが表現される方法はプラットフォームによって異なります。
ブートイメージ参照を含む AWS マシンセットの例
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
name: ci-ln-hmy310k-72292-5f87z-worker-a
namespace: openshift-machine-api
spec:
# ...
template:
# ...
spec:
# ...
providerSpec:
value:
ami:
id: ami-0e8fd9094e487d1ff
# ...
ブートイメージを更新するようにクラスターを設定すると、マシンセットで参照されるブートイメージはクラスターの現在のバージョンと一致します。
5.1. ブートイメージ更新の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、ブートイメージは OpenShift Container Platform によって管理されません。MachineConfiguration オブジェクトを変更することで、クラスターを更新するたびにブートイメージが更新されるようにクラスターを設定できます。
現在、ブートイメージを更新する機能は、Google Cloud Platform (GCP) および Amazon Web Services (AWS) クラスターでのみ利用できます。Cluster CAPI Operator によって管理されるクラスターではサポートされません。
手順
次のコマンドを実行して、
clusterという名前のMachineConfigurationオブジェクトを編集し、ブートイメージの更新を有効にします。$ oc edit MachineConfiguration clusterオプション: すべてのマシンセットのブートイメージ更新機能を設定します。
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster namespace: openshift-machine-config-operator spec: # ... managedBootImages:1 machineManagers: - resource: machinesets apiGroup: machine.openshift.io selection: mode: All2 オプション: 特定のマシンセットのブートイメージ更新機能を設定します。
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster namespace: openshift-machine-config-operator spec: # ... managedBootImages:1 machineManagers: - resource: machinesets apiGroup: machine.openshift.io selection: mode: Partial partial: machineResourceSelector: matchLabels: update-boot-image: "true"2 ヒントマシンセットに適切なラベルが存在しない場合は、次のようなコマンドを実行してキーと値のペアを追加します。
$ oc label machineset.machine ci-ln-hmy310k-72292-5f87z-worker-a update-boot-image=true -n openshift-machine-api
検証
マシン設定オブジェクトを表示して、ブートイメージ更新の現在の状態を確認します。
$ oc get machineconfiguration cluster -n openshift-machine-api -o yamlブートイメージ参照を含むマシンセット例
kind: MachineConfiguration metadata: name: cluster # ... status: conditions: - lastTransitionTime: "2024-09-09T13:51:37Z"1 message: Reconciled 1 of 2 MAPI MachineSets | Reconciled 0 of 0 CAPI MachineSets | Reconciled 0 of 0 CAPI MachineDeployments reason: BootImageUpdateConfigurationAdded status: "True" type: BootImageUpdateProgressing - lastTransitionTime: "2024-09-09T13:51:37Z"2 message: 0 Degraded MAPI MachineSets | 0 Degraded CAPI MachineSets | 0 CAPI MachineDeployments reason: BootImageUpdateConfigurationAdded status: "False" type: BootImageUpdateDegraded次のコマンドを実行してブートイメージのバージョンを取得します。
$ oc get machinesets <machineset_name> -n openshift-machine-api -o yamlブートイメージ参照を含むマシンセット例
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: ci-ln-77hmkpt-72292-d4pxp update-boot-image: "true" name: ci-ln-77hmkpt-72292-d4pxp-worker-a namespace: openshift-machine-api spec: # ... template: # ... spec: # ... providerSpec: # ... value: disks: - autoDelete: true boot: true image: projects/rhcos-cloud/global/images/<boot_image>1 # ...- 1
- このブートイメージは、現在の OpenShift Container Platform バージョンと同じです。マシンセット内のブートイメージの場所と形式は、プラットフォームによって異なります。ただし、ブートイメージは常に
spec.template.spec.providerSpec.パラメーターにリスト表示されます。