Политики прерывания узлов

Содержание

Понимание прерывания узлов в конфигурации машины

По умолчанию, когда вы вносите определённые изменения в раздел systemd units объекта MachineConfig, оператор Machine Configuration выполнит дренаж и перезагрузку узлов, связанных с этим MachineConfig. Однако изменения в обычных файлах, как правило, не вызывают перезагрузку, что может привести к тому, что конфигурация не вступит в силу, как ожидалось. Чтобы решить эту проблему, вы можете определить политики прерывания узлов, чтобы указать, какие типы изменений должны вызывать перезагрузку узлов или другие действия прерывания. Эти политики настраиваются в объекте MachineConfiguration, расположенном в пространстве имён cpaas-system. См. пример ниже для настройки политики прерывания узлов.

После определения оператор Machine Configuration проверяет политику на наличие ошибок, таких как неверный формат. Затем он записывает политику в поле status.nodeDisruptionPolicyStatus объекта MachineConfiguration. Эти пользовательские политики переопределяют настройки прерывания по умолчанию в кластере.

По умолчанию с кластером устанавливается пользовательский ресурс MachineConfiguration с именем cluster. Вы можете настроить поведение прерывания узлов на этом ресурсе.


Что можно контролировать с помощью политик прерывания узлов

Политики прерывания узлов позволяют определить, что происходит при изменениях в следующих областях конфигурации:

  • Файлы: Вы можете определить поведение при изменениях файлов (за исключением изменений в корневом каталоге). По умолчанию изменения файлов не вызывают прерывания. Вы можете изменить это поведение с помощью поля spec.defaultNodeDisruptionPolicySpecAction.files.

  • Systemd Units: Вы можете создавать или изменять службы systemd, включая их включение, отключение или изменение состояния. По умолчанию изменения в systemd units вызывают дренаж узла и перезагрузку.

  • SSH Public Keys: Вы можете добавлять или обновлять SSH-ключи для пользователя boot. Эти изменения применяются немедленно по умолчанию и не вызывают перезагрузку или дренаж.

Каждое изменение оценивается в соответствии с политикой прерывания узлов, которая может вызвать одно или несколько из следующих действий:

  • Reboot: Дренаж и перезагрузка узла.
  • None: Прерывание не вызывается; изменение применяется без уведомления.
  • Drain: Дренаж узла без перезагрузки.
  • Restart: Перезапуск указанной службы systemd.
  • DaemonReload: Перезагрузка всех конфигураций systemd units.

Пример: Политика прерывания узлов по умолчанию

Ниже приведена конфигурация по умолчанию для ресурса MachineConfiguration с именем cluster после установки:

apiVersion: machineconfiguration.alauda.io/v1alpha1
kind: MachineConfiguration
metadata:
  name: cluster
spec:
  defaultNodeDisruptionPolicySpecAction:
    files:
    - type: None
    units:
    - type: Reboot
  nodeDisruptionPolicy:
    sshkey:
      actions:
      - type: None

Эта конфигурация означает:

  • Изменения файлов не вызывают никаких действий.
  • Изменения в systemd units вызывают дренаж узла и перезагрузку.
  • Изменения SSH-ключей применяются без прерывания.

Пример: Настройка поведения для файлов

Вы можете изменить действие по умолчанию для изменений файлов, чтобы они вызывали перезагрузку:

apiVersion: machineconfiguration.alauda.io/v1alpha1
kind: MachineConfiguration
metadata:
  name: cluster
spec:
  defaultNodeDisruptionPolicySpecAction:
    files:
    - type: Reboot
    units:
    - type: Reboot
  nodeDisruptionPolicy:
    sshkey:
      actions:
      - type: None

С этой конфигурацией любое изменение управляемого файла приведёт к дренажу и перезагрузке затронутого узла оператором Machine Configuration.


Пример: Применение политики к конкретному файлу

Вы также можете определить действия прерывания для конкретного пути файла. В следующем примере изменения файла /usr/local/bin/myapp.sh не вызовут перезагрузку узла, а вместо этого приведут к перезагрузке конфигурации systemd и перезапуску связанной службы:

apiVersion: machineconfiguration.alauda.io/v1alpha1
kind: MachineConfiguration
metadata:
  name: cluster
spec:
  defaultNodeDisruptionPolicySpecAction:
    files:
    - type: Reboot
    units:
    - type: Reboot
  nodeDisruptionPolicy:
    files:
    - path: /usr/local/bin/myapp.sh
      actions:
      - type: DaemonReload
      - type: Restart
        restart:
          serviceName: myapp.service
    sshkey:
      actions:
      - type: None

В этом случае при обновлении /usr/local/bin/myapp.sh оператор Machine Configuration перезагрузит все systemd units и перезапустит myapp.service — без дренажа или перезагрузки узла.