
はじめに
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 がどの操作を行うかを制御できる仕組みです。
(参照)ノード停止ポリシーを使用してマシン設定の変更による停止を最小限に抑える
Getting started with node disruption policies
これにより、例えば /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設定
$ 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)












