第 3 章 使用节点中断策略最小化对机器配置更改的中断
默认情况下,当您对 MachineConfig
对象中的字段进行某些更改时,Machine Config Operator (MCO) 会排空并重启与该机器配置关联的节点。但是,您可以创建一个节点中断策略,在策略中定义一组对某些 Ignition 配置对象的更改,它们对负载只有非常少的(或没有)中断影响。
节点中断策略允许您定义哪些配置改变会对集群造成中断,哪些改变不会造成中断。这可让您对在集群中进行了小的集群配置变化时减少节点停机的时间。要配置策略,您可以修改位于 openshift-machine-config-operator
命名空间中的 MachineConfiguration
对象。请参阅以下 MachineConfiguration
对象中的节点中断策略示例。
无论任何节点中断策略是什么,对机器配置的更改始终需要重启。如需更多信息,请参阅关于 Machine Config Operator。
创建节点中断策略后,MCO 会验证策略来搜索文件中潜在的问题,如格式化问题。然后,MCO 将策略与集群默认值合并,并为机器配置中的 status.nodeDisruptionPolicyStatus
字段填充在将来的机器配置中要执行的操作。策略中的配置总是覆盖集群默认值。
MCO 不会验证节点中断策略是否能够成功应用更改。因此,您需要确保节点中断策略的准确性。
例如,您可以配置节点中断策略,以便 sudo 配置不需要节点排空和重新引导。或者,您可以配置集群,以便对 sshd
进行的更新仅会重新加载该服务。
节点中断策略功能只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
您可以在对以下 Ignition 配置对象进行更改时控制 MCO 的行为:
-
配置文件 :在
/var
或/etc
目录中添加了文件或更新了其中的文件。 - systemd 单元 :创建和设置 systemd 服务的状态,或修改现有的 systemd 服务。
-
用户和组 :修改了 postinstallation 中的
passwd
部分中的 SSH 密钥。 -
ICSP,ITMS,IDMS 对象:您可以从
ImageContentSourcePolicy
(ICSP)、ImageTagMirrorSet
(ITMS) 和ImageDigestMirrorSet
(IDMS) 对象中删除镜像规则。
当您进行任何这样的更改时,节点中断策略将决定在 MCO 实现更改时,需要进行以下的哪些操作:
- Reboot: MCO 排空并重启节点。这是默认的行为。
- None: MCO 不排空或重启节点。MCO 在不进行其他操作的情况下应用更改。
- Drain :MCO 会封锁并排空其工作负载的节点。工作负载使用新配置重启。
- Reload: 对于服务,MCO 会在不重启该服务的情况下重新载入指定的服务。
- Restart :对于服务,MCO 会完全重启指定的服务。
- DaemonReload :MCO 重新加载 systemd 管理器配置。
- Special :这是一个内部的 MCO 操作,用户无法设置。
-
Reboot
和None
操作不能用于任何其他操作,因为Reboot
和None
操作会覆盖其他操作。 - 操作会按照节点中断策略列表中设置的顺序应用。
- 如果您进行了其他机器配置更改,它们需要重新引导节点或对节点有其他的中断影响,则重新引导会取代节点中断策略操作。
3.1. 节点中断策略示例
以下示例 MachineConfiguration
对象包含了一个节点中断策略。
MachineConfiguration
对象和 MachineConfig
对象是不同的对象。MachineConfiguration
对象是 MCO 命名空间中的一个单个对象,其中包含 MCO operator 的配置参数。MachineConfig
对象定义了要应用到机器配置池的更改。
以下示例 MachineConfiguration
对象显示没有用户定义的策略。默认节点中断策略值显示在 status
小节中。
默认节点中断策略
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration name: cluster spec: logLevel: Normal managementState: Managed operatorLogLevel: Normal status: nodeDisruptionPolicyStatus: clusterPolicies: files: - actions: - type: None path: /etc/mco/internal-registry-pull-secret.json - actions: - type: None path: /var/lib/kubelet/config.json - actions: - reload: serviceName: crio.service type: Reload path: /etc/machine-config-daemon/no-reboot/containers-gpg.pub - actions: - reload: serviceName: crio.service type: Reload path: /etc/containers/policy.json - actions: - type: Special path: /etc/containers/registries.conf sshkey: actions: - type: None readyReplicas: 0
在以下示例中,当对 SSH 密钥进行了更改时,MCO 会排空集群节点,重新载入 crio.service
,重新载入 systemd 配置,并重启 crio-service
。
SSH 密钥更改的节点中断策略示例
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster namespace: openshift-machine-config-operator # ... spec: nodeDisruptionPolicy: sshkey: actions: - type: Drain - reload: serviceName: crio.service type: Reload - type: DaemonReload - restart: serviceName: crio.service type: Restart # ...
在以下示例中,当对 /etc/chrony.conf
文件进行更改时,MCO 会在集群节点上重新载入 chronyd.service
。
配置文件更改的节点中断策略示例
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster namespace: openshift-machine-config-operator # ... spec: nodeDisruptionPolicy: files: - actions: - reload: serviceName: chronyd.service type: Reload path: /etc/chrony.conf
在以下示例中,当对 auditd.service
systemd 单元进行了更改时,MCO 会排空集群节点,重新载入 crio.service
,重新载入 systemd 管理器配置,并重启 crio.service
。
systemd 单元更改的节点中断策略示例
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster namespace: openshift-machine-config-operator # ... spec: nodeDisruptionPolicy: units: - name: auditd.service actions: - type: Drain - type: Reload reload: serviceName: crio.service - type: DaemonReload - type: Restart restart: serviceName: crio.service
在以下示例中,当对 registry.conf
文件进行更改时,比如通过编辑 ImageContentSourcePolicy
(ICSP) 对象,MCO 不会排空或重启节点,并应用没有进一步操作的更改。
registry.conf 文件更改的节点中断策略示例
apiVersion: operator.openshift.io/v1 kind: MachineConfiguration metadata: name: cluster namespace: openshift-machine-config-operator # ... spec: nodeDisruptionPolicy: files: - actions: - type: None path: /etc/containers/registries.conf