管理节点配置

你可以使用本节中描述的任务来创建 MachineConfig 对象,以修改节点上的文件、systemd 单元和 SSH 公钥,并恢复发生配置漂移的节点。

MachineConfig 支持 Ignition 规范版本 3.4。所有 MachineConfig 对象都必须按照此版本创建。

在某些情况下,节点上的配置可能与当前通过 MachineConfig 应用的配置不完全一致。这种情况称为配置漂移。machine configuration daemon 会定期检查节点配置是否发生漂移。如果检测到漂移,节点会被标记为 Degraded,并保持该状态,直到管理员恢复预期的配置。

以下示例演示如何使用 MachineConfig 对象管理节点配置。

配置 Chrony 时间服务

要配置 Chrony 时间同步服务(chronyd)并指定 NTP 服务器及相关设置,可以通过 MachineConfig 对象更新目标节点上的 chrony.conf 文件。

  1. 首先,创建一个包含所需 Chrony 配置的临时文件:

    chrony.conf
    server 0.centos.pool.ntp.org iburst
    server 1.centos.pool.ntp.org iburst
    makestep 1.0 3
    rtcsync
    logdir /var/log/chrony
  2. 然后,将文件内容进行 base64 编码:

    base64 -w0 chrony.conf
  3. 创建一个名为 99-worker-chronyMachineConfig 对象。在 .spec.config.storage.files[0].contents.source 字段中,以 data:text/plain;base64,<encoded-content> 的格式插入 base64 编码后的字符串:

    apiVersion: machineconfiguration.alauda.io/v1alpha1
    kind: MachineConfig
    metadata:
      name: 99-worker-chrony
      labels:
        machineconfiguration.alauda.io/role: worker
    spec:
      config:
        ignition:
          version: 3.4.0
        storage:
          files:
            - path: /etc/chrony.conf
              mode: 0o644
              contents:
                source: 'data:text/plain;base64,c2VydmVyIDAuY2VudG9zLnBvb2wubnRwLm9yZyBpYnVyc3QKc2VydmVyIDEuY2VudG9zLnBvb2wubnRwLm9yZyBpYnVyc3QKbWFrZXN0ZXAgMS4wIDMKcnRjc3luYwpsb2dkaXIgL3Zhci9sb2cvY2hyb255Cg=='

    此配置会创建一个 MachineConfig 对象,将自定义的 chrony.conf 文件应用到与 worker machine configuration pool 关联的节点。该文件将写入每个节点上的 /etc/chrony.conf,文件权限设置为 0o644

禁用 Chrony 时间服务

要在具有特定角色的节点上禁用 Chrony 时间同步服务,可以创建一个覆盖 systemd 单元定义并禁用该服务的 MachineConfig 对象。

示例配置:

apiVersion: machineconfiguration.alauda.io/v1alpha1
kind: MachineConfig
metadata:
  name: 99-worker-disable-chrony
  labels:
    machineconfiguration.alauda.io/role: worker
spec:
  config:
    ignition:
      version: 3.4.0
    systemd:
      units:
        - name: chronyd.service
          enabled: false
          contents: |
            [Unit]
            Description=NTP client/server
            Documentation=man:chronyd(8) man:chrony.conf(5)
            After=ntpdate.service sntp.service ntpd.service
            Conflicts=ntpd.service systemd-timesyncd.service
            ConditionCapability=CAP_SYS_TIME

            [Service]
            Type=forking
            PIDFile=/run/chrony/chronyd.pid
            EnvironmentFile=-/etc/sysconfig/chronyd
            ExecStart=/usr/sbin/chronyd $OPTIONS
            ExecStartPost=/usr/libexec/chrony-helper update-daemon
            PrivateTmp=yes
            ProtectHome=yes
            ProtectSystem=full

            [Install]
            WantedBy=multi-user.target

此配置会将自定义版本的 chronyd.service 单元文件推送到 worker machine configuration pool 中的节点。该服务会被显式禁用。配置应用并且节点重启后,Chrony 服务将不再自动启动。

boot 用户配置 SSH 公钥

machine configuration 系统允许你为受管节点上的 boot 用户配置 SSH 公钥。不支持其他用户账户的配置。请注意,machine configuration 不会自动创建用户或组——在应用配置之前,你必须确保节点上已存在 boot 用户和组。

示例配置:

apiVersion: machineconfiguration.alauda.io/v1alpha1
kind: MachineConfig
metadata:
  name: 99-worker-ssh
  labels:
    machineconfiguration.alauda.io/role: worker
spec:
  config:
    ignition:
      version: 3.4.0
    passwd:
      users:
        - user: boot
          sshAuthorizedKeys:
            - ssh-rsa <ssh-public-key>

MachineConfig 会将指定的 SSH 密钥安装到 worker machine configuration pool 中节点的 /home/boot/.ssh/authorized_keys 文件中。

从配置漂移中恢复

如果节点的配置与其分配的 MachineConfig 不一致,它将被标记为 Degraded。在这种状态下,节点仍可继续运行,但在问题解决之前无法接收进一步的配置更新。

要将节点从该降级状态恢复,有两种方式:

  1. 手动回退配置 你可以手动调整节点上的文件和权限,使其与分配的 MachineConfig 中指定的内容完全一致。系统会检测到修正并清除降级状态。

  2. 强制重新应用配置 在受影响节点的 /run/machine-config-daemon-force 处创建一个空文件。machine configuration daemon 会检测到该触发器,重新应用当前 MachineConfig,删除触发文件,并重启节点。重启后,节点将从 Degraded 转变为 Done