云控制器管理器
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 中