k8s筆記04-常用部署命令

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

當新版本發布失敗(如鏡像不存在、應用啟動報錯)時,回滾到上一版本或指定版本:

  1. 模擬發布失敗:將鏡像改為不存在的版本(如nginx:161):
    kubectl set image deployment/my-deployment nginx=nginx:161
    # 查看部署狀態,確認失敗(新版本Pod無法拉取鏡像)
    kubectl rollout status deployment/my-deployment  # 會顯示"Waiting for deployment rollout to finish..."
    
  2. 回滾到上一版本(默認回滾到上一個可用版本):
    kubectl rollout undo deployment/my-deployment
    # 驗證回滾結果:查看鏡像是否恢復為1.16.1
    kubectl get deployment my-deployment -o yaml | grep "image:"
    
  3. 回滾到指定版本(如回滾到版本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考試命令使用要點

  1. 資源類型與名稱匹配rollout/scale/autoscale均需指定正確的資源類型(如deployment)和資源名稱(如my-deployment),避免操作錯誤資源;
  2. 版本回滾前提:回滾前需通過rollout history確認目標版本號,尤其是多版本發布場景,避免回滾到錯誤版本;
  3. 擴縮容驗證:操作后需通過kubectl get deployments/kubectl get pods驗證副本數是否符合預期,避免僅執行命令未確認結果;
  4. 命令簡寫技巧deployment可簡寫為deploy,如kubectl scale deploy/my-deployment --replicas=3,節省考試時間。

六、總結

  1. kubectl rollout:版本管理核心,需掌握“查看狀態→查看歷史→回滾版本”全流程,應對發布失敗場景;
  2. kubectl scale:手動擴縮容,考試中高頻用于“調整副本數”類題目,重點記憶--replicas參數;
  3. kubectl autoscale:自動擴縮容,需理解依賴metrics-server,掌握--min/--max/--cpu-percent參數配置;
  4. 實操優先級:所有命令需結合驗證步驟(如get/describe),確保操作生效,這是CKA考試中避免失分的關鍵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920072.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920072.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920072.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[系統架構設計師]知識產權(二十)

[系統架構設計師]知識產權(二十) 一.知識產權的特性 1.特性 無體性:抽象財富 專有性:權利人同意或法律規定外,權利人以外的任何人不得享有或使用該項權力 地域性:只能在該國范圍內手法律保護 時間性&#x…

rk3566編譯squashfs報錯解決

項目場景: 提示:這里簡述項目相關背景: 編譯開源的rk3566代碼squashfs報錯,tspi_linux_sdk_repo_20240131.tar.gz 下之前先讀我 1.tspi_linux_sdk_20230916.tar.gz這個是之前老的沒有git和repo的版本,后面會刪除掉大家…

HTTP 協議與TCP 的其他機制

TCP 的其他機制TCP頭部的標志位SYN:請求建立連接標志位ACK:響應報文標志位PSH:攜帶數據標志位,通知接收方該從緩沖區讀數據FIN:請求斷開連接標志位RST:復位標志位URG:緊急數據標志位安全可靠機制…

點評《JMeter核心技術、性能測試與性能分析》一書

《JMeter核心技術、性能測試與性能分析》深度評價?該書作為清華大學出版社2025年推出的性能測試領域新作,展現了鮮明的技術深度與實踐導向性,具體評價如下:?1. 內容體系:系統性與前沿性兼備??知識架構完整?:覆蓋J…

深入解析:為什么應該避免使用 atoi、atol 和 atof 函數

問題本質深度分析 簡化源碼展示:看清本質 atoi 的典型實現: // atoi 的簡化實現 - 看清問題所在 int atoi(const char *str) {int sign 1;int result 0;// 跳過空白字符while (isspace(*str)) {str;}// 處理符號if (*str -) {sign -1;str;} else if …

計算機網絡:HTTP、抓包、TCP和UDP報文及重要概念

一、http超文本傳輸協議(應用層)(一)萬維網1.工作過程(二)統一資源定位符(URL)http的默認端口號是80(三)HTTP報文結構請求報文:客戶端-->服務器…

three.js+WebGL踩坑經驗合集(8.3):合理設置camera.near和camera.far緩解實際場景中的z-fighting疊面問題

本篇延續上篇內容: three.jsWebGL踩坑經驗合集(8.2):z-fighting疊面問題和camera.near的坑爹關系-CSDN博客 筆者也是狠佩服自己:一個還沒劃上句號的文章都能拖了半年才繼續寫。這次也是運氣好,工作上再次遇到疊面問題,可以借這機…

記一次生產環境Hbase填坑之路、Hbase客戶端登陸、kerberos認證、端口列表、Pod上手撕代碼【Hbase最佳實踐】

背景 1、軟件系統(轉儲系統)需要向生產環境遷移:遷到國產操作系統、國產資源池(Hbase存儲不變) 2、老環境上的轉儲系統本身存在寫入hbase的性能問題、及部分省份寫入hbase失敗的問題(20%失敗)…

C++知識雜項搜集

C使用如下庫優化事件的注冊和發布,ZeroMQzmqpp 通信機制,請求-應帶方式,push-pull方式,publisher-subcriber發布-訂閱模式eventpp 事件注冊和回調sockpp tcp/udp封裝threadpool 線程池Jinja 一個 python 的模板實現配置是實現…

連鎖零售排班難?自動排班系統來解決

零售、連鎖企業門店多、員工雜、班次密,排班時總有繞不開的問題:跨門店調人成本怎么算?節假日高峰期人手怎么補?全職兼職混合排班怎么平衡?其實,這些場景化難題,蓋雅自動排班系統早就有了針對性…

Android用Coil 3檢查媒體資源是否有效,Kotlin

Android用Coil 3檢查媒體資源是否有效,Kotlin WorkerThreadfun checkImage(ctx: Context, uri: Uri): Boolean {val t System.currentTimeMillis()val request ImageRequest.Builder(ctx).data(uri).memoryCacheKey(uri.toString()).precision(Precision.INEXACT)…

Seaborn數據可視化實戰:Seaborn數據可視化入門-繪制統計圖表與數據分析

使用Seaborn繪制統計圖表:從入門到精通 學習目標 通過本課程的學習,你將掌握如何使用Seaborn庫繪制各種統計圖表,包括直方圖、密度圖和箱形圖。你將了解這些圖表在數據分析中的應用,以及如何通過圖表來更好地理解數據。 相關知識點…

?Mac用戶安裝JDK 22完整流程(Intel版dmg文件安裝指南附安裝包下載)?

一、準備工作 ?確認你的 Mac 是 Intel 芯片的? 如果你的 Mac 是 2020 年及之前出的,大概率是 Intel 芯片,可以用這個 ?jdk-22_macos-x64_bin.dmg。如果是 2020 年之后出的 M1 或 M2 芯片的 Mac(就是 Apple 芯片),那…

C語言——鏈表指定區間反轉

目錄 1.創建一個鏈表 1.鏈表節點定義 2.創建新節點 3.鏈表生成(輸入) 4.鏈表輸出 2.鏈表指定區間反轉函數 1.創建啞節點 2.找到第m-1位的節點,開始 反轉 3.連接反轉后的鏈表與未反轉的鏈表 3.未使用啞節點的運行結果 這段代碼可以…

設計一個完整可用的 Spring Boot Starter

目錄 1. 創建項目結構 2. 添加核心依賴 (pom.xml) 3. 實現核心組件 (1) 配置屬性類 (2) 服務實現類 (3) 自動配置類 4. 注冊自動配置 5. 配置元數據支持 6. 打包發布 7. 其他項目引用 (1) 添加依賴 (2) 配置參數 (3) 使用服務 設計要點 要設計一個完整可用的 Spr…

Bright Data 代理 + MCP :解決 Google 搜索反爬的完整方案

個人主頁:chian-ocean 專欄 引言 人工智能技術和大數據的發展,實時訪問網頁數據成為許多應用的核心需求。相比傳統方案依賴靜態或定期更新的數據,AI可以實時抓取和分析網頁上的及時更新的信息,迅速適應變化的環境,提…

Java基礎第4天總結(多態)

package com.itheima.duotai;public class Animal {String name "動物";public void run(){System.out.println("動物會跑~~~");} }package com.itheima.duotai;public class Wolf extends Animal{String nama "狼";Overridepublic void run(…

Git克隆時遇到“Filename too long“錯誤的完美解決方案

Git克隆時遇到"Filename too long"錯誤的完美解決方案 問題描述 在使用Git克隆項目時,你是否遇到過這樣的錯誤: $ git clone gitexample.com:project.git Cloning into project... remote: Enumerating objects: 1883, done. remote: Count…

分享一個基于Python與spark大數據的護膚品市場用戶行為分析與可視化平臺,基于hadoop的護膚品使用行為追蹤與分析可視化平臺的設計與實現

💕💕作者:計算機源碼社 💕💕個人簡介:本人八年開發經驗,擅長Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬蟲、大數據、機器學習等,大家有這一塊的問題…

頁面中嵌入Coze的Chat SDK

Coze 為將 AI 聊天機器人(Bot)嵌入您的網頁提供了兩種主流方式:Web SDK 和 API 接口調用。它們分別適用于不同的場景,下面我將為您介紹這兩種方法,并提供一些選擇建議。 特性 Web SDK API 接口調用 實現方式 引入一段JS代碼,快速嵌入一個預制的聊天窗口 通過HTTP API發送…