技术科普
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 的分布式特性要求时区配置显式、可重复,避免“在我机器上是对的”问题。