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

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

    По умолчанию, при внесении определённых изменений в раздел 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 ключи: Вы можете добавлять или обновлять 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 — без дренажа или перезагрузки узла.