一般国内引用的基础镜像时区都是 UTC 时区,在此基础上,如果去容器查看日志的话就会发现和本地时间对不上,会导致一些问题出现,比如输出的日志时间和当前不一致,所以一般都会把操作系统或容器里的时区替换为 Shanghai。
修改Pod时区有两种方式:
- 修改镜像中的时区配置文件
- 将时区配置文件创建为 ConfigMap 然后挂载到容器中
方案一:修改镜像中的时区配置文件
修改前查看时区:
$ docker run -d --name=test_date nginx$ docker exec -it test_date date
Wed Dec 6 09:16:58 UTC 2023$ date
2023年12月 6日 星期三 17时17分07秒 CST
创建 Dockerfile 文件
$ vim Dockerfile
FROM nginx
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
$ docker build -t nginx_test_date -f Dockerfile .$ docker run -d --name=nginx_test_date nginx_test_date
9a9f51208801e4db73671175f7fb812ceae8148b6e8f90999cb2a4cbb2d14e96$ docker exec -it nginx_test_date date
Wed Dec 6 17:23:37 CST 2023$ date
2023年12月 6日 星期三 17时23分52秒 CST
方案二:将时区配置文件创建为 ConfigMap 然后挂载到容器中
创建 ConfigMap
➜ kubectl create configmap shanghai --from-file=/usr/share/zoneinfo/Asia/Shanghai
创建 nginx.yaml 文件
$ vim nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentvolumeMounts:- name: shanghaimountPath: "/etc/localtime"subPath: "Shanghai"volumes:- name: shanghaiconfigMap:name: shanghai
测试时区。
$ kubectl apply -f nginx.yaml
deployment.apps/nginx created$ kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-58b89cf8d-gndj6 1/1 Running 0 2s$ kubectl exec -it nginx-58b89cf8d-gndj6 date
Wed Dec 6 17:46:53 CST 2023 #与当前时间一致$ date
2023年12月 6日 星期三 17时46分58秒 CST