Kubernetes 架構總覽
主節點與工作節點
主節點
Kubernetes 的主節點(Master)是組成集群控制平面的關鍵部分,負責整個集群的調度、狀態管理和決策。控制平面由多個核心組件構成,包括:
kube-apiserver
:集群的通信中心,所有組件和用戶請求都要經過它API Server通過443端口對外提供
RESTful風格的接口。kube-controller-manager
:負責各種控制循環,如副本控制、節點狀態監控等(注意,這里有非常多的不同功能的controller被管理,例如Replication Controller,Deployment Controller)kube-scheduler
:負責將新創建的 Pod 調度到合適的工作節點上etcd
:用于保存所有集群狀態數據的分布式數據庫。(所有控制組件的狀態數據都存儲在 etcd 中,它是整個 Kubernetes 的“單一數據源”。)
一種最簡單的部署方式是將這些控制組件部署在同一臺主機上,這適合實驗或測試環境。而在生產環境中,主節點的高可用部署是必不可少的。
通常建議使用 3 或 5 個主節點副本來實現高可用。
(為什么是奇數個?🤔)
因為控制平面依賴 etcd 數據庫,而 etcd 的一致性機制需要多數派(quorum)投票。使用奇數個副本可以有效避免腦裂,保證集群穩定性。
工作節點
工作節點
它是Kubernetes集群中的工作者。從整體上看,工作節點主要負責監聽API Server分派的新任務,執行這些任務,向控制平面回復任務執行的結果(通過API Server),那么他的主要組件如下:
kubelet
:與控制平面通信,監聽API Server分派的新任務,接收任務并管理本節點的 Pod;kube-proxy
:維護網絡規則(iptables/ipvs)和服務的負載均衡;- 容器運行時(如 containerd):用于真正運行容器。
Kubernetes DNS
:Kubernetes集群自己內部的DNS服務,這對于集群操作也是非常重要的。
集群DNS服務有一個靜態IP地址,并且這個IP地址集群總每個Pod上都是硬編碼的,這意味著每個容器以及Pod都能找到DNS服務。每個新服務都會自動注冊到集群DNS服務上,這樣所有集群中的組件都能根據名稱找到相應的服務。一些其他的組件也會注冊到集群DNS服務,例如Statefulset以及由Statefulset管理的獨立Pod。
它是基于CoreDNS來實現的。
一般來說,工作節點就是運行的我們的各種服務,當然也包含工作節點專屬的組件(
kubelet
、kube-proxy
、容器運行時)。