Kubernetes 管理的容器,如何做到时间同步? (非时区)

2020-12-11 09:54:19 +08:00
 UnknownR

目前用 k8s 管理着一些业务容器(用的 Docker),因为有计时类的需求所以时间和时区一定要同步,时区的问题已经解决,在 dockerfile 里 RUN 创建 /etc/localtime 的软连接即可,但是时间的问题一直没解决,求 v 站的大神们,有什么好的解决方案吗?

能想到的解决方案是使用 ntp 来同步,为了控制镜像的大小,几个包都是基于 debianslim 制作,默认没有 ntp,没有 systemd,只有 service,service 没法设置开启自动启动,手动安装 systemd 的话会提示无法运行,所以现在是安装好了 ntp,但是只能在容器启动时开启,比如在 dockerfile 里启动:

CMD service ntp start
or
ENTRYPOINT service ntp start

但是如果想在这之上再运行其他进行,比如我 docker run 后面跟上 bash,用 CMD 的话原来的 ntp 启动命令会被覆盖,镜像可以 run 但是 ntp 没起来;用 ENTRYPOINT 的话 ntp 可以启动但是很快就退出了,请问有什么办法可以既跑 ntp service 又跑自己的进程?当然我知道这不太符合容器的标准 同时也注意到一个现象,以前 dockerfile 里用 ENTRYPOINT 的镜像,在 k8s 里通过 deployment 创建时,deployment 里定义的 commond 和 args 会覆盖掉 ENTRYPOINT,运行 k8s 里定义的内容,这个是为什么呢?

3226 次点击
所在节点    Docker
9 条回复
wbzt
2020-12-11 10:06:34 +08:00
写个满足你执行需要的脚本 my.sh ,然后打到镜像里,Dockerfile 里 ENTRYPOINT["/my.sh"]
zy445566
2020-12-11 10:09:16 +08:00
开个微服务专门用于其它容器来同步时间不就好了,所有的服务启动后都调用一下同步时间接口,然后订阅服务使得时间改变的时候通知其它服务
asilin
2020-12-11 10:15:27 +08:00
解决方向偏了,所有容器的系统时间都统一来源于内核(除非用的是支持时间命名空间的新内核,如 5.6+)。

所以你需要在主机上启动一个 NTP 服务,就能够保证所有的容器时间统一。
monsterxx03
2020-12-11 10:18:43 +08:00
时间是内核控制的, 容器都共享内核, host 上装 ntp 容器内部就是同步的.

容器内跑多个 service(很不推荐这么搞): https://docs.docker.com/config/containers/multi-service_container/

覆盖 ENTRYPOINT 那个是 expected behavior: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes

写之前搜一下, 答案都在结果前三条
herealways
2020-12-11 10:20:13 +08:00
我记得在 time namespace 出现之前,容器内的时间是和 host 同步的,所以按道理只需要在 host 上运行 ntp 服务同步时间即可,有误的话请各位大佬指出

关于 time namespace: https://lwn.net/Articles/766089/
UnknownR
2020-12-11 10:21:28 +08:00
@asilin
@monsterxx03
非常感谢!之前思路确实跑偏了,想着去容器内做时间同步
UnknownR
2020-12-11 10:23:52 +08:00
@wbzt 这个可能不太行,因为业务的需求,我们需要把镜像给到客户,具体的运行参数由客户填写,打到镜像里那就不能编辑了
wbzt
2020-12-11 10:49:19 +08:00
@UnknownR 解决时间问题,上面大佬说的已经解决了

而参数可以通过 pod 的 args 值来传递
比如脚本是这样的 jar -jar app.jar $@
julyclyde
2020-12-12 19:40:58 +08:00
换句话说,现在的人们连服务器上需要做时间同步都还没学,就已经在做 k8s 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/734359

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX