初識Kubernetes 集群
什么叫Kubernetes
Kubernetes (K8s) 集群是一組節點,它們以高效、自動化、分布式和可擴展的方式運行容器化應用程序。
K8s 集群允許工程師跨多個物理、虛擬和云服務器編排和監控容器。這將容器與底層硬件層分離,并實現敏捷和健壯的部署。一個 Kubernetes 集群由一組工作機器組成,稱為節點,運行容器化應用程序。
每個集群至少有一個工作節點,工作節點托管豆莢它們是應用程序工作負載的組成部分。這控制平面管理集群中的工作節點和 Pod。在生產環境中,控制平面通常跨多臺計算機運行,集群通常運行多個節點,提供容錯和高可用性。
Kubernetes的組件

控制平面組件
控制平面的組件對集群做出全局決策(例如,調度),以及檢測和響應集群事件。
控制平面組件可以在集群中的任何機器上運行。但是,為簡單起見,設置腳本通常在同一臺機器上啟動所有控制平面組件,并且不在這臺機器上運行用戶容器。
kube-apiserver
API 服務器是 Kubernetes 的一個組件控制平面公開 Kubernetes API。API 服務器是 Kubernetes 控制平面的前端。
Kubernetes API 服務器的主要實現是kube-apiserver。kube-apiserver 旨在水平擴展——也就是說,它通過部署更多實例來擴展。可以運行多個 kube-apiserver 實例并平衡這些實例之間的流量。
etcd
一致且高度可用的鍵值存儲,用作 Kubernetes 的所有集群數據的后備存儲。
kube-scheduler
監視新創建的控制平面組件豆莢沒有分配節點,并選擇一個節點讓它們運行。
調度決策考慮的因素包括:個人和集體資源要求、硬件/軟件/策略約束、親和性和反親和性規范、數據局部性、工作負載間干擾和截止日期。
云控制器管理器
一個 Kubernetes控制平面嵌入云特定控制邏輯的組件。云控制器管理器允許您將集群鏈接到云提供商的 API,并將與該云平臺交互的組件與僅與您的集群交互的組件分開。
cloud-controller-manager 僅運行特定于您的云提供商的控制器。如果您在自己的場所運行 Kubernetes,或者在您自己 PC 內的學習環境中運行 Kubernetes,則集群沒有云控制器管理器。
與 kube-controller-manager 一樣,cloud-controller-manager 將幾個邏輯上獨立的控制循環組合成一個二進制文件,您可以將其作為單個進程運行。您可以水平擴展(運行多個副本)以提高性能或幫助容忍故障。
以下控制器可以具有云提供商依賴項:
- 節點控制器:用于檢查云提供商以確定節點停止響應后是否已在云中刪除
- 路由控制器:用于在底層云基礎設施中設置路由
- 服務控制器:用于創建、更新和刪除云提供商負載均衡器
節點組件
節點組件在每個節點上運行,維護運行的 pod 并提供 Kubernetes 運行時環境。
Pod
運行在每個代理上的代理節點在集群中。
kubelet 采用一組通過各種機制提供的 PodSpec,并確保這些 PodSpec 中描述的容器運行且健康。kubelet 不管理不是由 Kubernetes 創建的容器。
kube-代理
kube-proxy 是一個網絡代理,運行在每個節點在您的集群中,實現 Kubernetes 的一部分服務概念。
kube-proxy在節點上維護網絡規則。這些網絡規則允許從集群內部或外部的網絡會話與 Pod 進行網絡通信。
kube-proxy 使用操作系統包過濾層(如果有并且可用)。否則,kube-proxy 會自行轉發流量。
容器運行時
容器運行時是負責運行容器的軟件。
Kubernetes 支持容器運行時,例如容器化,CRI-O [1] ,以及Kubernetes CRI(容器運行時接口)[2] 的任何其他實現。
插件
插件使用 Kubernetes 資源 (守護程序集 [3] , 部署 [4] 等)來實現集群功能。因為這些提供集群級別的功能,所以插件的命名空間資源屬于kube-system命名空間。
域名系統
雖然其他插件不是嚴格要求的,但所有 Kubernetes 集群都應該有 集群 DNS [5],因為許多示例都依賴它。
除了您環境中的其他 DNS 服務器之外,集群 DNS 是一個 DNS 服務器,它為 Kubernetes 服務提供 DNS 記錄。
由 Kubernetes 啟動的容器會自動在其 DNS 搜索中包含此 DNS 服務器。
網頁界面(儀表板)
Dashboard是用于 Kubernetes 集群的通用、基于 Web 的 UI。它允許用戶對集群中運行的應用程序以及集群本身進行管理和故障排除。
容器資源監控
Container Resource Monitoring在中央數據庫中記錄有關容器的通用時間序列指標,并提供用于瀏覽該數據的 UI。
集群級日志記錄
集群級別的日志機制負責將容器日志保存到具有搜索/瀏覽界面的中央日志存儲中。
參考鏈接
[1] CRI-O:
https://cri-o.io/#what-is-cri-o
[2]Kubernetes CRI(容器運行時接口):
https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md
[3] 守護程序集:
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
[4]部署:
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
[5] 集群 DNS:
https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/