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