Привет всем 👋,

Допустим, представим такую ситуацию что вы подняли свеженький кластер OpenShift в закрытой сети без доступа к внешним NTP. Или же просто хотите пофиксить ошибку - NodeClockNotSynchronising.

В рамках этой заметки поправим это.

Итак, на сервере или локально у себя создаем такую файловую структуру.

mkdir -p shift/manifests/ntp

Затем заходим в неё:

cd shift/manifests/

На нодах шифта для синхронизации времени используется демон - chronyd. Находим конфигурации chrony с помощью grep:

oc get mc | grep chrony
--
50-masters-chrony-configuration          3.1.0             26h
50-workers-chrony-configuration          3.1.0             26h

Эти два конфига нам предстоит изменить. Поэтому выгружаем их содержимое себе локально.

oc get mc 50-masters-chrony-configuration -o yaml > ntp/50-masters-chrony-configuration.yml
oc get mc 50-workers-chrony-configuration -o yaml > ntp/50-workers-chrony-configuration.yml

Для безопасности, рекомендую, сделать бекап конфигураций.

На моей локальной машине, с которой я взаимодействую с кластерами уже настроен chronyd. Поэтому применим их и в конфигурации нод:

cat /etc/chrony.conf | base64 -w0 

В результате работы этой команды будет выведено значение в формате закодированной строки. Полученные данные сохраняем себе.

Далее меняем манифест мастер/воркер узлов, редактируем сохраненные yaml-файлы, заменяя значение base64-строки:

vim ntp/50-masters-chrony-configuration.yml
---
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  generation: 1
  labels:
    machineconfiguration.openshift.io/role: master
  name: 50-masters-chrony-configuration
spec:
  config:
    ignition:
      version: 3.1.0
    storage:
      files:
      - contents:
          source: data:text/plain;charset=utf-8;base64,<СЮДА_ВСТАВИТЬ_СТРОКУ>
        mode: 420
        overwrite: true
        path: /etc/chrony.conf


vim ntp/50-workers-chrony-configuration.yml
---
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  generation: 1
  labels:
    machineconfiguration.openshift.io/role: worker
  name: 50-workers-chrony-configuration
spec:
  config:
    ignition:
      version: 3.1.0
    storage:
      files:
      - contents:
          source: data:text/plain;charset=utf-8;base64,<СЮДА_ВСТАВИТЬ_СТРОКУ>
        mode: 420
        overwrite: true
        path: /etc/chrony.conf

Далее применяем обновленные конфиги:

oc apply -f ntp/50-masters-chrony-configuration.yml
oc apply -f ntp/50-workers-chrony-configuration.yml

Применяйте конфиги с интервалом 5–7 минут, так как в процессе обновление MachineConfig приводит к перезагрузке нод и в кластере начнется ребаланс ресурсов.

Процесс обновления можно мониторить командой:

oc get mcp master

Как только поля UPDATED станет True, а UPDATINGFalse. Можно применить манифест на воркер узлы.