节点中断策略
了解 Machine Configuration 中的节点中断
默认情况下,当您对 MachineConfig 对象的 systemd units 部分进行某些更改时,Machine Configuration Operator 将 drain 并 reboot 与该 MachineConfig 关联的节点。但是,对常规文件条目的更改通常不会导致 reboot,这可能导致配置无法按预期生效。为解决此问题,您可以定义节点中断策略,以指定哪些类型的更改应触发节点 reboot 或其他中断操作。这些策略在名为 cluster 的集群范围 MachineConfiguration 单例中配置。有关配置节点中断策略的示例,请参见下文。
定义后,Machine Configuration Operator 会验证该策略以检测无效格式等问题。然后,它会将该策略填充到 MachineConfiguration 对象的 status.nodeDisruptionPolicyStatus 字段中。这些用户定义的策略会覆盖集群的默认中断设置。
Machine Configuration Operator 在首次启动时创建此资源,默认策略如下所示。
因为文件更改的默认操作为 None,仅写入或更新文件的 MachineConfig 对象会应用到磁盘,但不会重启受影响的服务——因此更改可能不会生效。当文件更改需要服务进行 reload 或 restart 时(例如 kubelet 或 firewalld 配置),请为该文件路径定义节点中断策略,并在应用 MachineConfig 之前确认它出现在 status.nodeDisruptionPolicyStatus 中。
您可以使用节点中断策略控制的内容
节点中断策略允许您定义对以下配置区域进行更改时会发生什么:
-
Files:您可以定义文件更改的行为(不包括对根目录的更改)。默认情况下,文件更改不会触发任何中断。您可以使用
spec.defaultNodeDisruptionPolicySpecAction.files字段修改此行为。 -
Systemd Units:您可以创建或修改
systemd服务,包括启用、禁用或更改其状态。默认情况下,对systemdunits 的更改会触发节点 drain 和 reboot。 -
SSH Public Keys:您可以为
boot用户添加或更新 SSH 密钥。默认情况下,这些更改会立即应用,不会触发 reboot 或 drain。
每个更改都会根据节点中断策略进行评估,该策略可以触发以下一个或多个操作:
Reboot:Drain 并 reboot 节点。None:不触发任何中断;更改会静默应用。Drain:Drain 节点而不进行 reboot。Reload:Reload 指定的systemd服务而不 restart 它。Restart:Restart 指定的systemd服务。DaemonReload:Reload 所有systemdunit 配置。
示例:默认节点中断策略
以下是安装后 cluster MachineConfiguration 资源的默认配置:
此配置意味着:
- 文件更改不触发任何操作。
- Systemd unit 更改会导致节点 drain 和 reboot。
- SSH 密钥更改会在无中断的情况下应用。
示例:自定义文件行为
您可以将文件更改的默认操作更改为触发 reboot:
使用此配置,对托管文件的任何更改都将导致 Machine Configuration Operator 对受影响的节点进行 drain 并 reboot。
示例:将策略应用于特定文件
您还可以为特定文件路径定义中断操作。在以下示例中,对 /usr/local/bin/myapp.sh 的更改不会触发节点 reboot,而是会 reload systemd 配置并 restart 相关服务:
在这种情况下,当 /usr/local/bin/myapp.sh 被更新时,Machine Configuration Operator 将 reload 所有 systemd units 并 restart myapp.service——而无需 drain 或 reboot 节点。