Kubernetes 管理的容器,如何做到时间同步? (非时区) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
UnknownR
V2EX    Docker

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

  •  
  •   UnknownR 2020-12-11 09:54:19 +08:00 3866 次点击
    这是一个创建于 1834 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前用 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 里定义的内容,这个是为什么呢?

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

    所以你需要在主机上启动一个 NTP 服务,就能够保证所有的容器时间统一。
    monsterxx03
        4
    monsterxx03  
       2020-12-11 10:18:43 +08:00   1
    时间是内核控制的, 容器都共享内核, 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
        5
    herealways  
       2020-12-11 10:20:13 +08:00   2
    我记得在 time namespace 出现之前,容器内的时间是和 host 同步的,所以按道理只需要在 host 上行 ntp 服务同步时间即可,有误的话请各位大佬指出

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

    而参数可以通过 pod 的 args 值来传递
    比如脚本是这样的 jar -jar app.jar $@
    julyclyde
        9
    julyclyde  
       2020-12-12 19:40:58 +08:00
    换句话说,现在的人们连服务器上需要做时间同步都还没学,就已经在做 k8s 了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2463 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 01:23 PVG 09:23 LAX 17:23 JFK 20:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86