Kubernetes(K8s)部署與版本管理命令筆記
一、部署核心命令分類與應用場景
K8s中用于應用部署、版本控制與實例擴縮容的核心命令主要包括三類,分別對應“版本回滾”“手動擴縮容”“自動擴縮容”場景,是CKA考試中部署類題目的核心考點。
命令類別 | 核心命令 | 應用場景 | 關鍵作用 |
---|---|---|---|
版本管理 | kubectl rollout | 應用版本更新、回滾、查看發布歷史 | 解決版本發布失敗問題,保障部署安全性 |
手動擴縮容 | kubectl scale | 手動調整Deployment/StatefulSet的副本數 | 應對固定負載變化(如活動前提前擴容) |
自動擴縮容 | kubectl autoscale | 基于CPU/內存負載自動調整副本數 | 應對動態負載(如流量波動時自動擴容/縮容) |
二、版本管理命令:kubectl rollout
(CKA必考)
1. 核心作用
針對Deployment、StatefulSet等控制器,實現版本發布狀態查看、發布歷史查詢、版本回滾,核心解決“發布失敗后快速回退”的問題,配合K8s滾動更新(Rolling Update)策略,確保應用部署無感知且可恢復。
2. 關鍵子命令與實操
(1)前置準備:創建Deployment示例
首先創建一個基礎Deployment(用于后續版本操作演示):
# 創建名為my-deployment的Deployment,鏡像為nginx:1.14.2
kubectl create deployment my-deployment --image=nginx:1.14.2
# 驗證創建結果
kubectl get deployments my-deployment
(2)發布新版本:修改鏡像(觸發版本更新)
通過kubectl set image
修改Deployment的容器鏡像,觸發新的版本發布(滾動更新):
# 1. 先查看Deployment的容器名稱(需與后續修改命令匹配)
kubectl get deployment my-deployment -o yaml | grep "name:" # 輸出容器名稱為"nginx"
# 2. 將鏡像從1.14.2更新為1.16.1
kubectl set image deployment/my-deployment nginx=nginx:1.16.1
(3)查看發布狀態:kubectl rollout status
實時查看版本更新進度,確認新版本是否部署成功:
# 查看my-deployment的發布狀態
kubectl rollout status deployment/my-deployment
# 成功輸出示例:deployment "my-deployment" successfully rolled out
# 失敗輸出示例:Waiting for deployment "my-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
(4)查看發布歷史:kubectl rollout history
查看Deployment的所有版本記錄,包含每個版本的鏡像、配置變更等信息:
# 查看my-deployment的版本歷史
kubectl rollout history deployment/my-deployment
# 輸出示例:
# deployments "my-deployment"
# REVISION CHANGE-CAUSE
# 1 kubectl create deployment my-deployment --image=nginx:1.14.2
# 2 kubectl set image deployment/my-deployment nginx=nginx:1.16.1# 查看指定版本(如版本1)的詳細配置
kubectl rollout history deployment/my-deployment --revision=1
(5)版本回滾:kubectl rollout undo
當新版本發布失敗(如鏡像不存在、應用啟動報錯)時,回滾到上一版本或指定版本:
- 模擬發布失敗:將鏡像改為不存在的版本(如
nginx:161
):kubectl set image deployment/my-deployment nginx=nginx:161 # 查看部署狀態,確認失敗(新版本Pod無法拉取鏡像) kubectl rollout status deployment/my-deployment # 會顯示"Waiting for deployment rollout to finish..."
- 回滾到上一版本(默認回滾到上一個可用版本):
kubectl rollout undo deployment/my-deployment # 驗證回滾結果:查看鏡像是否恢復為1.16.1 kubectl get deployment my-deployment -o yaml | grep "image:"
- 回滾到指定版本(如回滾到版本1,即
nginx:1.14.2
):kubectl rollout undo deployment/my-deployment --to-revision=1 # 驗證:確認鏡像恢復為1.14.2 kubectl get deployment my-deployment -o yaml | grep "image:"
三、手動擴縮容命令:kubectl scale
1. 核心作用
手動調整控制器(如Deployment、StatefulSet、ReplicaSet)的副本數(replicas),實現實例的擴容(增加副本)或縮容(減少副本),適用于負載可預期的場景(如活動高峰期提前擴容,結束后縮容節省資源)。
2. 實操示例
基于前文創建的my-deployment
(初始副本數為1),演示手動擴縮容:
(1)擴容:從1個副本擴展到3個副本
# 命令格式:kubectl scale [資源類型]/[資源名稱] --replicas=[目標副本數]
kubectl scale deployment/my-deployment --replicas=3
# 驗證擴容結果:查看Deployment的副本狀態
kubectl get deployments my-deployment
# 輸出示例(擴容中):
# NAME READY UP-TO-DATE AVAILABLE AGE
# my-deployment 2/3 3 2 10m
# 輸出示例(擴容完成):
# NAME READY UP-TO-DATE AVAILABLE AGE
# my-deployment 3/3 3 3 10m# 查看Pod數量,確認3個Pod均已運行
kubectl get pods -l app=my-deployment # -l通過標簽篩選Pod
(2)縮容:從3個副本減少到2個副本
kubectl scale deployment/my-deployment --replicas=2
# 驗證縮容結果:Pod數量會從3個減少到2個(K8s會優先刪除未承載流量的Pod)
kubectl get pods -l app=my-deployment
3. 關鍵參數說明
參數 | 作用 | 示例 |
---|---|---|
--replicas | 指定目標副本數(必填) | --replicas=5 (擴容到5個副本) |
-l /--selector | 通過標簽篩選多個控制器,批量擴縮容 | kubectl scale deployments --selector app=nginx --replicas=2 (批量調整所有標簽為app=nginx 的Deployment) |
-o /--output | 指定輸出格式(如yaml、json) | kubectl scale deployment/my-deployment --replicas=3 -o yaml (輸出擴縮容后的YAML配置) |
四、自動擴縮容命令:kubectl autoscale
1. 核心作用
基于CPU或內存使用率自動調整副本數,無需人工干預,適用于負載動態變化的場景(如電商平臺的流量波動、API服務的請求量變化)。
依賴組件:需提前部署metrics-server
(K8s官方的資源指標采集組件),否則無法獲取CPU/內存使用率數據。
2. 核心邏輯與參數
自動擴縮容通過設置“觸發閾值”“副本數范圍”實現:
- 觸發閾值:如CPU使用率超過80%時擴容,低于30%時縮容;
- 副本數范圍:
--min
(最小副本數,避免縮容到0導致服務不可用)、--max
(最大副本數,避免過度擴容消耗資源)。
3. 實操示例
為my-deployment
配置自動擴縮容:當CPU使用率超過80%時擴容(最大5個副本),低于30%時縮容(最小2個副本):
# 命令格式:kubectl autoscale [資源類型]/[資源名稱] --min=[最小副本數] --max=[最大副本數] --cpu-percent=[CPU閾值]
kubectl autoscale deployment/my-deployment --min=2 --max=5 --cpu-percent=80
# 驗證自動擴縮容配置(查看HPA對象,HPA=Horizontal Pod Autoscaler)
kubectl get hpa my-deployment
# 輸出示例:
# NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
# my-deployment Deployment/my-deployment 0%/80% 2 5 2 1m
4. 關鍵說明
- 查看HPA狀態:通過
kubectl get hpa my-deployment -w
(-w
實時監控)查看CPU使用率變化與副本數調整; - 刪除自動擴縮容配置:
kubectl delete hpa my-deployment
; - 內存閾值配置:默認僅支持CPU閾值,若需基于內存配置,需通過YAML文件定義(考試中較少涉及,了解即可)。
五、CKA考試命令使用要點
- 資源類型與名稱匹配:
rollout
/scale
/autoscale
均需指定正確的資源類型(如deployment
)和資源名稱(如my-deployment
),避免操作錯誤資源; - 版本回滾前提:回滾前需通過
rollout history
確認目標版本號,尤其是多版本發布場景,避免回滾到錯誤版本; - 擴縮容驗證:操作后需通過
kubectl get deployments
/kubectl get pods
驗證副本數是否符合預期,避免僅執行命令未確認結果; - 命令簡寫技巧:
deployment
可簡寫為deploy
,如kubectl scale deploy/my-deployment --replicas=3
,節省考試時間。
六、總結
kubectl rollout
:版本管理核心,需掌握“查看狀態→查看歷史→回滾版本”全流程,應對發布失敗場景;kubectl scale
:手動擴縮容,考試中高頻用于“調整副本數”類題目,重點記憶--replicas
參數;kubectl autoscale
:自動擴縮容,需理解依賴metrics-server
,掌握--min
/--max
/--cpu-percent
參數配置;- 實操優先級:所有命令需結合驗證步驟(如
get
/describe
),確保操作生效,這是CKA考試中避免失分的關鍵。