第3章 node disruption policy を使用してマシン設定の変更による停止を最小限に抑える
デフォルトでは、MachineConfig
オブジェクトのフィールドに何らかの変更を加えると、Machine Config Operator (MCO) がそのマシン設定に関連付けられているノードをドレインして再起動します。ただし、node disruption policy を作成すると、一部の Ignition 設定オブジェクトに対して、ワークロードの停止をほとんどまたはまったく引き起こさない一連の変更を定義できます。
node disruption policy を使用すると、クラスターに停止を引き起こす設定変更と、引き起こさない設定変更を定義できます。これにより、クラスター内で小さなマシン設定の変更を行うときに、ノードのダウンタイムを短縮できます。ポリシーを設定するには、openshift-machine-config-operator
namespace にある MachineConfiguration
オブジェクトを変更します。後述する MachineConfiguration
オブジェクトの node disruption policy の例を参照してください。
node disruption policy に関係なく、常に再起動が必要となるマシン設定の変更があります。詳細は、Machine Config Operator について を参照してください。
node disruption policy を作成すると、MCO がポリシーを検証し、フォーマットの問題など、ファイル内の潜在的な問題を検索します。次に、MCO はポリシーをクラスターのデフォルト設定とマージし、マシン設定の status.nodeDisruptionPolicyStatus
フィールドに、マシン設定が将来変更されたときに実行されるアクションを入力します。クラスターのデフォルト設定は、常にポリシー内の設定で上書きされます。
MCO は、node disruption policy によって変更が正常に適用できるかどうかを検証しません。したがって、node disruption policy の正確性を確保するのはお客様の責任となります。
たとえば、sudo 設定によるノードのドレインと再起動が必要ないように、node disruption policy を設定できます。また、sshd
への更新を適用する際に sshd サービスだけをリロードするようにクラスターを設定することもできます。
次の Ignition 設定オブジェクトに変更を加えるときに、MCO の動作を制御できます。
設定ファイル:
/var
または/etc
ディレクトリー内のファイルを追加または更新します。ディレクトリー内の任意の場所にある特定のファイル、または特定のディレクトリーへのパスに対してポリシーを設定できます。パスの場合、そのディレクトリー内のファイルの変更または追加によってポリシーがトリガーされます。注記ファイルが複数のポリシーに含まれている場合は、そのファイルに最も一致するポリシーのみが適用されます。
たとえば、
/etc/
ディレクトリーのポリシーと/etc/pki/
ディレクトリーのポリシーがある場合は、/etc/pki/tls/certs/ca-bundle.crt
ファイルを変更すると、etc/pki
ポリシーが適用されます。- systemd ユニット: systemd サービスを作成してステータスを設定したり、systemd サービスを変更したりします。
-
ユーザーとグループ: インストール後に
passwd
セクションで SSH キーを変更します。 -
ICSP、ITMS、IDMS オブジェクト:
ImageContentSourcePolicy
(ICSP)、ImageTagMirrorSet
(ITMS)、およびImageDigestMirrorSet
(IDMS) オブジェクトからミラーリングルールを削除できます。
これらの変更のいずれかを行うと、node disruption policy によって、MCO が変更を実装するときに必要なアクションが次の中から決定されます。
- Reboot: MCO はノードをドレインして再起動します。これがデフォルトの動作です。
- None: MCO はノードのドレインも再起動も実行しません。MCO は、それ以上のアクションなしで変更を適用します。
- Drain: MCO はノードのワークロードを遮断してドレインします。ワークロードは新しい設定で再起動します。
- Reload: サービスの場合、MCO はサービスを再起動せずに指定されたサービスをリロードします。
- Restart: サービスの場合、MCO は指定されたサービスを完全に再起動します。
- DaemonReload: MCO は systemd マネージャー設定をリロードします。
- Special: これは MCO 専用の内部アクションであり、ユーザーが設定することはできません。
-
Reboot
およびNone
アクションを他のアクションと一緒に使用することはできません。Reboot
およびNone
アクションは、他のアクションをオーバーライドするためです。 - アクションは、node disruption policy のリストに設定されている順序で適用されます。
- ノードの再起動やその他の停止が必要となるその他のマシン設定の変更を行った場合、その再起動は node disruption policy のアクションよりも優先されます。
3.1. node disruption policy の例
次の例の MachineConfiguration
オブジェクトには、node disruption policy が含まれています。
MachineConfiguration
オブジェクトと MachineConfig
オブジェクトは別々のオブジェクトです。MachineConfiguration
オブジェクトは、MCO Operator の設定パラメーターを含む MCO namespace 内のシングルトンオブジェクトです。MachineConfig
オブジェクトは、マシン設定プールに適用される変更を定義します。
次の例の MachineConfiguration
オブジェクトでは、ユーザー定義のポリシーは示していません。デフォルトの node disruption policy の値を status
スタンザに示します。
デフォルトの node disruption policy
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster spec: logLevel: Normal managementState: Managed operatorLogLevel: Normal status: nodeDisruptionPolicyStatus: clusterPolicies: files: - actions: - type: None path: /etc/mco/internal-registry-pull-secret.json - actions: - type: None path: /var/lib/kubelet/config.json - actions: - reload: serviceName: crio.service type: Reload path: /etc/machine-config-daemon/no-reboot/containers-gpg.pub - actions: - reload: serviceName: crio.service type: Reload path: /etc/containers/policy.json - actions: - type: Special path: /etc/containers/registries.conf - actions: - reload: serviceName: crio.service type: Reload path: /etc/containers/registries.d - actions: - type: None path: /etc/nmstate/openshift - actions: - restart: serviceName: coreos-update-ca-trust.service type: Restart - restart: serviceName: crio.service type: Restart path: /etc/pki/ca-trust/source/anchors/openshift-config-user-ca-bundle.crt sshkey: actions: - type: None observedGeneration: 9
デフォルトの node disruption policy には、/etc/containers/registries.conf.d
ファイルへの変更に関するポリシーが含まれていません。これは、OpenShift Container Platform でも Red Hat Enterprise Linux (RHEL) でも、registries.conf.d
ファイルを使用してイメージの短縮名のエイリアスを指定するためです。イメージをプルする際には、常に完全修飾名を指定することを推奨します。これはパブリックレジストリーでは特に重要です。パブリックレジストリーで認証が必要な場合、イメージがデプロイされない可能性があるためです。イメージの短縮名を使用する必要がある場合は、/etc/containers/registries.conf.d
ファイルで使用するユーザー定義ポリシーを作成できます。
次の例では、SSH キーが変更されたときに、MCO はクラスターノードのドレイン、crio.service
のリロード、systemd 設定のリロード、crio-service
の再起動を実行します。
SSH キーの変更に対する node disruption policy の例
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster # ... spec: nodeDisruptionPolicy: sshkey: actions: - type: Drain - reload: serviceName: crio.service type: Reload - type: DaemonReload - restart: serviceName: crio.service type: Restart # ...
次の例では、/etc/chrony.conf
ファイルに変更が加えられると、MCO がクラスターノード上の chronyd.service
を再起動します。/var/run
ディレクトリーにファイルが追加または変更されると、MCO はそれ以上のアクションを実行せずに変更を適用します。
設定ファイルの変更に対する node disruption policy の例
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster # ... spec: nodeDisruptionPolicy: files: - actions: - restart: serviceName: chronyd.service type: Restart path: /etc/chrony.conf - actions: - type: None path: /var/run
次の例では、auditd.service
systemd ユニットが変更されたときに、MCO はクラスターノードのドレイン、crio.service
のリロード、systemd マネージャー設定のリロード、crio.service
の再起動を実行します。
systemd ユニット変更のためのノード中断ポリシーの例
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster # ... spec: nodeDisruptionPolicy: units: - name: auditd.service actions: - type: Drain - type: Reload reload: serviceName: crio.service - type: DaemonReload - type: Restart restart: serviceName: crio.service
次の例では、ImageContentSourcePolicy
(ICSP) オブジェクトの編集などにより registries.conf
ファイルに変更が加えられた場合、MCO はノードをドレインまたは再起動せず、それ以上のアクションなしで変更を適用します。
registries.conf ファイルの変更に対するノード中断ポリシーの例
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster # ... spec: nodeDisruptionPolicy: files: - actions: - type: None path: /etc/containers/registries.conf