Docker Swarm 节点维护指南:优雅下线节点操作详解
docs Source repo for Docker's Documentation 项目地址: https://gitcode.com/gh_mirrors/docs3/docs
前言
在生产环境中,集群节点的维护是不可避免的操作。Docker Swarm 提供了优雅的节点下线机制,允许管理员在不影响服务的前提下进行节点维护。本文将详细介绍如何通过 drain
模式实现节点的优雅下线。
节点可用性状态解析
Docker Swarm 中的节点有三种可用性状态:
-
Active(活跃状态):
- 默认状态
- 可以接收新任务分配
- 参与服务部署和扩展
-
Drain(下线状态):
- 不接收新任务
- 现有任务会被迁移到其他节点
- 适合维护场景
-
Pause(暂停状态):
- 不接收新任务
- 现有任务继续运行
- 适合临时性隔离
节点下线操作全流程
1. 检查当前节点状态
首先查看集群中所有节点的状态:
docker node ls
输出示例:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1bcef6... worker2 Ready Active
38ciao... worker1 Ready Active
e216js... * manager1 Ready Active Leader
2. 创建测试服务(可选)
如果没有运行中的服务,可以创建一个 Redis 服务用于演示:
docker service create --replicas 3 --name redis --update-delay 10s redis:7.4.0
3. 查看服务分布情况
docker service ps redis
典型输出:
NAME IMAGE NODE STATE
redis.1... redis:7.4.0 manager1 Running
redis.2... redis:7.4.0 worker1 Running
redis.3... redis:7.4.0 worker2 Running
4. 设置节点为下线状态
将 worker1 节点设置为 drain 模式:
docker node update --availability drain worker1
5. 验证节点状态变更
docker node inspect --pretty worker1
输出中应显示:
Availability: Drain
6. 观察服务迁移情况
再次检查服务分布:
docker service ps redis
此时可以看到:
- worker1 上的任务已被终止
- 新任务已在其他 Active 节点上启动
7. 恢复节点到活跃状态
维护完成后,将节点恢复为 Active 状态:
docker node update --availability active worker1
重要注意事项
-
独立容器不受影响:
drain
模式只影响 Swarm 服务,不会影响通过docker run
等命令直接创建的容器。 -
服务连续性保障:Swarm 会确保服务副本数始终满足要求,在 drain 操作时会自动在其他节点创建替代副本。
-
节点恢复后的任务分配:节点恢复 Active 状态后,不会自动接收任务,只有在以下情况才会参与任务分配:
- 服务扩容时
- 滚动更新时
- 其他节点被 drain 时
- 其他节点任务失败时
最佳实践建议
-
维护窗口选择:尽量在业务低峰期执行 drain 操作。
-
分批操作:大规模集群维护时,建议分批 drain 节点,避免同时下线过多节点影响服务稳定性。
-
状态验证:在执行 drain 前后,务必验证服务状态和分布情况。
-
监控观察:操作过程中密切监控服务指标,确保没有异常情况发生。
总结
通过 Docker Swarm 的 drain 机制,我们可以实现集群节点的优雅下线,确保服务的高可用性。这种操作方式特别适合计划性维护、硬件升级等场景,是每个 Swarm 管理员必须掌握的核心技能。
docs Source repo for Docker's Documentation 项目地址: https://gitcode.com/gh_mirrors/docs3/docs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考