技术科普

Kubernetes 时区:Pod 如何设置本地时间

Kubernetes 中的容器与普通 Docker 容器一样,默认通常使用 UTC。Pod 不会自动继承节点时区,需要显式配置。

设置 TZ 环境变量

在 Pod 或 Deployment 的容器配置中加入:

env:
- name: TZ
value: Asia/Shanghai

前提是镜像内有时区数据库。

挂载 zoneinfo

若镜像缺少 tzdata,可从节点挂载:

volumeMounts:
- name: tz
mountPath: /usr/share/zoneinfo
volumes:
- name: tz
hostPath:
path: /usr/share/zoneinfo

也可挂载 /etc/localtime。但 hostPath 会降低可移植性。

CronJob 时区

Kubernetes 1.27 起,CronJob 支持 timeZone 字段:

spec:
timeZone: Asia/Shanghai
schedule: "0 9 * * *"

未设置时按控制器管理器的时区解释,通常是 UTC。

最佳实践

  • 应用逻辑使用 UTC,展示层转换
  • 日志时间统一 UTC 并带时区标识
  • 定时任务明确指定 timeZone
  • 镜像内置 tzdata,避免依赖节点
  • 监控时区变更对调度的影响

Kubernetes 的分布式特性要求时区配置显式、可重复,避免“在我机器上是对的”问题。