天天看點

Kubernetes - Kubernetes 元件

Kubernetes - Kubernetes 元件

當你部署完Kubernetes, 即擁有了一個完整的叢集。

Kubernetes叢集由一組稱為節點( ​

​nodes​

​)的工作機器組成,它們運作容器化的應用程式。每個叢集至少有一個工作節點。

工作節點托管作為應用程式工作負載的元件 - Pod。控制平面(​

​control plane​

​)管理叢集中的工作節點和Pod。在生産環境中,控制平面通常跨多台計算機運作,叢集通常運作多個節點,進而提供容錯性和高可用性。

這是一張Kubernetes叢集的圖,所有元件都綁定在一起。

Kubernetes - Kubernetes 元件

1. 控制平面元件 - Control Plane Components

控制平面元件做出關于叢集的全局決策(如排程),以及檢測和響應叢集事件(例如,當不滿足部署的​

​replicas​

​字段時,啟動新的Pod)。

控制平面元件可以在叢集中的任何計算機上運作。但是,為了簡單起見,設定腳本通常在同一台計算機上啟動所有控制平面元件,而不在此計算機上運作使用者容器。

kube-apiserver

API伺服器是公開Kubernetes API的控制平面元件。API伺服器是控制平面的前端。

Kubernetes API伺服器的主要實作是​

​kube-apiserver​

​​。​

​kube-apiserver​

​​設計為水準擴充,即通過部署更多執行個體來擴充。你可以運作多個​

​kube-apiserver​

​執行個體,并在這些執行個體之間平衡流量,即負載均衡。

etcd

具備一緻性和高可用性的鍵值存儲,作為儲存Kubernetes所有叢集資料的背景資料庫。

​etcd​

​​是CoreOS團隊發起的開源項目,它的目标是建構一個高可用的分布式鍵值(​

​key-value​

​​)資料庫。​

​etcd​

​​内部采用​

​raft​

​​協定作為一緻性算法,​

​etcd​

​基于Go語言實作。

kube-scheduler

該控制平面元件,用于監視沒有指定節點的新建立的Pod,并為它們選擇要在其上運作的節點。

排程決策要考慮的因素包括:單個Pod和Pod集合的資源需求、硬體/軟體/政策限制、親和性和反親和性規範、資料局部性、工作負載間的幹擾和截止日期。

kube-controller-manager

運作控制器程序的控制平面元件。

從邏輯上講,每個控制器都是一個獨立的程序,但是為了降低複雜性,它們都被編譯成一個二進制檔案并在單個程序中運作。

這些控制器包括:

  • 節點控制器(​

    ​Node controller​

    ​):負責節點發生故障時的通知和響應。
  • 副本控制器(​

    ​Replication controller​

    ​):負責為系統中的每個副本控制器對象維護正确數量的Pod。
  • 端點控制器(​

    ​Endpoints controller​

    ​​):填充端點(​

    ​Endpoints​

    ​)對象(即加入Service與Pod)。
  • 服務帳戶和令牌控制器(​

    ​Service Account & Token controllers​

    ​):為新命名空間建立預設帳戶和API通路令牌。

cloud-controller-manager

雲控制器管理器(​

​cloud-controller-manager​

​)是嵌入特定雲的控制邏輯的控制平面元件。雲控制器管理器允許你将叢集連結到雲提供商的API中,并将與該雲平台互動的元件與僅與叢集互動的元件分離。

雲控制器管理器隻運作特定雲提供商的控制器。如果你在自己的環境中運作Kubernetes,或者在本地計算機的學習環境中運作Kubernetes,那麼叢集沒有雲控制器管理器。

與​

​kube-controller-manager​

​一樣,雲控制器管理器将若幹個邏輯上獨立的控制回路組合成一個二進制檔案,你可以将其作為單個程序運作。你可以水準擴充(運作多個副本)以提高性能或增強容錯能力。

下面的控制器都包含對雲平台驅動的依賴:

  • 節點控制器(​

    ​Node controller​

    ​):用于檢查雲提供商,以确定節點停止響應後是否已在雲中删除。
  • 路由控制器(​

    ​Route controller​

    ​):用于在底層雲基礎設施中設定路由。
  • 服務控制器(​

    ​Service controller​

    ​):用于建立、更新和删除雲提供商負載均衡器。

2. 節點元件 - Node Components

節點元件運作在每個節點上,維護運作中的Pod并提供Kubernetes運作環境。

kubelet

在叢集中每個節點上運作的代理。它保證容器都運作在Pod中。

​kubelet​

​​采用一組PodSpecs ,這些PodSpecs通過各種機制提供,并確定這些PodSpecs中描述的容器運作正常。​

​kubelet​

​不管理非Kubernetes建立的容器。

kube-proxy

​kube-proxy​

​​是一個網絡代理,運作在叢集中的每個節點上,實作了Kubernetes服務(​

​Service​

​) 概念的一部分。

​kube-proxy​

​在節點上維護網絡規則。這些網絡規則允許通過叢集内外的網絡會話與Pod進行網絡通信。

​kube-proxy​

​​使用作業系統包過濾層(如果有并且可用的話),​

​kube-proxy​

​​會通過它來實作網絡規則。否則,​

​kube-proxy​

​轉發流量本身。

Container runtime

容器運作環境(​

​Container runtime​

​)是負責運作容器的軟體。

Kubernetes支援多個容器運作環境:​

​Docker​

​​、​

​containerd​

​​、​

​CRI-O​

​​和​

​Kubernetes CRI​

​(容器運作環境接口)的任何實作。

3. 插件 - Addons

插件(​

​Addons​

​​)使用Kubernetes資源(​

​DaemonSet​

​​、 ​

​Deployment​

​​等)來實作叢集功能,因為它們提供叢集級别的功能,是以插件的命名空間資源屬于​

​kube-system​

​命名空間。

  • ​DaemonSet​

    ​​:​

    ​DaemonSet​

    ​​確定全部(或者某些)節點上運作一個Pod的副本。當有節點加入叢集時, 也會為它們新增一個Pod 。 當有節點從叢集中移除時,這些Pod也會被回收。删除​

    ​DaemonSet​

    ​将會删除它建立的所有Pod。
  • ​Deployment​

    ​​:一個​

    ​Deployment​

    ​​控制器為​

    ​Pods​

    ​​和​

    ​ReplicaSets​

    ​​提供聲明式的更新能力。你負責描述​

    ​Deployment​

    ​​控制器中的目标狀态,而​

    ​Deployment​

    ​​控制器以受控速率更改實際狀态, 使其變為期望狀态。你可以定義​

    ​Deployment​

    ​​控制器建立新的​

    ​ReplicaSet​

    ​​,或删除現有​

    ​Deployment​

    ​​控制器, 并通過新的​

    ​Deployment​

    ​控制器收養其資源。

DNS

雖然其他插件不是嚴格要求的,但是幾乎所有Kubernetes叢集都應該有叢集DNS,因為很多示例都需要DNS服務。

叢集DNS是一個DNS伺服器,和你環境中的其他DNS伺服器一起工作,它為Kubernetes服務提供DNS記錄。

由Kubernetes啟動的容器自動将此DNS伺服器包含在其DNS搜尋清單中。

Web UI (Dashboard)

Dashboard是一個Kubernetes叢集通用的、基于​

​Web​

​的使用者界面。它允許使用者管理叢集中運作的應用程式以及叢集本身并進行故障排除。

Container Resource Monitoring

Cluster-level Logging

官網原文

  • ​​Kubernetes Components​​