Docker Swarm 滚动更新服务实战教程
【免费下载链接】docs Source repo for Docker's Documentation 项目地址: https://gitcode.com/gh_mirrors/docs3/docs
前言
在现代分布式系统中,服务的平滑升级是保证系统高可用的关键能力。Docker Swarm 作为 Docker 官方的集群管理工具,提供了强大的滚动更新(rolling update)功能,允许我们在不中断服务的情况下逐步更新服务容器。本文将深入讲解如何在 Docker Swarm 集群中实施滚动更新策略。
滚动更新基础概念
滚动更新是一种渐进式的部署策略,它通过以下方式工作:
- 逐个或分批替换服务中的容器实例
- 确保在更新过程中始终有足够数量的健康实例在运行
- 自动处理更新失败的情况
这种策略特别适合生产环境,因为它最小化了服务中断的风险。
实战: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 将按照以下流程执行更新:
- 停止第一个任务
- 为停止的任务调度更新
- 启动更新后的容器
- 如果更新成功,等待 10 秒后继续下一个任务
- 如果任何任务更新失败,暂停整个更新过程
监控更新过程
使用以下命令可以实时观察更新进度:
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 还提供了更多精细化的更新控制:
-
并行更新:通过
--update-parallelism设置同时更新的任务数量docker service update --update-parallelism 2 redis -
失败处理:通过
--update-failure-action指定失败后的行为pause(默认):暂停更新continue:继续更新其他任务rollback:自动回滚到前一版本
-
健康检查:结合健康检查确保新版本容器真正可用后才继续更新
最佳实践建议
-
生产环境建议:
- 始终设置合理的
update-delay,给新容器足够的启动和预热时间 - 对于关键服务,先从少量并行更新开始(如 parallelism=1)
- 在更新前确保新版本镜像已经过充分测试
- 始终设置合理的
-
测试环境验证:
- 先在测试环境验证更新策略
- 使用
docker service scale调整副本数,模拟不同负载情况下的更新
-
监控与回滚:
- 密切监控更新过程中的服务指标
- 准备好手动回滚方案(指定旧版本镜像再次更新)
总结
Docker Swarm 的滚动更新功能为服务升级提供了安全可靠的机制。通过合理配置更新策略,我们可以在保证服务连续性的前提下完成应用部署。关键是要根据服务特性和业务需求,找到平衡更新速度与稳定性的最佳配置。
掌握这些技巧后,你将能够自信地在生产环境中实施服务更新,为用户提供不间断的高质量服务。
【免费下载链接】docs Source repo for Docker's Documentation 项目地址: https://gitcode.com/gh_mirrors/docs3/docs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



