K8S 原理最全詳解 -萬字圖文總結-
大家好,我是 mikechen。
K8S(Kubernetes) 是雲原生最核心的內容,也是雲計算的未來,下滿我就全面來詳解 K8S 的原理 @mikechen
K8S
K8S 是 Kubernetes 的縮寫,是 “google” 開發的容器編排平臺,主要用於:自動化應用程序的部署、擴展、和管理。
如下圖所示:
主要解決:
-
容器編排:Kubernetes 的核心作用,是對容器進行編排;
-
自動化部署:以及,Kubernetes 還能夠自動部署容器化應用;
-
容器調度:以及,根據資源需求、和策略,可以智能調度容器,到適當的節點上運行;
-
自動擴展:Kubernetes 支持自動擴展功能,能夠根據需求,動態調整應用資源... 等功能。
總之,K8S 爲容器化應用程序提供了一個全面的管理層,確保應用程序在集羣環境中的可伸縮性、和穩定性。
Kubernetes 原理
Kubernetes 架構組件,包括:多個關鍵組件,比如:Master 主組件、和工作節點組件...... 等等。
如下圖所示:
最核心的組件,包括圖上的:主節點(Master Node)組件、以及工作節點(Worker Node)組件... 等。
主節點(Master Node)組件,又會包含:apiserver、scheduler、controller... 等組件,下面我分別詳解 @mikechen
Master 主節點架構組件
Master 節點,負責:管理、和控制整個 Kubernetes 集羣,包含多個組件:apiserver、scheduler、controller... 等組件。
如下圖所示:
1.API Server
API Server,是 Kubernetes 的前端,負責:處理 RESTful API 請求(如:kubectl.... 命令),並將這些請求分發給其他組件進行處理。
如下圖所示,黃色框:
API Server 是所有操作的入口,提供集羣的統一接口。
比如:統一進行身份認證、授權、API 驗證、和集羣狀態的持久化........ 等功能。
2. 鍵值存儲 etcd
Kubernetes 使用 etcd 存儲所有集羣的元數據、和狀態信息。
比如,包括:配置信息、狀態信息、服務發現信息...... 等。
kube-apiserver 通過讀寫 etcd 來管理集羣的狀態信息,其他組件通過 kube-apiserver 訪問 etcd 中的數據。
etcd 通過使用 Raft 協議,來實現分佈式一致性,確保數據在多個節點之間的一致性。
3.ControllerManager
Controller Manager 負責:執行集羣的後臺任務,包括:節點控制、副本控制、端點控制、和服務賬號控制等。
Controller Manager 包含一堆 “控制器”,包括:節點控制器、複製控制器、端點控制器、和服務控制器... 等。
如下圖所示:
-
節點控制器:負責監視節點的健康狀況,發現失效節點並進行恢復 / 或清理;
-
複製控制器:確保系統中,總是有預期數量的 Pod 副本在運行;
-
端點控制器:填充服務和 Pod 之間的關聯信息,使服務能夠正確找到它們所需要的 Pod;
-
服務控制器:負責創建、和更新集羣內部的服務負載均衡器,(比如:創建雲負載均衡器)。
4.Scheduler
Scheduler 根據資源需求、策略和約束條件,選擇合適的節點運行 Pod。
以及,基於資源需求、策略限制、數據位置、工作負載間隔... 等標準來做調度決策。
工作節點架構組件
在 Kubernetes 的工作節點(Worker Node)中,有幾個關鍵組件,它們共同負責運行實際的應用工作負載。
如下圖所示,綠色框:
上圖右側的綠框就是 Kubernetes 工作節點,包含如下組件:
1.Kubelet
Kubelet 是 Kubernetes 中的主要節點代理,運行在每個節點上,負責確保容器在 Pod 中運行,並且健康。
核心功能:
-
Pod 創建與管理:負責拉取容器鏡像並創建、運行、和管理容器;
-
健康檢查:執行 Pod 和容器的探針(liveness、readiness。。。。。),以確保它們的健康狀態;
-
日誌管理:收集、和管理容器的日誌。
2.Container Runtime
Container Runtime:分別用於管理容器運行、和鏡像,是實際負責拉取容器鏡像、啓動和停止容器的底層。
Kubernetes 支持多種容器運行時,包括:Docker、containerd、和 CRI-O..... 等。
3.Kube-proxy
kube-proxy 負責:在每個節點上實現 Kubernetes 服務的網絡代理,主要處理:網絡流量的轉發、和負載均衡。
比如:設置 iptables、或 ipvs 規則,來實現服務之間的通信、和負載分配。
4.Pod
Pod 是 Kubernetes 的最小部署單元,如下圖所示:
Pod 是一個、或多個容器的集合,這些容器共享存儲、網絡、和運行環境。
每個 Pod ,通常包含:一個主要容器、和一些輔助容器。
並且,Pod 內的容器可以共享數據卷,用於數據持久化、和共享。
以及,通過添加、和刪除 Pod 副本,輕鬆地水平擴展應用程序。
這些組件和概念共同協作,構成了 Kubernetes 的基礎架構,使得它能夠高效地管理和編排容器化應用。
K8S 的應用
K8S 的應用非常的廣泛,比如最典型的包括:
1、微服務架構
Kubernetes 非常適合運行微服務架構的應用程序,通過:服務發現、負載均衡、和自動擴展..... 來管理複雜的微服務部署。
2、DevOps
Kubernetes 支持 CI/CD 管道,簡化了應用程序的構建、測試 / 和部署過程,促進了 DevOps 實踐。
3、混合雲和多雲策略
通過一致的 API 和配置管理,Kubernetes 支持跨多個雲提供商、和本地環境的應用程序部署,促進混合雲、和多雲策略的實現。
4、大數據和機器學習
Kubernetes ,還可以管理大數據處理任務,以及機器學習模型的訓練、和推理,支持彈性計算資源的分配。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/U2Ad2dOokxBfayqiiAjH1w