0

我建立了一个docker swarm模式群集,有两个管理员和一个worker。这是在Centos 7上。它们在机器dkr1,dkr2,dkr3上。 dkr3是工人。Docker群集模式负载均衡

我前几天升级到v1.13,并希望零宕机。但它没有像预期的那样工作。我试图找出正确的方法来做到这一点,因为这是拥有集群的主要目标之一。

群体处于'全局'模式。也就是说,每台机器一个副本。我的升级方法是消耗节点,停止守护进程,yum升级,启动守护进程。 (请注意,这消灭了我的守护程序配置设置ExecStart = ...!,如果你仔细升级。

我们的客户/ ESB命中dkr2一提,其负载均衡魔术在群。 dkr2是领导者。 dkr1'可到达'

我放下了dkr3。没有问题。升级码头。带回了它。没有停下来打倒工人。

带入dkr1。起初没有问题。当我把它放下时仍然在工作。升级码头。带回了它。 但在启动期间,它404'ed。一旦起来,这是确定的。

带来了dkr2。我没有真正记录那时发生了什么,对不起。

无论如何,当我的应用程序在dkr1上启动时,它已经404'ed,因为服务器尚未启动。

任何想法我可能做错了什么?我想我需要进行某种健康检查,因为容器显然是好的,但服务器还没有响应。那就是当我停工的时候。

回答

1

你是对的 - 你需要指定一个运行状况检查,以便在容器内运行你的应用程序,以确保它已准备就绪。在这个healtcheck通过之前,你的容器将不会收到流量。

简单的卷曲到端点应该就足够了。使用Dockerfile中的Healthcheck标志指定要执行的健康检查。

在Dockerfile健康检查线的一个例子,以检查是否有终端返回200 OK是: HEALTHCHECK CMD curl -f 'http://localhost:8443/somepath' || exit 1

如果您不能修改Dockerfile,那么你也可以手动在部署时注明您的健康检查使用compose file healthcheck format

如果这也是不可能的,并且您需要更新正在运行的服务,则可以执行service update并使用health标志的组合来指定您的健康检查。