雲控制器管理器
Kubernetes v1.11 [beta]
雲基礎設施技術允許你在公共雲、私有云和混合雲上執行 Kubernetes。Kubernetes 倡導自動化、API 驅動的基礎設施,且元件之間沒有緊密耦合。
雲控制器管理器 (cloud-controller-manager) 是一個 Kubernetes 控制平面元件,它嵌入了雲特定的控制邏輯。雲控制器管理器允許你將叢集連結到雲提供商的 API,並將與該雲平臺互動的元件與僅與叢集互動的元件分離開來。
透過解耦 Kubernetes 與底層雲基礎設施之間的互操作性邏輯,雲控制器管理器元件使雲提供商能夠以與 Kubernetes 主專案不同的速度釋出特性。
雲控制器管理器採用外掛機制構建,允許不同的雲提供商將其平臺與 Kubernetes 整合。
設計
雲控制器管理器在控制平面中作為一組複製的程序(通常是 Pod 中的容器)執行。每個雲控制器管理器在一個程序中實現多個控制器。
注意
你也可以將雲控制器管理器作為 Kubernetes 外掛而不是控制平面的一部分執行。雲控制器管理器功能
雲控制器管理器中的控制器包括:
節點控制器
節點控制器負責在你的雲基礎設施中建立新伺服器時更新 Node 物件。節點控制器獲取在你的雲提供商租戶中執行的主機資訊。節點控制器執行以下功能:
- 使用從雲提供商 API 獲取的相應伺服器的唯一識別符號更新 Node 物件。
- 使用雲特定的資訊(例如節點部署的區域以及可用的資源(CPU、記憶體等))為 Node 物件添加註解和標籤。
- 獲取節點的 hostname 和網路地址。
- 驗證節點的健康狀況。如果節點無響應,此控制器會向雲提供商的 API 查詢伺服器是否已被停用/刪除/終止。如果節點已從雲中刪除,控制器會從你的 Kubernetes 叢集中刪除 Node 物件。
有些雲提供商實現將此拆分為節點控制器和獨立的節點生命週期控制器。
路由控制器
路由控制器負責在雲中適當地配置路由,以便 Kubernetes 叢集中不同節點上的容器可以相互通訊。
根據雲提供商的不同,路由控制器可能還會為 Pod 網路分配 IP 地址塊。
服務控制器
服務與雲基礎設施元件整合,例如託管負載均衡器、IP 地址、網路資料包過濾和目標健康檢查。當你宣告需要負載均衡器和其他基礎設施元件的服務資源時,服務控制器會與雲提供商的 API 互動以設定這些元件。
授權
本節詳細說明了雲控制器管理器執行其操作所需的對各種 API 物件的訪問許可權。
節點控制器
節點控制器只處理 Node 物件。它需要完全的讀寫 Node 物件的許可權。
v1/Node
:
- get
- list
- create
- update
- patch
- watch
- delete
路由控制器
路由控制器偵聽 Node 物件的建立並適當地配置路由。它需要對 Node 物件有 Get 訪問許可權。
v1/Node
:
- get
服務控制器
服務控制器監聽 Service 物件的建立、更新和刪除事件,然後為這些 Service 適當地配置負載均衡器。
為了訪問 Services,它需要 list 和 watch 訪問許可權。為了更新 Services,它需要對 status
子資源有 patch 和 update 訪問許可權。
v1/Service
:
- list
- get
- watch
- patch
- update
其他
雲控制器管理器核心的實現需要建立 Event 物件,並且為了確保安全操作,它需要建立 ServiceAccounts 的許可權。
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
- watch
- apiGroups:
- ""
resources:
- services/status
verbs:
- patch
- update
- apiGroups:
- ""
resources:
- serviceaccounts
verbs:
- create
- apiGroups:
- ""
resources:
- persistentvolumes
verbs:
- get
- list
- update
- watch
下一步
雲控制器管理器管理提供了執行和管理雲控制器管理器的說明。
要將 HA 控制平面升級以使用雲控制器管理器,請參閱遷移複製的控制平面以使用雲控制器管理器。
想知道如何實現你自己的雲控制器管理器,或者擴充套件一個現有專案?
- 雲控制器管理器使用 Go 介面,特別是 kubernetes/cloud-provider 中
cloud.go
檔案定義的CloudProvider
介面,允許插入任何雲的實現。 - 本文件中強調的共享控制器(節點、路由和服務)的實現,以及一些腳手架和共享的 cloudprovider 介面,是 Kubernetes 核心的一部分。特定於雲提供商的實現不在 Kubernetes 核心之外,它們實現
CloudProvider
介面。 - 有關開發外掛的更多資訊,請參閱開發雲控制器管理器。
- 雲控制器管理器使用 Go 介面,特別是 kubernetes/cloud-provider 中