首页 > 解决方案 > 在 Docker Swarm 中通过运行状况检查滚动更新服务

问题描述

我目前正在尝试在 Docker Swarm 中部署 Kafka 集群。Kafka 不适用于 Swarm 的副本功能,因为每个 Kafka 代理(节点)都需要单独配置和可访问(即前面没有负载均衡器)。因此,每个代理都配置为具有replicas=1的单独服务,例如kafka1、kafka2kafka3服务。

时不时地,需要通过docker stack deploy更改 Kafka 代理的配置或映像(由人员或 CI/CD 管道完成)。然后 Swarm 将同时重新创建所有容器,因此 Kafka 集群暂时不可用,这对于应该运行 24/7 的关键基础设施是不可接受的。我什至还没有提到 Kafka 下的 Zookeeper 集群,这同样适用。

期望的行为是 Swarm 重新创建kafka1服务的容器,等到它完全启动并与其他代理同步(所有主题分区都同步),然后 Swarm 才重新启动kafka2服务等等。

我想我可以在 Kafka Docker 映像中构建一个健康检查,当 Kafka 代理完全同步时,它会告诉 Docker 引擎。但是如何让 Swarm 执行相当于跨服务边界的滚动更新呢?它忽略了Docker Compose 知道的depends_on设置,并且滚动更新策略仅适用于服务副本。任何想法?

标签: dockerapache-kafkadocker-composedocker-swarm

解决方案


推荐阅读