雲端控制器管理員

功能狀態: Kubernetes v1.11 [beta]

雲端基礎架構技術可讓您在公有雲、私有雲和混合雲上執行 Kubernetes。Kubernetes 相信自動化、API 驅動的基礎架構,組件之間沒有緊密耦合。

cloud-controller-manager 是一個 Kubernetes 控制平面 元件,它嵌入了雲端特定的控制邏輯。雲端控制器管理員可讓您將叢集連結到雲端供應商的 API,並將與該雲端平台互動的元件與僅與叢集互動的元件分開。

透過將 Kubernetes 和底層雲端基礎架構之間的互通性邏輯分離,cloud-controller-manager 元件使雲端供應商能夠以不同於主要 Kubernetes 專案的步調發布功能。

cloud-controller-manager 使用外掛程式機制建構,該機制允許不同的雲端供應商將其平台與 Kubernetes 整合。

設計

Kubernetes components

雲端控制器管理員在控制平面中作為一組複寫的程序執行(通常,這些是 Pod 中的容器)。每個 cloud-controller-manager 在單一程序中實作多個 控制器

雲端控制器管理員功能

雲端控制器管理員內部的控制器包括

節點控制器

節點控制器負責在雲端基礎架構中建立新伺服器時更新 Node 物件。節點控制器從雲端供應商取得關於在您的租用戶內執行的主機資訊。節點控制器執行以下功能

  1. 使用從雲端供應商 API 取得的對應伺服器唯一識別碼更新 Node 物件。
  2. 使用雲端特定的資訊(例如節點部署到的區域和它可用的資源(CPU、記憶體等))註解和標記 Node 物件。
  3. 取得節點的主機名稱和網路位址。
  4. 驗證節點的健康狀態。如果節點變得沒有回應,此控制器會檢查您的雲端供應商的 API,以查看伺服器是否已停用/刪除/終止。如果節點已從雲端刪除,控制器會從您的 Kubernetes 叢集中刪除 Node 物件。

某些雲端供應商實作將其分成節點控制器和個別的節點生命週期控制器。

路由控制器

路由控制器負責在雲端中適當地設定路由,以便 Kubernetes 叢集中不同節點上的容器可以彼此通訊。

根據雲端供應商,路由控制器也可能會為 Pod 網路分配 IP 位址區塊。

服務控制器

服務 與雲端基礎架構元件(例如託管負載平衡器、IP 位址、網路封包篩選和目標健康狀態檢查)整合。當您宣告需要這些元件的 Service 資源時,服務控制器會與您的雲端供應商的 API 互動,以設定負載平衡器和其他基礎架構元件。

授權

本節細分雲端控制器管理員為了執行其操作而需要對各種 API 物件的存取權。

節點控制器

節點控制器僅適用於 Node 物件。它需要完全存取權才能讀取和修改 Node 物件。

v1/Node:

  • get
  • list
  • create
  • update
  • patch
  • watch
  • delete

路由控制器

路由控制器監聽 Node 物件建立並適當地設定路由。它需要對 Node 物件的 Get 存取權。

v1/Node:

  • get

服務控制器

服務控制器監看 Service 物件的 createupdatedelete 事件,然後適當地設定這些服務的端點(對於 EndpointSlices,kube-controller-manager 會依需求管理這些)。

若要存取服務,它需要 listwatch 存取權。若要更新服務,它需要 patchupdate 存取權。

若要為服務設定端點資源,它需要存取 createlistgetwatchupdate

v1/Service:

  • list
  • get
  • watch
  • patch
  • update

其他

雲端控制器管理員核心的實作需要存取權限來建立 Event 物件,並且為了確保安全運作,它需要存取權限來建立 ServiceAccount。

v1/Event:

  • create
  • patch
  • update

v1/ServiceAccount:

  • create

雲端控制器管理員的 RBAC ClusterRole 看起來像這樣

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cloud-controller-manager
rules:
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - patch
  - update
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - '*'
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - patch
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - list
  - patch
  - update
  - watch
- apiGroups:
  - ""
  resources:
  - serviceaccounts
  verbs:
  - create
- apiGroups:
  - ""
  resources:
  - persistentvolumes
  verbs:
  - get
  - list
  - update
  - watch
- apiGroups:
  - ""
  resources:
  - endpoints
  verbs:
  - create
  - get
  - list
  - watch
  - update

接下來是什麼

  • 雲端控制器管理員管理 提供了關於執行和管理雲端控制器管理員的說明。

  • 若要升級 HA 控制平面以使用雲端控制器管理員,請參閱遷移複寫的控制平面以使用雲端控制器管理員

  • 想知道如何實作您自己的雲端控制器管理員,或擴展現有的專案嗎?

    • 雲端控制器管理員使用 Go 介面,特別是 CloudProvider 介面,定義在 cloud.go 中,來自 kubernetes/cloud-provider,以允許任何雲端的實作可以插入。
    • 此文件中強調的共用控制器(Node、Route 和 Service)的實作,以及一些骨架程式碼以及共用的 cloudprovider 介面,是 Kubernetes 核心的一部分。特定於雲端供應商的實作在 Kubernetes 核心之外,並實作 CloudProvider 介面。
    • 有關開發外掛程式的更多資訊,請參閱開發雲端控制器管理員
上次修改時間為 2023 年 3 月 21 日下午 7:59 PST:根據評論進行變更 (9e7b29be21)