第3章 ノード停止ポリシーを使用してマシン設定の変更による停止を最小限に抑える
デフォルトでは、MachineConfig
オブジェクトのフィールドに何らかの変更を加えると、Machine Config Operator (MCO) がそのマシン設定に関連付けられているノードをドレインして再起動します。ただし、ノード停止ポリシー を作成すると、一部の Ignition 設定オブジェクトに対して、ワークロードの停止をほとんどまたはまったく引き起こさない一連の変更を定義できます。
ノード停止ポリシーを使用すると、クラスターに停止を引き起こす設定変更と、引き起こさない設定変更を定義できます。これにより、クラスター内で小さなマシン設定の変更を行うときに、ノードのダウンタイムを短縮できます。ポリシーを設定するには、openshift-machine-config-Operator
namespace にある MachineConfiguration
オブジェクトを変更します。後述する MachineConfiguration
オブジェクトのノード停止ポリシーの例を参照してください。
ノード停止ポリシーに関係なく、常に再起動が必要となるマシン設定の変更があります。詳細は、Machine Config Operator について を参照してください。
ノード停止ポリシーを作成すると、MCO がポリシーを検証し、フォーマットの問題など、ファイル内の潜在的な問題を検索します。次に、MCO はポリシーをクラスターのデフォルト設定とマージし、マシン設定の status.nodeDisruptionPolicyStatus
フィールドに、マシン設定が将来変更されたときに実行されるアクションを入力します。クラスターのデフォルト設定は、常にポリシー内の設定で上書きされます。
MCO は、ノード停止ポリシーによって変更が正常に適用できるかどうかを検証しません。したがって、ノード停止ポリシーの正確性を確認する責任はお客様にあります。
たとえば、sudo 設定によるノードのドレインと再起動が必要ないように、ノード停止ポリシーを設定できます。また、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) オブジェクトからミラーリングルールを削除できます。
これらの変更のいずれかを行うと、ノード停止ポリシーによって、MCO が変更を実装するときに必要なアクションが次の中から決定されます。
- Reboot: MCO はノードをドレインして再起動します。これがデフォルトの動作です。
- None: MCO はノードのドレインも再起動も実行しません。MCO は、それ以上のアクションなしで変更を適用します。
- Drain: MCO はノードのワークロードを遮断してドレインします。ワークロードは新しい設定で再起動します。
- Reload: サービスの場合、MCO はサービスを再起動せずに指定されたサービスをリロードします。
- Restart: サービスの場合、MCO は指定されたサービスを完全に再起動します。
- DaemonReload: MCO は systemd マネージャー設定をリロードします。
- Special: これは MCO 専用の内部アクションであり、ユーザーが設定することはできません。
-
Reboot
およびNone
アクションを他のアクションと一緒に使用することはできません。Reboot
およびNone
アクションは、他のアクションをオーバーライドするためです。 - アクションは、ノード停止ポリシーのリストに設定されている順序で適用されます。
- ノードの再起動やその他の停止が必要となるその他のマシン設定の変更を行った場合、その再起動はノード停止ポリシーのアクションよりも優先されます。
3.1. ノード停止ポリシーの例
次の例の MachineConfiguration
オブジェクトには、ノード停止ポリシーが含まれています。
MachineConfiguration
オブジェクトと MachineConfig
オブジェクトは別々のオブジェクトです。MachineConfiguration
オブジェクトは、MCO Operator の設定パラメーターを含む MCO namespace 内のシングルトンオブジェクトです。MachineConfig
オブジェクトは、マシン設定プールに適用される変更を定義します。
次の例の MachineConfiguration
オブジェクトでは、ユーザー定義のポリシーは示していません。デフォルトのノード停止ポリシーの値を status
スタンザに示します。
デフォルトのノード停止ポリシー
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration 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
次の例では、SSH キーが変更されたときに、MCO はクラスターノードのドレイン、crio.service
のリロード、systemd 設定のリロード、crio-service
の再起動を実行します。
SSH キーの変更に対するノード停止ポリシーの例
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster namespace: openshift-machine-config-operator # ... 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 はそれ以上のアクションを実行せずに変更を適用します。
設定ファイルの変更に対するノード停止ポリシーの例
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster namespace: openshift-machine-config-operator # ... spec: nodeDisruptionPolicy: files: - actions: - reload: serviceName: chronyd.service type: Reload 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 namespace: openshift-machine-config-operator # ... 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 namespace: openshift-machine-config-operator # ... spec: nodeDisruptionPolicy: files: - actions: - type: None path: /etc/containers/registries.conf