Kubernetes(K8s)核心架構解析與實用命令大全

在容器化技術席卷全球的今天,Kubernetes(簡稱K8s,以“8”代替“ubernete”八個字母)已成為云原生應用部署和管理的核心基礎設施。作為Google基于內部Borg系統開源打造的容器編排引擎,K8s不僅解決了大規模容器管理的難題,更重新定義了現代化應用的交付方式。


一、Kubernetes是什么?為何它成為云原生基石

1.?核心定位

K8s是一個開源的容器編排平臺,用于自動化部署、擴展和管理容器化應用。它提供了一套完整的工具鏈,涵蓋從服務發現、負載均衡到存儲編排、自動修復等關鍵能力。

2.?核心價值
  • 彈性伸縮:根據負載自動調整容器規模,從零秒級擴容到數千節點
  • 自我修復:自動重啟失敗容器、替換故障節點,保障服務持續可用
  • 跨環境一致性:應用可在公有云、私有云、混合云間無縫遷移(避免供應商鎖定)
  • 聲明式配置:通過YAML文件定義應用狀態,系統自動收斂至目標狀態
3.?與Docker的關系

Docker負責創建容器,K8s負責管理容器集群。二者如同“集裝箱與港口調度系統”——Docker打包應用,K8s調度成千上萬個容器協同工作。


二、K8s架構核心:掌握Master與Node的協作機制

一個K8s集群由兩類節點構成,協同完成容器調度與管理:

1.?Master節點:集群的“大腦”
  • API Server:集群統一入口,接收所有REST操作請求
  • Scheduler:為新創建的Pod選擇最佳Node(基于資源、策略等)
  • Controller Manager:確保集群狀態符合預期(如副本數維持、節點故障恢復)
  • etcd:分布式鍵值數據庫,存儲整個集群狀態數據
2.?Worker Node節點:工作負載執行者
  • Kubelet:管理Pod生命周期,與容器引擎(如Docker)交互
  • Kube-proxy:維護網絡規則,實現Service負載均衡
  • 容器運行時:真正運行容器的引擎(Docker/containerd等)

工作流程示例: ?
當用戶提交一個Pod創建請求→ API Server寫入etcd → Scheduler分配Node → 目標Node的Kubelet創建Pod → Kube-proxy配置網絡規則


三、核心概念全景圖:理解K8s資源對象模型

1.?Pod:最小調度單元
  • 一個Pod包含1個或多個容器,共享網絡/IPC/存儲卷
  • 例如:Web容器與日志收集容器可部署在同一Pod中
2.?Controller:Pod的管理器

| 控制器類型 ? ? ? | 適用場景 ? ? ? ? ? ? ? ? ?| 關鍵特性 ? ? ? ? ? ? ? ? ? ? ? ? ?| ?
|------------------|-------------------------|----------------------------------| ?
|?Deployment?? | 無狀態應用(如Web服務) ? | 支持滾動更新、版本回滾 ? ? ? ? ? ?| ?
|?StatefulSet??| 有狀態應用(如數據庫) ? ?| 固定網絡標識、持久存儲順序啟動 ? ? ?| ?
|?DaemonSet?? ?| 節點級守護進程(如日志采集)| 每個Node運行一個Pod副本 ? ? ? ? ? | ?
|?Job/CronJob??| 批處理任務 ? ? ? ? ? ? ? ?| 執行完成后自動退出 ? ? ? ? ? ? ? ?|

3.?Service:服務的統一入口
  • 為一組Pod提供固定IP和DNS名稱
  • 支持ClusterIP(集群內訪問)、NodePort(節點端口暴露)、LoadBalancer(云廠商負載均衡器)
4.?Label與Annotation
  • Label:用于資源分類和選擇(如app=frontend
  • Annotation:存儲非識別性元數據(如構建信息、監控配置)

四、Kubectl終極命令手冊:從入門到高階

以下命令經生產驗證,覆蓋90%日常操作場景(按使用頻率與功能分類):

1.?資源基礎操作(每天必用)
# 查看集群節點狀態
kubectl get nodes -o wide# 獲取default命名空間所有Pod(含IP和節點信息)
kubectl get pods -o wide# 查看Pod詳情(事件、狀態、容器配置)
kubectl describe pod/<pod-name># 刪除Deployment及其關聯Pod
kubectl delete deploy/<deployment-name>
2.?應用部署與更新
# 通過YAML文件創建資源(聲明式首選)
kubectl apply -f deployment.yaml# 滾動更新鏡像(無需修改YAML)
kubectl set image deploy/nginx nginx=nginx:1.25.1# 查看更新狀態
kubectl rollout status deploy/nginx# 回滾到上一個版本
kubectl rollout undo deploy/nginx
3.?故障排查與調試
# 實時查看Pod日志
kubectl logs -f <pod-name> --tail 100# 進入Pod的Shell環境(調試利器)
kubectl exec -it <pod-name> -- /bin/bash# 將本地8080端口轉發到Pod的80端口
kubectl port-forward <pod-name> 8080:80# 查看節點事件(定位調度失敗原因)
kubectl get events --sort-by='.metadata.creationTimestamp'
4.?集群管理與高級運維
# 擴展Deployment副本數
kubectl scale deploy/nginx --replicas=5# 設置節點不可調度(維護前操作)
kubectl cordon <node-name># 驅逐節點所有Pod并清空節點
kubectl drain <node-name> --ignore-daemonsets# 監控Pod資源消耗(類似Linux top)
kubectl top pod

實用技巧:啟用命令自動補全

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

五、實戰示例:3分鐘部署Nginx服務

# 步驟1:創建Deployment
kubectl create deployment nginx --image=nginx:1.25# 步驟2:暴露為Service(NodePort類型)
kubectl expose deploy/nginx --port=80 --type=NodePort# 步驟3:獲取訪問端口
NODE_PORT=$(kubectl get svc/nginx -o jsonpath='{.spec.ports[0].nodePort}')
echo "訪問地址: http://<任意節點IP>:$NODE_PORT"# 步驟4:擴容到3副本
kubectl scale deploy/nginx --replicas=3

六、安全與最佳實踐

  • 最小權限原則:使用ServiceAccount為Pod分配精確權限
  • 非Root用戶運行容器:在Dockerfile中設置USER指令
  • 資源限制:為Pod設置requests/limits防止資源搶占
resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"
  • 定期更新:及時升級K8s版本與基礎鏡像(CVE修復)
  • 網絡策略:通過NetworkPolicy限制Pod間通信

七、學習路徑推薦

  1. 官方交互式教程:kubernetes.io基礎教程
  2. Katacoda在線實驗:在瀏覽器中操作真實集群
  3. 認證體系: ?
    ? ?-?CKAD(Kubernetes應用開發者) ?
    ? ?-?CKA(Kubernetes管理員)
  4. 進階方向: ?
    ? ?- Helm包管理 ?
    ? ?- Operator模式開發 ?
    ? ?- 服務網格(Istio/Linkerd)集成

在云原生世界中,Kubernetes已成為新一代的操作系統。它抽象了底層基礎設施的復雜性,讓開發者聚焦業務價值交付。正如舵手(Kubernetes希臘語原意)引領船隊穿越風浪,K8s正帶領全球企業駛向智能化運維的未來。

命令速查PDF:K8s命令大全下載??
更多實踐:訪問?Kubernetes官方文檔

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

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

相關文章

基于微信小程序的scratch學習系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

postgresql 流復制中指定同步的用戶

postgresql 流復制中指定同步的用戶 在創建postgresql流復制的過程中&#xff0c;可以指定用戶名。 主庫pg_hba.conf配置 vi $PGDATA/pg_hba.conf host replication repl 192.168.56.12/32 md5 host all all 0.0.0.0/0 md5主庫創建同步的用戶 # 主庫創建 replicator 流復制…

基于springboot的運動員健康管理系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

工具識別系統Python+深度學習+人工智能+卷積神經網絡算法+TensorFlow+圖像識別

一、介紹 工具識別系統&#xff0c;使用Python作為主要編程語言&#xff0c;基于TensorFlow搭建卷積神經網絡算法&#xff0c;通過收集了8種常見的日常工具圖片&#xff08;“汽油罐&#xff08;Gasoline Can&#xff09;”, “錘子&#xff08;Hammer&#xff09;”, “鉗子&…

2024 CKA模擬系統制作 | Step-By-Step | 8、題目搭建-創建 Ingress

目錄 ??????免費獲取題庫配套 CKA_v1.31_模擬系統 一、題目 二、核心考點 Ingress 資源定義 Ingress Controller 依賴 服務暴露驗證 網絡層次關系 三、搭建模擬環境 1.創建命名空間 2.安裝ingress ingress-nginx-controller 3.創建hello.yaml并部署 四、總結 …

關于uv 工具的使用總結(uv,conda,pip什么關系)

最近要開發MCP 項目&#xff0c;uv工具使用是官方推薦的方式&#xff0c;逐要了解這個uv工具。整體理解如下&#xff1a; 一.uv工具的基本情況 UV 是一個由 Rust 編寫的現代化 Python 包管理工具&#xff0c;旨在通過極速性能和一體化功能替代傳統工具&#xff08;如 pip、vi…

嵌入式學習筆記 - 新版Keil軟件模擬時鐘Xtal灰色不可更改的問題

在新版Keil軟件中&#xff0c;模擬時鐘無法修改XTAL頻率&#xff0c;默認只能使用12MHz時鐘。?這是因為Keil MDK從5.36版本開始&#xff0c;參數配置界面不再支持修改系統XTAL頻率&#xff0c;XTAL選項變為灰色&#xff0c;無法修改。這會導致在軟件仿真時出現時間錯誤的問題&…

Spring AI Image Model、TTS,RAG

文章目錄 Spring AI Alibaba聊天模型圖像模型Image Model API接口及相關類實現生成圖像 語音模型Text-to-Speech API概述實現文本轉語音 實現RAG向量化RAGRAG工作流程概述實現基本 RAG 流程 Spring AI Alibaba Spring AI Alibaba實現了與阿里云通義模型的完整適配&#xff0c;…

Java進階---JVM

JVM概述 JVM作用&#xff1a; 負責將字節碼翻譯為機器碼&#xff0c;管理運行時內存 JVM整體組成部分&#xff1a; 類加載系統(ClasLoader)&#xff1a;負責將硬盤上的字節碼文件加載到內存中 運行時數據區(RuntimeData Area)&#xff1a;負責存儲運行時各種數據 執行引擎(Ex…

數據類型檢測有哪些方式?

typeof 其中數組 對象 null都會判斷為Object,其他正確 typeof 2 // number typeof true //bolean typeof str //string typeof [] //Object typeof function (){} // function typeof {} //object typeof undefined //undefined typeof null // nullinstanceof 判斷…

NodeJS全棧開發面試題講解——P6安全與鑒權

? 6.1 如何防止 SQL 注入 / XSS / CSRF&#xff1f; 面試官您好&#xff0c;Web 安全三大經典問題分別從不同層面入手&#xff1a; &#x1f538; SQL 注入&#xff08;Server端&#xff09; 原理&#xff1a;惡意用戶將 SQL 注入查詢語句拼接&#xff0c;導致數據泄露或破壞…

npm error Cannot find module ‘negotiator‘ 的處理

本想運行npm create vuelatest&#xff0c;但提示&#xff1a; npm error code MODULE_NOT_FOUND npm error Cannot find module negotiator npm error Require stack: npm error - C:\Users\Administrator\AppData\Roaming\nvm\v18.16.1\node_modules\npm\node_modules\tuf-j…

Python爬蟲:AutoScraper 庫詳細使用大全(一個智能、自動、輕量級的網絡爬蟲)

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 一、AutoScraper概述1.1 AutoScraper介紹1.2 安裝1.3 注意事項二、基本使用方法2.1 創建 AutoScraper 實例2.2 訓練模型2.3 保存和加載模型2.4 數據提取方法2.5 自定義規則三、高級功能3.1 多規則抓取3.2 分頁抓取3.3 代…

【Netty系列】解決TCP粘包和拆包:LengthFieldBasedFrameDecoder

目錄 如何使用&#xff1f; 1. 示例代碼&#xff08;基于Netty&#xff09; 2. 關鍵參數解釋 3. 協議格式示例 4. 常見配置場景 場景1&#xff1a;長度字段包含自身 場景2&#xff1a;長度字段在消息中間 5. 注意事項 舉個例子 完整示例&#xff1a;客戶端與服務端交互…

哈爾濱工業大學提出ADSUNet—紅外暗弱小目標鄰幀檢測新框架

ADSUNet: Accumulation-Difference-Based Siamese U-Net for inter-frame Infrared Dim and Small Target Detection 作者單位&#xff1a;哈爾濱工業大學空間光學工程研究中心 引用: Liuwei Zhang, Yuyang Xi, Zhipeng Wang, Wang Zhang, Fanjiao Tan, Qingyu Hou, ADSUNet: A…

Linux開發追蹤(IMX6ULL篇_第一部分)

前言 參數&#xff1a;cortex-A7 698Mhz flash 8GB RAM 512M DDR3 2個100M網口 單核 初期&#xff1a; 一、安裝完虛擬機之后&#xff0c;第一步先設置文件之間可以相互拷貝復制&#xff0c;以及通過CRT連接到虛擬機等 折磨死人了啊啊啊啊啊啊 1、關于SSH怎么安裝…

【萌筆趣棋】網頁五子棋項目測試報告

目錄 一.項目介紹 &#xff08;一&#xff09;項目簡介 &#xff08;二&#xff09;功能介紹 &#xff08;三&#xff09;頁面展示 1.注冊頁面 2.登錄頁面 3.游戲大廳頁面 4.游戲房間頁面&#xff08;對戰&#xff09; 二.功能測試 &#xff08;一&#xff09;出現的…

知識圖譜增強的大型語言模型編輯

https://arxiv.org/pdf/2402.13593 摘要 大型語言模型&#xff08;LLM&#xff09;是推進自然語言處理&#xff08;NLP&#xff09;任務的關鍵&#xff0c;但其效率受到不準確和過時知識的阻礙。模型編輯是解決這些挑戰的一個有前途的解決方案。然而&#xff0c;現有的編輯方法…

數據庫,Spring Boot,數據源

您是對的&#xff0c;我之前的回答解釋了Spring Boot在操作MySQL時不一定需要顯式配置指定的數據源類型&#xff0c;因為它有自動配置機制&#xff0c;但沒有直接點明在自動配置情況下“數據源是什么”。 在Spring Boot自動配置機制下&#xff0c;這個“數據源”指的是一個連接…

數據結構測試模擬題(3)

1、兩個有序鏈表序列的合并 #include<bits/stdc.h> using namespace std;struct node{int num;node* next; };// 創建鏈表 node* CreatList(){int x;node *head new node(); // 創建頭節點head->next NULL;node *tail head; // 尾指針初始指向頭節點while…