开发云控制器管理器

FEATURE STATE: Kubernetes v1.11 [beta]

组件 cloud-controller-manager 是 云控制器管理器是 1.8 的 alpha 特性。在未来发布的版本中,这是将 Kubernetes 与任何其他云集成的最佳方式。

Kubernetes v1.6 包含一个新的可执行文件叫做 cloud-controller-manager。cloud-controller-manager 是一个守护进程,其中嵌入了特定于某云环境的控制环。 这些特定于云环境的控制环最初位于 kube-controller-manager 中。 由于云供应商的开发和发布节奏与 Kubernetes 项目不同步,将特定于供应商的代码抽象到 cloud-controller-manager 可执行文件可以允许云供应商独立于核心 Kubernetes 代码进行演进。

背景

由于云驱动的开发和发布与 Kubernetes 项目本身步调不同,将特定于云环境 的代码抽象到 cloud-controller-manager 二进制组件有助于云厂商独立于 Kubernetes 核心代码推进其驱动开发。

Kubernetes 项目提供 cloud-controller-manager 的框架代码,其中包含 Go 语言的接口,便于你(或者你的云驱动提供者)接驳你自己的实现。 这意味着每个云驱动可以通过从 Kubernetes 核心代码导入软件包来实现一个 cloud-controller-manager;每个云驱动会通过调用 cloudprovider.RegisterCloudProvider 接口来注册其自身实现代码,从而更新 记录可用云驱动的全局变量。

开发

Out of Tree

要为你的云环境构建一个 out-of-tree 云控制器管理器:

  1. 使用满足 cloudprovider.Interface 的实现创建一个 Go 语言包。
  2. 使用来自 Kubernetes 核心代码库的 cloud-controller-manager 中的 main.go 作为 main.go 的模板。如上所述,唯一的区别应该是将导入的云包。
  3. main.go 中导入你的云包,确保你的包有一个 init 块来运行 cloudprovider.RegisterCloudProvider。

很多云驱动都将其控制器管理器代码以开源代码的形式公开。 如果你在开发一个新的 cloud-controller-manager,你可以选择某个 out-of-tree 云控制器管理器作为出发点。

In Tree

对于 in-tree 驱动,你可以将 in-tree 云控制器管理器作为群集中的 Daemonset 来运行。 有关详细信息,请参阅云控制器管理器管理