Node Disruption Policies

目录

理解机器配置中的节点中断

默认情况下,当您对 MachineConfig 对象的 systemd 单元部分进行某些更改时,Machine Configuration Operator 会对与该 MachineConfig 关联的节点执行 drain 和重启操作。然而,对常规文件条目的更改通常不会导致重启,这可能导致配置未按预期生效。为了解决此问题,您可以定义节点中断策略,以指定哪些类型的更改应触发节点重启或其他中断操作。这些策略配置在位于 cpaas-system 命名空间中的 MachineConfiguration 对象中。请参见下面配置节点中断策略的示例。

定义后,Machine Configuration Operator 会验证策略以检测格式错误等问题。然后,它将策略填充到 MachineConfiguration 对象的 status.nodeDisruptionPolicyStatus 字段中。用户自定义的策略会覆盖集群的默认中断设置。

集群安装时会带有一个名为 cluster 的默认 MachineConfiguration 自定义资源。您可以在此资源上配置节点中断行为。


节点中断策略可控制的内容

节点中断策略允许您定义在以下配置区域发生更改时的处理方式:

  • 文件:您可以定义文件更改的行为(不包括对根目录的更改)。默认情况下,文件更改不会触发任何中断。您可以通过 spec.defaultNodeDisruptionPolicySpecAction.files 字段修改此行为。

  • Systemd 单元:您可以创建或修改 systemd 服务,包括启用、禁用或更改其状态。默认情况下,systemd 单元的更改会触发节点 drain 和重启。

  • SSH 公钥:您可以添加或更新 boot 用户的 SSH 密钥。这些更改默认会立即应用,不会触发重启或 drain。

每次更改都会根据节点中断策略进行评估,可能触发以下一种或多种操作:

  • Reboot:drain 并重启节点。
  • None:不触发中断,静默应用更改。
  • Drain:drain 节点但不重启。
  • Restart:重启指定的 systemd 服务。
  • DaemonReload:重新加载所有 systemd 单元配置。

示例:默认节点中断策略

以下是安装后 cluster MachineConfiguration 资源的默认配置:

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

该配置表示:

  • 文件更改不触发任何操作。
  • systemd 单元更改会导致节点 drain 和重启。
  • 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 Operator 对受影响节点执行 drain 和重启。


示例:针对特定文件应用策略

您还可以为特定文件路径定义中断操作。以下示例中,对 /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 Operator 会重新加载所有 systemd 单元并重启 myapp.service,而不会对节点执行 drain 或重启。