Docker群集模式负载均衡

我build立了一个docker群模式集群,有两个经理和一个工人。 这是在Centos 7.他们在机器dkr1,dkr2,dkr3。 dkr3是工人。

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

群体处于“全球”模式。 那就是每台机器一个副本。 我的升级方法是耗尽节点,停止守护进程,yum升级,启动守护进程。 (请注意,这消除了我的守护进程configuration设置ExecStart = …! 如果升级,请小心。

我们的客户端/ ESB命中dkr2,它在群集上进行负载平衡。 dkr2这是领导者。 dkr1是'可达'

我放下了dkr3。 没有问题。 升级docker。 把它带回来。 没有把工人倒下的停机时间。

带来了dkr1。 起初没有问题。 当我把它拿下来的时候还在工作。 升级docker。 把它带回来。 但在创业期间,它已经404了。 一旦起来,这是确定的。

带来了dkr2。 我实际上没有logging那时发生的事情,对不起。

无论如何,当我的应用程序在dkr1上启动时,它已经404了,因为服务器还没有启动。

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

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

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

Dockerfile中用于检查端点是否返回200 OK的healthcheck行示例如下: HEALTHCHECK CMD curl -f 'http://localhost:8443/somepath' || exit 1 HEALTHCHECK CMD curl -f 'http://localhost:8443/somepath' || exit 1

如果您不能修改Dockerfile,那么您还可以在部署时使用撰写文件healthcheck格式手动指定健康检查 。

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