云控制器管理器
Kubernetes v1.11 [beta]
云基础设施技术使你能够在公有云、私有云和混合云上运行 Kubernetes。Kubernetes 倡导自动化、API 驱动的基础设施,组件之间没有紧密的耦合。
cloud-controller-manager 是一个 Kubernetes 控制平面组件,它嵌入了云提供商特定的控制逻辑。cloud-controller-manager 使你的集群能够与你的云提供商 API 链接,并将与云平台交互的组件与仅与集群交互的组件分离。
通过解耦 Kubernetes 与底层云基础设施之间的互操作逻辑,cloud-controller-manager 组件使得云提供商能够以与主 Kubernetes 项目不同的速度发布特性。
cloud-controller-manager 使用插件机制构建,这使得不同的云提供商能够将其平台与 Kubernetes 集成。
设计
cloud controller manager 在控制平面中作为一组复制的进程运行(通常,它们是 Pod 中的容器)。每个 cloud-controller-manager 在单个进程中实现多个控制器。
说明
你也可以将 cloud controller manager 作为 Kubernetes 附加组件来运行,而不是作为控制平面的一部分。cloud controller manager 功能
cloud controller manager 中的控制器包括
节点控制器
节点控制器负责在你的云基础设施中创建新服务器时更新 Node 对象。节点控制器获取在你租户内运行的主机信息,并与云提供商交互。节点控制器执行以下功能:
- 使用从云提供商 API 获取的对应服务器唯一标识符更新 Node 对象。
- 使用云提供商特定的信息(例如节点部署的区域及其可用的资源,如 CPU、内存等)来注解和标记 Node 对象。
- 获取节点的 hostname 和网络地址。
- 验证节点的健康状况。如果一个节点无响应,该控制器会检查你的云提供商 API,看服务器是否已被停用/删除/终止。如果节点已从云中删除,该控制器会从你的 Kubernetes 集群中删除 Node 对象。
有些云提供商的实现会将此功能拆分为节点控制器和单独的节点生命周期控制器。
路由控制器
路由控制器负责在云端配置合适的路由,使得 Kubernetes 集群中不同节点上的容器可以互相通信。
根据云提供商的不同,路由控制器也可能为 Pod 网络分配 IP 地址块。
Service 控制器
Service 与云基础设施组件(例如托管负载均衡器、IP 地址、网络包过滤和目标健康检查)集成。当你声明一个需要它们的 Service 资源时,service 控制器会与你的云提供商 API 交互,以设置负载均衡器和其他基础设施组件。
授权
本节详细介绍了 cloud controller manager 在各种 API 对象上执行其操作所需的访问权限。
节点控制器
节点控制器仅与 Node 对象配合使用。它需要完全访问权限来读取和修改 Node 对象。
v1/Node
:
- get
- list
- create
- update
- patch
- watch
- delete
路由控制器
路由控制器监听 Node 对象的创建事件并配置相应的路由。它需要对 Node 对象有 Get 访问权限。
v1/Node
:
- get
Service 控制器
Service 控制器监听 Service 对象的 create、update 和 delete 事件,然后为这些 Service 配置合适的负载均衡器。
要访问 Service,它需要 list 和 watch 访问权限。要更新 Service,它需要对 status
子资源有 patch 和 update 访问权限。
v1/Service
:
- list
- get
- watch
- patch
- update
其他
cloud controller manager 核心的实现需要有创建 Event 对象的访问权限,并且为了确保安全操作,它还需要有创建 ServiceAccount 的访问权限。
v1/Event
:
- create
- patch
- update
v1/ServiceAccount
:
- create
cloud controller manager 的 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
下一步
Cloud Controller Manager 管理提供了运行和管理 cloud controller manager 的说明。
要将高可用控制平面升级为使用 cloud controller manager,请参阅迁移复制的控制平面以使用 Cloud Controller Manager。
想知道如何实现你自己的 cloud controller manager 或扩展现有项目吗?
- cloud controller manager 使用 Go 接口,特别是 kubernetes/cloud-provider 项目中
cloud.go
中定义的CloudProvider
接口,以允许插入来自任何云提供商的实现。 - 本文档中强调的共享控制器(Node、Route 和 Service)的实现,以及一些基础框架和共享的 cloudprovider 接口,是 Kubernetes 核心的一部分。特定于云提供商的实现位于 Kubernetes 核心之外,并实现了
CloudProvider
接口。 - 有关开发插件的更多信息,请参阅开发 Cloud Controller Manager。
- cloud controller manager 使用 Go 接口,特别是 kubernetes/cloud-provider 项目中