第 3 章 使用节点中断策略最小化对机器配置更改的中断


默认情况下,当您对 MachineConfig 对象中的字段进行某些更改时,Machine Config Operator (MCO) 会排空并重启与该机器配置关联的节点。但是,您可以创建一个节点中断策略,在策略中定义一组对某些 Ignition 配置对象的更改,它们对负载只有非常少的(或没有)中断影响。

节点中断策略允许您定义哪些配置改变会对集群造成中断,哪些改变不会造成中断。这可让您对在集群中进行了小的集群配置变化时减少节点停机的时间。要配置策略,您可以修改位于 openshift-machine-config-operator 命名空间中的 MachineConfiguration 对象。请参阅以下 MachineConfiguration 对象中的节点中断策略示例。

注意

无论任何节点中断策略是什么,对机器配置的更改始终需要重启。如需更多信息,请参阅关于 Machine Config Operator

创建节点中断策略后,MCO 会验证策略来搜索文件中潜在的问题,如格式化问题。然后,MCO 将策略与集群默认值合并,并为机器配置中的 status.nodeDisruptionPolicyStatus 字段填充在将来的机器配置中要执行的操作。策略中的配置总是覆盖集群默认值。

重要

MCO 不会验证节点中断策略是否能够成功应用更改。因此,您需要确保节点中断策略的准确性。

例如,您可以配置节点中断策略,以便 sudo 配置不需要节点排空和重新引导。或者,您可以配置集群,以便对 sshd 进行的更新仅会重新加载该服务。

您可以在对以下 Ignition 配置对象进行更改时控制 MCO 的行为:

  • 配置文件 :在 /var/etc 目录中添加了文件或更新了其中的文件。您可以为目录或特定目录的路径的特定文件配置策略。对于路径,对该目录中的任何文件的更改或添加都会触发策略。

    注意

    如果文件包含多个策略,则仅应用与该文件最匹配的策略。

    例如,如果您有一个 /etc/ 目录的策略,一个 /etc/pki/ 目录的策略,则对 /etc/pki/tls/certs/ca-bundle.crt 文件的更改将会应用 etc/pki 策略。

  • 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 操作,用户无法设置。
注意
  • RebootNone 操作不能用于任何其他操作,因为 RebootNone 操作会覆盖其他操作。
  • 操作会按照节点中断策略列表中设置的顺序应用。
  • 如果您进行了其他机器配置更改,它们需要重新引导节点或对节点有其他的中断影响,则重新引导会取代节点中断策略操作。

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
      - actions:
        - reload:
            serviceName: crio.service
          type: Reload
        path: /etc/containers/registries.d
      - actions:
        - type: None
        path: /etc/nmstate/openshift
      - actions:
        - restart:
            serviceName: coreos-update-ca-trust.service
          type: Restart
        - restart:
            serviceName: crio.service
          type: Restart
        path: /etc/pki/ca-trust/source/anchors/openshift-config-user-ca-bundle.crt
      sshkey:
        actions:
        - type: None
  observedGeneration: 9

在以下示例中,当对 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。如果在 /var/run 目录中添加或删除文件,MCO 会应用没有进一步操作的更改。

配置文件更改的节点中断策略示例

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
    - actions:
      - type: None
      path: /var/run

在以下示例中,当对 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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.