ブログ・コミュニティ

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 がどの操作を行うかを制御できる仕組みです。

(参照)
ノード停止ポリシーを使用してマシン設定の変更による停止を最小限に抑える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設定

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の詳しい使い方については、公式ドキュメントにまとまっているため、そちらを参照してください。

(参照)
Butane でのマシン設定の作成
chronyタイムサービスの設定

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 は運用を確実に楽にしてくれるので、ぜひ活用してみてください。

担当者紹介

20250508-3.png
担当者名
立古
コメント
サーバ構築の経験をベースに、昨年よりコンテナ技術を学習し、案件に参画しています。
保有資格
・Certified Kubernetes Administrator
・Certified Kubernetes Application Developer
・Red Hat 認定OpenShift 管理者試験 (EX280)

選ぶなら業界をリードするコンテナプラットフォーム

OpenShiftならインフラ運用の効率化はもとよりアプリケーション開発者がソースコードの開発に専念できるように必要な機能までも提供してくれます