在Kubernetes集群运行的容器默认会使用UTC时间,即与北京时间会有8小时的时差,下面将给出几种方案解决容器与宿主机时区不一致问题。
通过volumes将时区文件挂到Pod中
apiVersion: v1 kind: Pod metadata: name: busybox spec: containers: - name: busybox image: busybox imagePullPolicy: IfNotPresent command: - sleep - "3600" volumeMounts: - name: timezone mountPath: /etc/localtime volumes: - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai
|
查看容器的时区
[root@master k8s-list]# kubectl exec -it busybox -- date Tue Apr 13 10:59:40 CST 2021
|
通过定制Dockfile修改时区
vim Dockerfile
FROM busybox RUN rm -rf /etc/localtime COPY localtime /etc/localtime
|
查看容器的时区
[root@master k8s-list]# docker exec -it busybox sh / # date Tue Apr 13 11:18:06 CST 2021
|
通过环境变量修改时区
并不是适用所有容器
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 env: - name: TZ value: Asia/Shanghai
|
查看容器的时区
[root@master k8s-list]# kubectl exec -it nginx -- date Tue Apr 13 11:28:50 CST 2021
|
通过拷贝时区文件到容器
还可以通过拷贝时区文件到容器中来修改时区,但是这种方式有个不好的地方,就是删除容器重新创建,还需要我们再次进入容器内修改
# 拷贝宿主机时区文件到容器 kubectl cp /usr/share/zoneinfo/Asia/Shanghai busybox:/etc/localtime [root@master k8s-list]# kubectl exec -it busybox -- date Tue Apr 13 15:06:03 CST 2021
|
还可以实现批量修改
# 批量修改命名空间下的所有pod的时区 for i in $(kubectl get pods |grep -v 'NAME' |awk '{print $1}');do kubectl cp /usr/share/zoneinfo/Asia/Shanghai $i:/etc/localtime;done [root@master k8s-list]# kubectl exec -it nfs-client-provisioner-5f4d4ddf87-9b69q -- date Tue Apr 13 15:10:39 CST 2021 [root@master k8s-list]# kubectl exec -it nginx -- date Tue Apr 13 15:10:42 CST 2021 [root@master k8s-list]# kubectl exec -it busybox -- date Tue Apr 13 15:10:47 CST 2021
|