0

我已经建立了一个 docker swarm 模式集群,有两个经理和一个工人。这是在 Centos 7 上。它们在机器 dkr1、dkr2、dkr3 上。dkr3 是工人。

前几天我正在升级到 v1.13,并且想要零停机时间。但它并没有完全按预期工作。我正在尝试找出正确的方法,因为这是拥有集群的主要目标之一。

群处于“全局”模式。也就是说,每台机器一个副本。我的升级方法是排空节点,停止守护进程,yum 升级,启动守护进程。(请注意,这会清除我的 ExecStart=... 的守护程序配置设置! 升级时要小心。

我们的客户端/ESB 访问 dkr2,它在 swarm 上执行负载平衡魔法。dkr2 是领导者。dkr1 是“可达的”

我放下了dkr3。没有问题。升级的码头工人。把它带回来了。没有因打倒工人而造成的停机时间。

打倒了dkr1。一开始没有问题。当我把它放下时还在工作。升级的码头工人。把它带回来了。但在启动过程中,它 404'ed。一上来就OK了。

下架了dkr2。我没有真正记录当时发生的事情,对不起。

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

知道我可能做错了什么吗?我想我需要某种健康检查,因为容器显然没问题,但服务器还没有响应。所以那是我停机的时候。

4

1 回答 1

1

你是对的——你需要指定一个健康检查来在容器内对你的应用程序运行,以确保它准备好了。在此运行状况检查通过之前,您的容器将不会接收流量。

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

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

如果您无法修改 Dockerfile,那么您还可以在部署时使用compose file healthcheck format手动指定您的健康检查。

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

于 2017-09-12T13:12:23.863 回答