• Русский
  • Управление конфигурацией узла

    Вы можете использовать задачи, описанные в этом разделе, для создания объектов 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 вставьте base64-кодированную строку в формате data:text/plain;base64,<encoded-content>:

      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

    Эта конфигурация отправляет на узлы в пуле конфигурации машин worker кастомизированный файл юнита chronyd.service. Служба явно отключена. После применения конфигурации и перезагрузки узлов служба 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. Система обнаружит исправление и снимет статус деградации.

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