Управление конфигурацией узлов с помощью MachineConfig

Вы можете использовать задачи, описанные в этом разделе, для создания объектов MachineConfig, которые изменяют файлы, systemd-юниты и публичные SSH-ключи на узлах, а также для восстановления узлов, у которых произошёл дрейф конфигурации.

MachineConfig поддерживает спецификацию Ignition версии 3.4. Все объекты MachineConfig должны создаваться в соответствии с этой версией.

В некоторых случаях конфигурация на узле может не полностью соответствовать конфигурации, применённой через MachineConfig. Такое состояние называется дрейфом конфигурации. Демон конфигурации машины периодически проверяет, произошёл ли дрейф конфигурации на узле. Если дрейф обнаружен, узел помечается как Degraded и остаётся в этом состоянии до тех пор, пока администратор не восстановит ожидаемую конфигурацию.

В следующих примерах показано, как использовать объекты MachineConfig для управления конфигурацией узлов.

Содержание

Настройка службы времени Chrony

Чтобы настроить службу синхронизации времени Chrony (chronyd) и указать NTP-серверы и связанные параметры, вы можете обновить файл chrony.conf на целевых узлах с помощью объекта MachineConfig.

  1. Сначала создайте временный файл с нужной конфигурацией Chrony:

    chrony.conf
    server 0.centos.pool.ntp.org iburst
    server 1.centos.pool.ntp.org iburst
    makestep 1.0 3
    rtcsync
    logdir /var/log/chrony
  2. Затем закодируйте содержимое файла в base64:

    base64 -w0 chrony.conf
  3. Создайте объект MachineConfig с именем 99-worker-chrony. В поле .spec.config.storage.files[0].contents.source вставьте строку в формате data:text/plain;base64,<encoded-content> с base64-кодированным содержимым:

    apiVersion: machineconfiguration.alauda.io/v1alpha1
    kind: MachineConfig
    metadata:
      name: 99-worker-chrony
      labels:
        machineconfiguration.alauda.io/role: worker
    spec:
      config:
        ignition:
          version: 3.4.0
        storage:
          files:
            - path: /etc/chrony.conf
              mode: 0644
              contents:
                source: 'data:text/plain;base64,c2VydmVyIDAuY2VudG9zLnBvb2wubnRwLm9yZyBpYnVyc3QKc2VydmVyIDEuY2VudG9zLnBvb2wubnRwLm9yZyBpYnVyc3QKbWFrZXN0ZXAgMS4wIDMKcnRjc3luYwpsb2dkaXIgL3Zhci9sb2cvY2hyb255Cg=='

    Эта конфигурация создаёт объект MachineConfig, который применяет кастомный файл chrony.conf к узлам, связанным с пулом конфигурации машин worker. Файл будет записан в /etc/chrony.conf на каждом узле с правами доступа 0644.

Отключение службы времени Chrony

Чтобы отключить службу синхронизации времени Chrony на узлах с определённой ролью, можно создать объект MachineConfig, который переопределит определение systemd-юнита и отключит службу.

Пример конфигурации:

apiVersion: machineconfiguration.alauda.io/v1alpha1
kind: MachineConfig
metadata:
  name: 99-worker-disable-chrony
  labels:
    machineconfiguration.alauda.io/role: worker
spec:
  config:
    ignition:
      version: 3.4.0
    systemd:
      units:
        - name: chronyd.service
          enabled: false
          contents: |
            [Unit]
            Description=NTP client/server
            Documentation=man:chronyd(8) man:chrony.conf(5)
            After=ntpdate.service sntp.service ntpd.service
            Conflicts=ntpd.service systemd-timesyncd.service
            ConditionCapability=CAP_SYS_TIME

            [Service]
            Type=forking
            PIDFile=/run/chrony/chronyd.pid
            EnvironmentFile=-/etc/sysconfig/chronyd
            ExecStart=/usr/sbin/chronyd $OPTIONS
            ExecStartPost=/usr/libexec/chrony-helper update-daemon
            PrivateTmp=yes
            ProtectHome=yes
            ProtectSystem=full

            [Install]
            WantedBy=multi-user.target

Эта конфигурация отправляет кастомную версию файла юнита chronyd.service на узлы в пуле конфигурации машин worker. Служба явно отключена. После применения конфигурации и перезагрузки узлов служба Chrony больше не будет запускаться автоматически.

Настройка публичного SSH-ключа для пользователя boot

Система конфигурации машин позволяет настроить публичный SSH-ключ для пользователя boot на управляемых узлах. Конфигурация для других учётных записей пользователей не поддерживается. Обратите внимание, что конфигурация машин не создаёт пользователей или группы автоматически — вы должны убедиться, что пользователь и группа boot существуют на узле до применения конфигурации.

Пример конфигурации:

apiVersion: machineconfiguration.alauda.io/v1alpha1
kind: MachineConfig
metadata:
  name: 99-worker-ssh
  labels:
    machineconfiguration.alauda.io/role: worker
spec:
  config:
    ignition:
      version: 3.4.0
    passwd:
      users:
        - user: boot
          sshAuthorizedKeys:
            - ssh-rsa <ssh-public-key>

Этот MachineConfig установит указанный SSH-ключ в файл /home/boot/.ssh/authorized_keys на узлах в пуле конфигурации машин worker.

Восстановление после дрейфа конфигурации

Если конфигурация узла расходится с назначенным MachineConfig, он будет помечен как Degraded. В этом состоянии узел продолжает работать, но не может получать дальнейшие обновления конфигурации до устранения проблемы.

Существует два способа восстановить узел из этого состояния:

  1. Ручное восстановление конфигурации
    Вы можете вручную привести файлы и права доступа на узле в точное соответствие с теми, что указаны в назначенном MachineConfig. Система обнаружит исправление и снимет статус degraded.

  2. Принудительное повторное применение конфигурации
    Создайте пустой файл /run/machine-config-daemon-force на затронутом узле. Демон конфигурации машины обнаружит этот триггер, повторно применит текущий MachineConfig, удалит файл-триггер и перезагрузит узел. После перезагрузки узел перейдёт из состояния Degraded обратно в Done.