云控制器管理器
云控制器管理器(Cloud Controller Manager,简称 CCM)是一个 Kubernetes 控制平面组件,嵌入了特定于云平台的控制逻辑。它允许将集群连接到云提供商的 API 之上,并将与云平台交互的组件同与集群交互的组件分离开来。
特性状态: Beta since Kubernetes v1.11
通过分离 Kubernetes 和底层云基础设施之间的互操作性逻辑,cloud-controller-manager 组件使云提供商能够以不同于 Kubernetes 主项目的步调发布新特性。
使用云基础设施技术,可以在公有云、私有云或者混合云环境中运行 Kubernetes。Kubernetes 的信条是基于自动化的、API 驱动的基础设施,同时避免组件间紧密耦合。cloud-controller-manager 组件基于一种插件机制来构造,这种机制使得不同的云厂商都能将其平台与 Kubernetes 集成。
官方文档参考
| 官方文档 | 链接 |
|---|---|
| 云控制器管理器(中文) | kubernetes.io/zh-cn/docs/concepts/architecture/cloud-controller |
CCM 与 kube-controller-manager 的关系
在早期版本中,云相关逻辑内嵌在 kube-controller-manager 中;引入 CCM 后,与云平台交互的控制器被剥离到独立的 cloud-controller-manager 进程中。这样:
kube-controller-manager继续负责与具体云无关的通用控制器(如 Deployment、Endpoint 等控制器);cloud-controller-manager专注于与云 API 交互的部分(节点生命周期、路由、负载均衡等);- 云厂商可以独立于 Kubernetes 主项目迭代自己的云驱动。
云厂商发布新特性的节奏与 Kubernetes 社区不同步。把云相关逻辑拆出来后,云厂商可以通过插件机制按自己的节奏发布功能,而不必等待 Kubernetes 大版本,也不必把云厂商代码塞进核心仓库。
设计与运行方式
| 运行方式 | 说明 |
|---|---|
| 多副本进程 | 云控制器管理器以一组多副本的进程集合的形式运行在控制面中,保证高可用 |
| Pod 中的容器 | 通常表现为控制面节点上的 Pod 中的容器 |
| 插件形式 | 也可以用 Kubernetes 插件(Addon)的形式运行,而不是作为控制面的一部分 |
每个 cloud-controller-manager 在同一进程中实现多个控制器。

三大控制器
节点控制器
节点控制器负责在云基础设施中创建了新服务器时为之更新节点(Node)对象。它从云提供商获取当前租户中主机的信息,执行以下功能:
| 功能 | 说明 |
|---|---|
| 更 新 Node 对象 | 使用从云平台 API 获取的对应服务器的唯一标识符更新 Node 对象 |
| 添加注解和标签 | 利用特定云平台的信息为 Node 对象添加注解和标签,例如节点所在的区域(Region)和所具有的资源(CPU、内存等等) |
| 获取网络信息 | 获取节点的网络地址和主机名 |
| 健康检查并删除 Node | 检查节点的健康状况。如果节点无响应,控制器通过云平台 API 查看该节点是否已从云中禁用、删除或终止;如果节点已从云中删除,则控制器从 Kubernetes 集群中删除 Node 对象 |
在某些云驱动实现中,上述任务被划分到一个节点控制器和一个节点生命周期控制器中。
路由控制器
路由控制器(Route Controller)负责适当地配置云平台中的路由,以便 Kubernetes 集群中不同节点上的容器之间可以相互通信。取决于云驱动本身,路由控制器可能也会为 Pod 网络分配 IP 地址块。