默认情况下,K8S集群里管控的Pod内部时区是UTC0时,跟我们实际所在时区不一致,会导致日志记录等方面存在问题。所以需要使容器内部与宿主机(node节点)的时间保持一致。想要解该问题主要有以下几种思路。
Docker层面时区设置
第一种思路是从docker层面来完成时区设置,其有两种实现方式,分别是通过环境变量以及挂载主机文件方式来完成。以下方式均需保证当前宿主机的时区配置正确。
1、设置容器的时区环境变量
通过在容器启动时,设置环境变量TZ=Asia/Shanghai
的方式来实现:
docker run --name=centos -e "TZ=Asia/Shanghai" centos
2、挂载宿主机的时区文件到容器内部
通过在容器启动时,挂载时区文件/etc/localtime
为数据卷的方式来实现:
docker run --name=centos -v /etc/localtime:/etc/localtime:ro centos
另外如果是自动打包的镜像,可在dockerfile文件里定义好时区环境变量,生成新的镜像。
K8S层面时区设置
在K8S集群中,也可以参照docker的方式来设置时区。
1、设置环境变量
apiVersion: v1
kind: Pod
metadata:
name: pod-env-tz
spec:
containers:
- name: mynginx
image: nginx:latest
imagePullPolicy: IfNotPresent
env:
- name: TZ
value: Asia/Shan