Docker Swarm 滚动更新服务实战教程

Docker Swarm 滚动更新服务实战教程

【免费下载链接】docs Source repo for Docker's Documentation 【免费下载链接】docs 项目地址: https://gitcode.com/gh_mirrors/docs3/docs

前言

在现代分布式系统中,服务的平滑升级是保证系统高可用的关键能力。Docker Swarm 作为 Docker 官方的集群管理工具,提供了强大的滚动更新(rolling update)功能,允许我们在不中断服务的情况下逐步更新服务容器。本文将深入讲解如何在 Docker Swarm 集群中实施滚动更新策略。

滚动更新基础概念

滚动更新是一种渐进式的部署策略,它通过以下方式工作:

  1. 逐个或分批替换服务中的容器实例
  2. 确保在更新过程中始终有足够数量的健康实例在运行
  3. 自动处理更新失败的情况

这种策略特别适合生产环境,因为它最小化了服务中断的风险。

实战:Redis 服务滚动更新

初始部署

首先,我们需要部署一个 Redis 服务作为示例:

docker service create \
  --replicas 3 \
  --name redis \
  --update-delay 10s \
  redis:7.4.0

这个命令创建了一个包含 3 个副本的 Redis 服务,并设置了 10 秒的更新延迟。

关键参数解析

  • --replicas 3:指定服务运行 3 个副本
  • --update-delay 10s:设置每次更新之间的延迟时间为 10 秒
  • redis:7.4.0:指定初始使用的 Redis 镜像版本

查看服务详情

使用以下命令可以查看服务的详细配置:

docker service inspect --pretty redis

输出将显示服务的当前状态,包括更新策略配置:

UpdateConfig:
 Parallelism: 1
 Delay: 10s

默认情况下,Swarm 会:

  • 一次更新 1 个任务(可通过 --update-parallelism 调整)
  • 每个更新间隔 10 秒
  • 如果任务更新失败,整个更新过程会暂停

执行滚动更新

要将 Redis 从 7.4.0 升级到 7.4.1 版本,执行:

docker service update --image redis:7.4.1 redis

Swarm 将按照以下流程执行更新:

  1. 停止第一个任务
  2. 为停止的任务调度更新
  3. 启动更新后的容器
  4. 如果更新成功,等待 10 秒后继续下一个任务
  5. 如果任何任务更新失败,暂停整个更新过程

监控更新过程

使用以下命令可以实时观察更新进度:

docker service ps redis

输出会显示新旧版本的容器交替出现,直到所有容器都更新完毕:

NAME                IMAGE        NODE     CURRENT STATE
redis.1             redis:7.4.1  worker1  Running
\_ redis.1         redis:7.4.0  worker2  Shutdown
redis.2             redis:7.4.1  worker2  Running
\_ redis.2         redis:7.4.0  worker1  Shutdown
...

处理更新失败

如果更新过程中出现失败,Swarm 会自动暂停更新。此时服务状态会显示为"paused":

Update status:
 State:      paused
 Message:    update paused due to failure...

要恢复暂停的更新,只需重新执行更新命令:

docker service update redis

高级滚动更新策略

除了基本配置外,Swarm 还提供了更多精细化的更新控制:

  1. 并行更新:通过 --update-parallelism 设置同时更新的任务数量

    docker service update --update-parallelism 2 redis
    
  2. 失败处理:通过 --update-failure-action 指定失败后的行为

    • pause(默认):暂停更新
    • continue:继续更新其他任务
    • rollback:自动回滚到前一版本
  3. 健康检查:结合健康检查确保新版本容器真正可用后才继续更新

最佳实践建议

  1. 生产环境建议

    • 始终设置合理的 update-delay,给新容器足够的启动和预热时间
    • 对于关键服务,先从少量并行更新开始(如 parallelism=1)
    • 在更新前确保新版本镜像已经过充分测试
  2. 测试环境验证

    • 先在测试环境验证更新策略
    • 使用 docker service scale 调整副本数,模拟不同负载情况下的更新
  3. 监控与回滚

    • 密切监控更新过程中的服务指标
    • 准备好手动回滚方案(指定旧版本镜像再次更新)

总结

Docker Swarm 的滚动更新功能为服务升级提供了安全可靠的机制。通过合理配置更新策略,我们可以在保证服务连续性的前提下完成应用部署。关键是要根据服务特性和业务需求,找到平衡更新速度与稳定性的最佳配置。

掌握这些技巧后,你将能够自信地在生产环境中实施服务更新,为用户提供不间断的高质量服务。

【免费下载链接】docs Source repo for Docker's Documentation 【免费下载链接】docs 项目地址: https://gitcode.com/gh_mirrors/docs3/docs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值