我已经建立了一个docker swarm模式集群,有两个管理员和一个worker。这是在Centos 7上。它们在机器dkr1,dkr2,dkr3上。 dkr3是工人。
前几天我升级到v1.13,并希望零停机。但它没有完全按预期工作。我正在尝试找出正确的方法,因为这是拥有集群的主要目标之一。
群体处于“全局”模式。也就是说,每台机器一个副本。我的升级方法是耗尽节点,停止守护进程,升级yum,启动守护进程。 (请注意,这会消除我的ExecStart守护程序配置设置= ...!升级时要小心。)
我们的客户端/ ESB命中dkr2,它在群体上实现其负载平衡魔力。 dkr2是领导者。 dkr1'可达'
我放下了dkr3。没有问题。升级的码头工人。把它带回来了。没有停工的工人停工。
带来了dkr1。一开始没问题。当我把它放下时仍在工作。升级的码头工人。把它带回来了。 但在启动期间,它已经完成了404。一旦上来,就可以了。
带来了dkr2。我当然没记录发生的事情,抱歉。
无论如何,当我的应用程序在dkr1上启动时,它已经404,因为服务器还没有启动。
知道我可能做错了什么吗?我想我需要某种健康检查,因为容器显然没问题,但服务器还没有响应。这就是我停工的时候。
答案 0 :(得分:1)
您是对的 - 您需要指定一个运行状况检查,以便在容器内针对您的应用运行,以确保它已准备就绪。在此健康检查结束之前,您的容器将无法获得流量。
端点的简单卷曲就足够了。使用Dockerfile中的Healthcheck标志指定要执行的运行状况检查。
Dockerfile中用于检查端点是否返回200 OK的healthcheck行的示例是:
HEALTHCHECK CMD curl -f 'http://localhost:8443/somepath' || exit 1
如果您无法修改Dockerfile,那么您还可以使用compose file healthcheck format在部署时手动指定您的健康检查。
如果这也不可能,并且您需要更新正在运行的服务,则可以执行service update并使用health
标志的组合来指定您的健康检查。