k8s基礎架構介紹
k8s 是對容器進行編排的一種工具。通過k8s可以實現對容器的編排、部署、更新等
學習k8s之前,先了解相關的一些使用和配置k8s的一些工具。
k8s的常用工具
在 kubernetes 中,主要有三個日常使用的工具,這些工具使用 kube 前綴命名,這三個工具如下:
kubeadm
用來初始化集群的指令,能夠創建集群,并且添加新的節點。可用其它部署工具替代。
具體功能有:
-
初始化集群:在控制平面節點(Master 節點)上運行
kubeadm init
,自動生成集群所需的證書、配置文件和核心組件(如 API Server、Controller Manager、Scheduler 等)。 -
?加入節點:生成
kubeadm join
命令,將工作節點(Worker 節點)添加到集群。 -
升級集群:支持 Kubernetes 版本的升級(如
kubeadm upgrade
)。 -
重置集群:通過
kubeadm reset
清理集群狀態。
kubelet:
?運行在每個節點(Master 和 Worker)上的代理,直接與容器運行時(如 Docker、containerd)交互,負責與API-server通信,管理節點上的 Pod 和容器生命周期。具體功能包括
-
?啟動/停止容器:根據 Kubernetes API Server 的指令,創建或終止 Pod 中的容器。
-
監控容器的運行狀態,并向 API Server 報告節點和 Pod 的健康狀態。
-
掛載存儲卷:按需掛載 Pod 所需的存儲卷(如 Persistent Volume)。
-
?執行探針:運行
livenessProbe
和readinessProbe
檢查容器狀態。
kubectl
kubectl:用k8s中的命令行工具,與 kubernetes API-Server 通訊,是我們操作集群的客戶端。具體功能有
-
創建、刪除、更新、查看集群中的資源(如
kubectl create
,kubectl delete
) -
?調試集群:查看 Pod 日志(
kubectl logs
)、進入容器終端(kubectl exec
)、檢查資源狀態(kubectl describe
)。 -
通過 YAML 文件聲明式管理資源(如
kubectl apply -f deployment.yaml
)。
那么我們操縱集群中的節點是怎么辦到的呢,其實就是用戶通過 kubectl 向 API Server 發送指令,API Server 再將指令傳遞給 kubelet 執行。
講完常用的工具,接下來,我們就可以一起看一下k8s的架構了。
k8s 架構
一個 kubernetes 集群是由一組被稱為節點的機器或虛擬機組成,節點有 master、worker 兩種類型。一個集群中至少有一個 master 節點,在沒有 worker 節點的情況下, Pod 也可以部署到 master 節點上。如果集群中的節點數量非常多,則可考慮擴展 master 節點,使用多個 master 節點控制集群。
k8s中的master節點組成了控制平面,worker節點組成了數據平面。
控制平面
控制平面由master節點組成。一個maser節點中通常由5個組件,包括
-
?kube-apiserver:集群的“入口”,提供 REST API,接收用戶請求(如 kubectl 命令)。
-
etcd:分布式鍵值存儲數據庫,保存集群的所有配置和狀態數據。
-
kube-scheduler:調度 Pod 到合適的節點上運行。
-
kube-controller-manager:運行各種控制器(如 Deployment、Node 控制器),確保集群處于期望狀態。
-
?cloud-controller-manager?(可選):與云平臺(如 AWS、GCP)交互,實現云原生功能。
數據平面
數據平面是 Kubernetes 集群中實際承載工作負載的核心層,由一組 ?工作節點(Worker Node)? 構成,負責運行用戶應用(Pod)并處理計算、存儲、網絡等實際任務。
每個worker節點中,都必須有:
kubelet:節點代理,管理本節點上 Pod 的生命周期(創建、終止、重啟容器)、監控容器狀態(如 CPU/內存使用率),并向控制平面報告節點和 Pod 的健康狀態、掛載存儲卷(Volume)、執行容器探針(Liveness/Readiness Probe)等。
kube-proxy:節點網絡代理,維護 Kubernetes 服務的網絡規則,確保 Pod 跨節點通信時,流量能正確轉發到目標端點(Endpoint)、實現 Service 的負載均衡和網絡流量路由(通過 iptables 或 IPVS 規則)。
k8s部署一個pod的完整流程
當用戶通過 kubectl create
或 kubectl apply
提交資源聲明(如 Deployment、Pod)時,集群會按以下步驟協調資源:
-
用戶提交指令
kubectl 將 YAML 文件內容轉換為 API 請求,發送至 ?API Server。
-
?API Server 處理請求
API Server 對請求進行身份認證(Authentication)、權限校驗(Authorization)并將資源定義(如 Pod 規格)持久化到 ?etcd 數據庫。
-
?調度決策(Scheduler)
調度器監聽 API Server 的未調度 Pod 事件,執行以下邏輯:
過濾滿足 Pod 資源需求的節點(如 CPU/內存/GPU)。
根據策略(親和性、污點容忍、拓撲分布等)為 Pod 選擇最優節點。 -
節點執行(kubelet)
目標節點的 ?kubelet 檢測到新 Pod 調度到本節點后:
- 從鏡像倉庫拉取容器鏡像(若本地不存在)。
- 調用容器運行時創建容器,掛載存儲卷。
- 啟動容器并執行探針檢查。
- 持續監控容器狀態,并上報至 API Server。
-
?狀態反饋與協調(Controller Manager)?
?控制器(如 Deployment Controller)? 持續監聽 Pod 狀態,若Pod 異常終止,觸發重啟或重建(根據重啟策略),若期望副本數與實際不符,觸發擴縮容操作。