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 | 追蹤更新記錄,支持快速回滾到穩定版本 |