Kubernetes Deployment 实战:从资源清理到伸缩与更新管控
一、基础准备:清理闲置 ReplicaSet
在使用 Deployment 时,每次更新都会生成新的 ReplicaSet(简称 RS),旧的 RS 会被保留但设置为 DESIRED=0
。这些闲置 RS 虽然不占用运行资源,但会让集群资源列表变得混乱,建议定期清理。
场景
通过 kubectl get rs
查看发现,除了正在运行的 nginx-deploy-6b7b64468
(管理 3 个 Pod),还有多个闲置 RS:
# 清理前的 RS 列表
NAME DESIRED CURRENT READY AGE
nginx-deploy-5c545b9dd5 0 0 0 42m
nginx-deploy-665f4b5c77 0 0 0 5h1m
nginx-deploy-6b7b64468 3 3 3 121m
nginx-deploy-77cddcb87f 0 0 0 137m
清理操作
直接删除闲置 RS 即可,不会影响当前运行的 Pod(当前 Pod 由 nginx-deploy-6b7b64468
管理):
kubectl delete rs nginx-deploy-5c545b9dd5 nginx-deploy-665f4b5c77 nginx-deploy-77cddcb87f
清理后效果
资源列表变得简洁,仅保留活跃 RS:
NAME DESIRED CURRENT READY AGE
nginx-deploy-6b7b64468 3 3 3 124m
二、高效伸缩:用 kubectl scale 替代手动编辑
Deployment 的核心功能之一是动态调整副本数(replicas)。传统的 kubectl edit deploy
需要手动修改配置文件,效率较低;而 kubectl scale
可以一键完成伸缩,更适合高频操作。
核心命令
# 扩容:将 nginx-deploy 的副本数调整为 6
kubectl scale --replicas=6 deploy nginx-deploy# 缩容:将 nginx-deploy 的副本数调整为 3
kubectl scale --replicas=3 deploy nginx-deploy
操作验证
-
扩容效果:执行扩容命令后,新 Pod 会立即创建(AGE 为几秒),Deployment 和 RS 的副本数同步更新:
# 扩容后 Pod 列表(新增 3 个 Pod) nginx-deploy-6b7b64468-2sncq 1/1 Running 0 2s nginx-deploy-6b7b64468-8vc5m 1/1 Running 0 2s nginx-deploy-6b7b64468-nptv5 1/1 Running 0 2s# 扩容后 Deployment 状态 NAME READY UP-TO-DATE AVAILABLE AGE nginx-deploy 6/6 6 6 5h6m
-
缩容效果:执行缩容命令后,多余的 Pod 会被自动删除,最终保留 3 个运行中的 Pod:
# 缩容后 Pod 列表(仅保留原 3 个 Pod) nginx-deploy-6b7b64468-h55t4 1/1 Running 0 128m nginx-deploy-6b7b64468-kh4wm 1/1 Running 0 124m nginx-deploy-6b7b64468-lq844 1/1 Running 0 127m
三、安全更新:Deployment 暂停与重启机制
在更新 Deployment 配置(如镜像版本、资源限制)时,可能需要分步骤验证。通过 kubectl rollout pause
暂停更新,可避免配置错误直接生效;验证无误后用 kubectl rollout resume
恢复更新,大幅降低风险。
操作流程
1. 暂停 Deployment 更新
kubectl rollout pause deploy nginx-deploy
暂停后,即使通过 kubectl edit deploy
修改配置,也不会触发新 RS 创建和旧 Pod 替换。
2. 修改配置并验证
例如,编辑 Deployment 增加资源限制(limits.cpu=500m
):
kubectl edit deploy nginx-deploy
此时查看 RS 列表,发现没有新 RS 生成(仍为原 RS),说明暂停生效:
NAME DESIRED CURRENT READY AGE
nginx-deploy-57b68466d4 3 3 3 4m21s # 无新 RS
3. 恢复更新并验证
确认配置无误后,恢复 Deployment 更新:
kubectl rollout resume deploy nginx-deploy
恢复后,新 RS 会被创建,旧 RS 会逐步缩容,最终完成更新:
# 恢复后 RS 列表(新 RS 已创建并运行 3 个 Pod)
NAME DESIRED CURRENT READY AGE
nginx-deploy-57b68466d4 0 0 0 6m28s # 旧 RS 被缩容
nginx-deploy-6c6766f6d6 3 3 3 5s # 新 RS 生效
四、版本管理:查看更新历史与回滚
Deployment 会自动记录每一次更新(称为“修订版本”),通过 kubectl rollout history
可查看历史记录,必要时可回滚到指定版本(即使更新已完成)。
在暂停后,修改完yaml,可以通过查看版本历史,发现没有新的版本出现来印证暂停效果
核心命令
-
查看更新历史:
kubectl rollout history deploy nginx-deploy
输出示例(REVISION 为修订版本号):
REVISION CHANGE-CAUSE 5 <none> 6 <none> 7 <none>
-
查看指定版本详情:
kubectl rollout history deploy nginx-deploy --revision=7
可查看该版本的 Pod 模板(如镜像、资源配置等)。
-
回滚到指定版本(若需回滚):
kubectl rollout undo deploy nginx-deploy --to-revision=6
总结
场景 | 推荐操作 | 优势 |
---|---|---|
清理闲置资源 | kubectl delete rs <闲置RS> | 保持集群资源列表简洁,避免资源冗余 |
动态调整副本数 | kubectl scale deploy <名称> --replicas=<数量> | 一键伸缩,比手动编辑更高效 |
安全更新配置 | pause → 修改 → resume | 分步验证配置,降低更新风险 |
版本管理与回滚 | rollout history/undo | 追踪更新记录,支持快速回滚到稳定版本 |