Docker swarm 获取部署状态

问题描述 投票:0回答:5

运行

docker stack deploy
将一些服务部署到 swarm 后,有没有办法以编程方式测试所有容器是否正确启动?

目的是在临时 CI/CD 管道中验证容器是否实际运行并且在启动时没有失败。通过

restart_policy
禁用重新启动。

我正在查看

docker stack services
replicas
列对此有用吗?

$ docker stack services --format "{{.ID}} {{.Replicas}}" my-stack-name
lxoksqmag0qb 0/1
ovqqnya8ato4 0/1
docker docker-swarm
5个回答
8
投票

是的,有很多方法可以做到这一点,但它是手动的,你必须非常熟悉 docker cli。 Docker 没有提供简单的内置方法来验证

docker stack deploy
是否成功。 有一个关于它的未决问题

对我们来说幸运的是,社区创建了一些工具来弥补 docker 在这方面的缺点。一些最值得注意的:

Issuu,sure-deploy的作者,有一篇非常好的文章描述了这个问题


1
投票

通常在 CI/CD 中,我看到每个人都使用 docker 或 docker-compose。容器在 docker 中的运行方式与 docker swarm 中的运行方式相同,即“该容器是否按预期自行工作”。

话虽如此,如果您仍然想使用 swarm 在多层解决方案中进行集成测试,您可以在自动化中做各种事情。请注意,这一切都将在单个节点群上完成,以使测试更容易(docker events 不会从所有节点提取节点事件,因此对于 ci/cd 来说,跟踪单个节点要容易得多):

  1. 有一些东西可以监控 docker events,例如
    docker events -f service=<service-name>
    确保容器不会消亡。
  2. 始终在容器中进行健康检查。它们是确保您的应用程序健康(在容器级别)的第一方法,您将在
    docker events
    中看到它们成功或失败。您可以将它们放入Dockerfiles服务创建命令堆栈/撰写文件中。 这里有一些很好的例子
  3. 您可以将另一个容器附加到同一网络,以使用任务远程一对一测试您的服务。与反向 DNS。这将避免 VIP 并让您与特定副本交谈。
  4. 你可能会从中得到一些东西
    docker inspect <service-id or task-id>

1
投票

另一种解决方案可能是使用

docker service scale
- 在服务收敛到指定数量的副本或超时之前它不会返回。

export STACK=devstack # swarm stack name
export SERVICE_APP=yourservice # service name
export SCALE_APP=2 # desired amount of replicas

docker stack deploy $STACK --with-registry-auth
docker service scale ${STACK}_${SERVICE_APP}=${SCALE_APP}

该方法的一个缺点是您需要提供服务名称及其副本计数(但可以使用

jq
从撰写规范文件中提取这些内容)。

此外,在我的用例中,我必须通过预先添加

timeout
命令来指定超时,即
timeout 60 docker service scale
,因为即使某些容器失败,
docker service scale
也会等待自己的超时,这可能会减慢连续交付管道的速度

参考文献

Docker CLI:docker 服务规模

jq - 命令行 JSON 处理器

GNU Coreutils:超时命令


0
投票

自 v26.0 起,

docker stack deploy
docker stack rm
支持
--detach
标志,如
docker service create
docker service update
https://docs.docker.com/reference/cli/docker/stack/deploy/

默认为 true,但如果将其设置为 false,它将等待堆栈服务收敛。

docker stack deploy --detach false STACK

-1
投票

您可以为每项服务调用此方法。收敛时返回。 (一切都好)

docker service update STACK_SERVICENAME
© www.soinside.com 2019 - 2024. All rights reserved.