设置节点时区

集群中的所有节点都应使用统一的时区运行,以便平台日志、审计记录和监控时间线与 operator 的本地时钟保持一致。在 Alauda OS 节点上,应使用 MachineConfig 对象设置时区 —— 切勿登录节点逐一进行更改。

时区不能作为文件分发:/etc/localtime 是一个符号链接,而机器配置管理文件内容、systemd 单元和 SSH 公钥 —— 不管理符号链接。因此,每个节点上都会运行一个 oneshot systemd 单元来执行 timedatectl set-timezone。

首先配置节点干扰策略

如果没有节点干扰策略,systemd 单元更改将回退到默认操作 —— 重启节点 —— 因此应用下面的 MachineConfig 将导致池中的每个节点依次执行清空并重启。请先配置该策略,确认其已生效,然后再应用 MachineConfig。

  1. 将 set-timezone.service 添加到集群范围的 MachineConfiguration 单例 cluster 的 nodeDisruptionPolicy.units 列表中:

    apiVersion: machineconfiguration.alauda.io/v1alpha1
    kind: MachineConfiguration
    metadata:
      name: cluster
    spec:
      nodeDisruptionPolicy:
        units:
          - name: set-timezone.service
            actions:
              - type: DaemonReload
              - type: Restart
                restart:
                  serviceName: set-timezone.service
    WARNING

    cluster 是一个单例,其中可能已经包含针对其他单元或文件的策略 —— 例如配置 Chrony 时间服务中的 /etc/chrony.conf 条目。 请追加到 units 列表中;不要替换现有策略。 未列出的任何单元都会回退到默认的重启操作。

  2. 在继续之前,确认策略已处于活动状态:

    kubectl get machineconfiguration cluster \
      -o jsonpath='{.status.nodeDisruptionPolicyStatus}' | grep set-timezone

应用时区

为每个角色创建一个 MachineConfig —— 这两个对象的差异仅在于 metadata.name 和角色标签。将 Asia/Shanghai 替换为约定的 tz 数据库名称;不要直接使用示例值。

apiVersion: machineconfiguration.alauda.io/v1alpha1
kind: MachineConfig
metadata:
  name: 99-worker-timezone # name the control plane copy 99-master-timezone
  labels:
    machineconfiguration.alauda.io/role: worker # and label it master
spec:
  config:
    ignition:
      version: 3.4.0
    systemd:
      units:
        - name: set-timezone.service
          enabled: true
          contents: |
            [Unit]
            Description=Set node timezone
            After=multi-user.target

            [Service]
            Type=oneshot
            ExecStart=/usr/bin/timedatectl set-timezone Asia/Shanghai
            RemainAfterExit=yes

            [Install]
            WantedBy=multi-user.target

验证

kubectl get machineconfigpool

等待每个池报告 UPDATED=True 和 DEGRADED=False,并确认没有节点经历意外的 drain 或重启。然后抽查节点:

timedatectl                             # time zone and NTP state
systemctl status set-timezone.service   # ran once, exited successfully

此时,平台日志、审计记录和监控时间线应与配置的时区一致。

  • 安装时的时区是主机的前置条件 — 请参阅裸金属页面中的 主机时钟和时区要求。 本页介绍如何在运行中的集群上统一或更改时区。
  • 时间同步是另一个独立事项,可通过 配置 Chrony 时间服务进行配置。