HOMEデベロッパー向け ブログ・コミュニティ SCSK技術者ブログ OpenShift 4.17でNTP設定変更を無停止化する|Node Disruption PolicyとMachineConfigの検証
OpenShift 4.17でNTP設定変更を無停止化する|Node Disruption PolicyとMachineConfigの検証
はじめに
OpenShift では、MachineConfig の特定の変更時に MCO(Machine Config Operator)がノードを drain & reboot するのが既定動作になっています。これは OS レベルの変更を安全に適用するためで、再起動を伴うことでノードと OS の整合性を確保する仕組みです。
しかし実際の運用では、稼働中のノードをできるだけ再起動させたくないケースも多くあります。例えば、NTP の設定変更や一部のサービス設定変更のように、本来は OS 全体の再起動を必要としない変更までノード再起動が発生してしまうのはできれば避けたいところです。
そこで役立つのが Node Disruption Policy です。
Node Disruption Policyとは?
Node Disruption Policy とは、OpenShift 4.17以降でサポートされた機能で、MachineConfig 変更時に MCO がどの操作を行うかを制御できる仕組みです。
これにより、例えば /etc/chrony.conf の変更があった場合に ノードの再起動ではなく chronyd.service の Restart だけを実行することが可能になります。 実際にNTPの設定変更を試してみました。
以下は、Node Disruption Policy によって設定可能なアクションとその内容です。
| アクション | 動作内容 | 補足 |
|---|---|---|
| Reboot | MCO がノードを drain して再起動する | デフォルト動作/他アクションと併用不可(最優先)(※1) |
| None | ノードの drain も再起動も行わず変更を適用する | 他アクションと併用不可(最優先)(※1) |
| Drain | ノードを cordon & drain する/ワークロードは新しい設定で再起動 | ノードは再起動しない |
| Reload | 指定サービスの設定を reload する | サービス自体の再起動は行わない |
| Restart | 指定サービスを再起動する | 今回の chronyd.service の例で使用 |
| DaemonReload | systemd マネージャー設定を daemon-reload する | 新しい unit ファイルの反映などに使用 |
| Special | MCO 内部専用の特別アクション | ユーザーが任意のパスに設定することはできない |
(※1) RebootとNoneは他のアクションをオーバーライドするため併用不可
アクションは、Node Disruption Policyのリストに設定されている順序で適用されます。
なお、常に再起動が必要な変更も存在します。全てをNode Disruption Policyで回避できるわけではありません。詳細はMCOのドキュメントを参照してください。
本記事でやること
- OpenShift 4.17で、/etc/chrony.conf の変更時にchronydサービスだけを再起動するノード停止ポリシーを設定
- MachineConfigでNTPサーバーの設定を変更
- 反映時、ノードの再起動が発生しないことを確認(chronydがrestartされていることを確認)事前確認
1. 事前確認
OpenShiftのバージョン確認
$ oc get clusterversions.config.openshift.io NAME VERSION AVAILABLE PROGRESSING SINCE STATUS version 4.17.48 True False 27h Cluster version is 4.17.48
MCP/MCOの健全性
$ oc get node NAME STATUS ROLES AGE VERSION control-plane-1 Ready control-plane,master 27h v1.30.14 control-plane-2 Ready control-plane,master 27h v1.30.14 control-plane-3 Ready control-plane,master 27h v1.30.14 worker-1 Ready worker 27h v1.30.14 worker-2 Ready worker 27h v1.30.14 worker-3 Ready worker 27h v1.30.14
$ oc get mcp NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-xxx True False False 3 3 3 0 27h worker rendered-worker-xxx True False False 3 3 3 0 27h
$ oc get co machine-config NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE machine-config 4.17.48 True False False 27h
既存のNTP設定確認
$ oc debug node/worker-1 Starting pod/worker-1-debug-9lr57 ... To use host binaries, run `chroot /host` Pod IP: 10.10.10.10 If you don't see a command prompt, try pressing enter. sh-5.1# chroot /host sh-5.1# cat /etc/chrony.conf pool 0.rhel.pool.ntp.org iburst driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync logdir /var/log/chrony server 192.168.2.10 iburst server 192.168.2.11 iburst
2. MachineConfiguration設定
MachineConfigurationにnodeDisruptionPolicyを設定します。
ここで /etc/chrony.conf の変更時アクションとして Restartを宣言します。これにより、MachineConfigで /etc/chrony.conf を更新しても、ノード再起動ではなく chronyd サービスの再起動で反映されます。
MachineConfigurationの修正
$ oc edit MachineConfiguration cluster -n openshift-machine-config-operator
以下のようにnodeDisruptionPolicyを追加します。
apiVersion: operator.openshift.io/v1
kind: MachineConfiguration
metadata:
creationTimestamp: "2026-01-07T00:42:13Z"
generation: 2
name: cluster
resourceVersion: "95635"
uid: 0387ea0e-de65-4fd2-998a-68ec409483dc
spec:
logLevel: Normal
managementState: Managed
nodeDisruptionPolicy:
files:
- actions:
- restart:
serviceName: chronyd.service
type: Restart
path: /etc/chrony.conf
operatorLogLevel: Normal
3. MachineConfigによるNTP設定変更
OpenShiftのノードのNTP設定は MachineConfigで管理されています。
MachineConfigは、Butane(Ignition 設定を作るためのツール)を使って作成します。
Butane を使うと、簡単なYAMLからMachineConfigを安全に生成できます。Butaneの詳しい使い方については、公式ドキュメントにまとまっているため、そちらを参照してください。
chrony.conf ファイルのコンテンツを含む Butane 設定を作成
変更後のIPを設定したbutanファイルを作成します。
IP変更:
192.168.2.10 → 192.168.2.20
192.168.2.11 → 192.168.2.21
$ cat 99-worker-chrony.bu
variant: openshift
version: 4.17.0
metadata:
name: 99-worker-chrony
labels:
machineconfiguration.openshift.io/role: worker
storage:
files:
- path: /etc/chrony.conf
mode: 0644
overwrite: true
contents:
inline: |
server 192.168.2.20 iburst
server 192.168.2.21 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
NTP設定変更用MachineConfig作成
$ butane 99-worker-chrony.bu -o 99-worker-chrony.yaml
$ cat 99-worker-chrony.yaml
# Generated by Butane; do not edit
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
labels:
machineconfiguration.openshift.io/role: worker
name: 99-worker-chrony
spec:
config:
ignition:
version: 3.4.0
storage:
files:
- contents:
compression: ""
source: data:,192.168.2.20%20iburst%0A192.168.2.21%20iburst%0Adriftfile%20%2Fvar%2Flib%2Fchrony%2Fdrift%0Amakestep%201.0%203%0Artcsync%0Alogdir%20%2Fvar%2Flog%2Fchrony%0A
mode: 420
overwrite: true
path: /etc/chrony.conf
NTP設定変更用MachineConfig適用
$ oc apply -f 99-worker-chrony.yaml machineconfig.machineconfiguration.openshift.io/99-worker-chrony created
4. 設定変更反映中の挙動
ノードの再起動なしでNTP設定が変更されることを確認します。
MCP確認
MachineConfig 適用中の各プールの状態変化をリアルタイムで確認します。
worker プールが新しい MachineConfig を受け取り、ノードが順番に更新されていく様子が確認できます。
$ oc get mcp -w NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-b67383ab2a02eadae81618fff2c934ea True False False 3 3 3 0 29h worker rendered-worker-74b7ccf461d53ed555caac7b7e9abae7 False True False 3 1 1 0 29h worker rendered-worker-74b7ccf461d53ed555caac7b7e9abae7 False True False 3 2 2 0 29h worker rendered-worker-93c890c5309460f023512772fd762af5 True False False 3 3 3 0 29h
NTP設定を確認
/etc/chrony.confに変更後のIPが設定されていることを確認します。
$ oc debug node/worker-1
Temporary namespace openshift-debug-dlqgq is created for debugging node...
Starting pod/worker-cluster-844tx-1-debug-9gp5l ...
To use host binaries, run `chroot /host`
Pod IP: 10.10.10.20
If you don't see a command prompt, try pressing enter.
sh-5.1# chroot /host/
sh-5.1# cat /etc/chrony.conf
server 192.168.2.20 iburst
server 192.168.2.21 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
chronydサービスが再起動されていることを確認
sh-5.1# Fri Feb 13 07:20:06 UTC 2026 sh-5.1# systemctl status chronyd ● chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; preset: enabled) Drop-In: /usr/lib/systemd/system/chronyd.service.d └─platform-chrony.conf Active: active (running) since Fri 2026-02-13 07:17:01 UTC; 3min 17s ago Docs: man:chronyd(8) ・ ・ ・ sh-5.1#
ノードが再起動されていないことを確認
uptime の出力に表示される稼働時間は23時間27分のためノードは再起動されていません。
sh-5.1# uptime 07:28:19 up 23:27, 0 users, load average: 0.50, 0.60, 0.71
ノードの再起動なしでOpenShiftのノードのNTP設定を変更できました!
さいごに
今回の検証では、OpenShift4.17で導入された NodeDisruptionPolicy を利用し、MachineConfig によるNTP設定変更をノード再起動なしで適用できることを確認しました。
これまでノード再起動が当たり前だと思われていた MachineConfig による設定変更は、運用中クラスタでは負荷や停止時間の理由から慎重になる場面が多々あります。
しかし、Node Disruption Policy によって 「どの設定変更でどのアクションを実行するか」 を細かく制御できるようになったことで、より柔軟な運用が可能になります。
OpenShift4.17の Node Disruption Policy は運用を確実に楽にしてくれるので、ぜひ活用してみてください。
担当者紹介
- 担当者名
- 立古
- コメント
- サーバ構築の経験をベースに、昨年よりコンテナ技術を学習し、案件に参画しています。
- 保有資格
-
・Certified Kubernetes Administrator
・Certified Kubernetes Application Developer
・Red Hat 認定OpenShift 管理者試験 (EX280)