云控制器管理器

特性状态: Kubernetes v1.11 [测试版]

云基础架构技术允许你在公有云、私有云和混合云上运行 Kubernetes。Kubernetes 相信自动化、API 驱动的基础架构,组件之间没有紧密耦合。

云控制器管理器是一个 Kubernetes 控制平面 组件,它嵌入了特定于云的控制逻辑。云控制器管理器允许你将集群链接到云提供商的 API,并将与该云平台交互的组件与仅与集群交互的组件分离。

通过解耦 Kubernetes 和底层云基础架构之间的互操作性逻辑,云控制器管理器组件使云提供商能够以不同于 Kubernetes 主项目的节奏发布功能。

云控制器管理器使用插件机制构建,该机制允许不同的云提供商将其平台与 Kubernetes 集成。

设计

Kubernetes components

云控制器管理器在控制平面中作为一组复制的进程运行(通常,这些进程是 Pod 中的容器)。每个云控制器管理器在一个进程中实现多个 控制器

云控制器管理器功能

云控制器管理器中的控制器包括:

节点控制器

节点控制器负责在云基础架构中创建新服务器时更新 节点 对象。节点控制器使用云提供商获取有关租户中运行的主机的的信息。节点控制器执行以下功能:

  1. 使用从云提供商 API 获取的相应服务器的唯一标识符更新节点对象。
  2. 使用特定于云的信息注释和标记节点对象,例如节点部署到的区域以及它可用的资源(CPU、内存等)。
  3. 获取节点的主机名和网络地址。
  4. 验证节点的健康状况。如果节点无响应,此控制器将检查云提供商的 API,以查看服务器是否已停用/删除/终止。如果节点已从云中删除,则控制器会从 Kubernetes 集群中删除节点对象。

一些云提供商实现将其拆分为一个节点控制器和一个单独的节点生命周期控制器。

路由控制器

路由控制器负责在云中适当地配置路由,以便 Kubernetes 集群中不同节点上的容器可以相互通信。

根据云提供商的不同,路由控制器还可以为 Pod 网络分配 IP 地址块。

服务控制器

服务 与云基础架构组件集成,例如托管负载均衡器、IP 地址、网络数据包过滤和目标健康检查。当你声明需要负载均衡器和其他基础架构组件的服务资源时,服务控制器会与云提供商的 API 交互以设置它们。

授权

本节详细介绍了云控制器管理器在各种 API 对象上执行其操作所需的访问权限。

节点控制器

节点控制器仅适用于节点对象。它需要完全访问权限才能读取和修改节点对象。

v1/节点:

  • 获取
  • 列出
  • 创建
  • 更新
  • 修补
  • 监视
  • 删除

路由控制器

路由控制器侦听节点对象创建并适当地配置路由。它需要对节点对象的获取访问权限。

v1/节点:

  • 获取

服务控制器

服务控制器监视服务对象的**创建**、**更新**和**删除**事件,然后为这些服务适当地配置端点(对于 EndpointSlices,kube-controller-manager 按需管理这些事件)。

要访问服务,它需要**列出**和**监视**访问权限。要更新服务,它需要**修补**和**更新**访问权限。

要为服务设置端点资源,它需要**创建**、**列出**、**获取**、**监视**和**更新**访问权限。

v1/服务:

  • 列出
  • 获取
  • 监视
  • 修补
  • 更新

其他

云控制器管理器的核心实现需要访问权限才能创建事件对象,并且为了确保安全操作,它需要访问权限才能创建服务帐户。

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,允许插入来自任何云的实现。
    • 本文档中突出显示的共享控制器(节点、路由和服务)的实现以及一些脚手架以及共享的云提供商接口是 Kubernetes 核心的一部分。特定于云提供商的实现不在 Kubernetes 核心之外,并实现了 CloudProvider 接口。
    • 有关开发插件的更多信息,请参阅 开发云控制器管理器
上次修改时间:2023 年 3 月 21 日下午 7:59(太平洋标准时间):根据审查进行更改 (9e7b29be21)