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