现象
线上环境反馈cronjob资源,指定时间运行服务的时候到时间了不会自动运行,但是设定多久运行一次这种情况是可以实现的,就是不能指定时间。
例如:
排查
这种情况可以想到是不是conjob的时间和我们本地的时间有差别,实际场景中,我们环境使用的服务,在我们构建的时候会把localtime的时区调整为上海的时区,这样的话pod里面的时区就不会有问题,但是这个cronjob这个资源的比较特殊,他是按照我们k8s环境的kube-controller-manager的时区决定的。
官网截图:
处理
进入kube-controller-manager服务可以看到时区默认是UTC的
修改kube-controller-manager的yaml文件
如果是kubeadm部署的环境直接修改/etc/kubernetes/manifests/kube-controller-manager.yaml文件即可
通过hostpath的方式把本地的localtime挂在到容器中来实现时区的同步
验证
注: 修改完成之后conttroller-manager默认会自动重启,如果没有自动重启可以直接/etc/kubernetes/manifests/kube-controller-manager.yaml这个yaml文件mv走,过滤进程,等停止了,然后再mv回来,可以起到重启的作用,然后再次进入容器查看时区,发现时区正常了
这个时候我们使用cronjob设定具体时间运行就可以实现了