k8s cronjob资源执行时区问题处理

2,311 阅读1分钟

现象

线上环境反馈cronjob资源,指定时间运行服务的时候到时间了不会自动运行,但是设定多久运行一次这种情况是可以实现的,就是不能指定时间。

例如:

image.png

排查

这种情况可以想到是不是conjob的时间和我们本地的时间有差别,实际场景中,我们环境使用的服务,在我们构建的时候会把localtime的时区调整为上海的时区,这样的话pod里面的时区就不会有问题,但是这个cronjob这个资源的比较特殊,他是按照我们k8s环境的kube-controller-manager的时区决定的。

官网截图:

image.png 官网说明

处理

进入kube-controller-manager服务可以看到时区默认是UTC的

image.png

修改kube-controller-manager的yaml文件

如果是kubeadm部署的环境直接修改/etc/kubernetes/manifests/kube-controller-manager.yaml文件即可

通过hostpath的方式把本地的localtime挂在到容器中来实现时区的同步

image.png

验证

: 修改完成之后conttroller-manager默认会自动重启,如果没有自动重启可以直接/etc/kubernetes/manifests/kube-controller-manager.yaml这个yaml文件mv走,过滤进程,等停止了,然后再mv回来,可以起到重启的作用,然后再次进入容器查看时区,发现时区正常了

image.png

这个时候我们使用cronjob设定具体时间运行就可以实现了