问题描述
kubernetes部署的pod与北京时间相差8小时。
问题原因
在kubernetes集群中运行的容器默认会使用UTC时间,即与北京时间会有8小时时差。而有些分布式系统对于时间极为敏感,不允许出现时间误差。出现这种情况往往是因为使用dockerhub等仓库上的镜像导致,如果用户自己制作镜像会修改时间。
解决方案
通过环境变量的方式修改时间。
部署nginx容器用于测试
1.准备nginx deployment文件
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
2.部署nginx
kubectl apply -f xxx.yaml
3.查看pod所在宿主机,并查看宿主机时间
kubectl get pod -owide |grep nginx
登陆pod所在宿主机查看时间
ssh hostip
date
4.查看pod时间
kubectl exec -it -n default <podname> -c nginx -- date
5.修改nginx deployment
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
env:
- name: TZ
value: Asia/Shanghai
6.重新部署nginx,并查看pod时间
kubectl apply -f xxx.yaml
kubectl exec -it -n default <podname> -c nginx -- date