开发云控制器管理器
FEATURE STATE:
Kubernetes v1.11
beta该功能目前处于 beta 状态,意味着:
- 版本名称包含 beta (例如 v2beta3)。
- 代码经过了充分测试,启用该功能被认为是安全的。默认情况下被启用。
- 对整体功能的支持在未来不会被移除,尽管细节上可能会做更改。
- 在后续的 beta 或稳定版本中,对象的模式、语义可能以不兼容的方式发生变化。当这种情况发生时,我们将提供迁移到下一个版本的说明。这可能需要删除、编辑和重建 API 对象,编辑过程可能需要一些思考。这可能导致依赖该功能的应用程序停机一段时间。
- 建议仅在非业务关键场景使用该功能,因为在后续版本中可能会发生不兼容的更改。如果您有多个可以独立升级的集群,那么您可能可以放松这个限制。
- 请尝试使用我们的 beta 版功能,并给出反馈!在它们退出 beta 测试阶段之后,我们将很难去做更多的更改。
在即将发布的版本中,云控制器管理器将是把 Kubernetes 与任何云集成的首选方式。 这将确保驱动可以独立于核心 Kubernetes 发布周期开发其功能。
FEATURE STATE:
Kubernetes 1.8
alpha该功能目前处于 alpha 状态,意味着:
- 版本名称包含 alpha(例如 v1alpha1)。
- 可能存在问题,启用该功能可能会暴露 bug。默认情况下被禁用。
- 对该功能的支持可能在任何时候被取消,而不另行通知。
- API 可能会在以后的软件版本中以不兼容的方式被更改,而不另行通知。
- 建议仅在短期测试集群中使用该功能,这是因为使用该功能会增加出现 bug 的风险,而且缺乏长期支持。
在讨论如何构建自己的云控制器管理器之前,了解有关它如何工作的一些背景知识是有帮助的。云控制器管理器是来自 kube-controller-manager
的代码,利用 Go 接口允许插入任何云的实现。大多数框架和通用控制器的实现在 core,但只要满足 云提供者接口,它就会始终执行它所提供的云接口。
为了深入了解实施细节,所有云控制器管理器都将从 Kubernetes 核心导入依赖包,唯一的区别是每个项目都会通过调用 cloudprovider.RegisterCloudProvider 来注册自己的驱动,更新可用驱动的全局变量。
开发
Out of Tree
要为您的云构建一个 out-of-tree 云控制器管理器,请按照下列步骤操作:
- 使用满足 cloudprovider.Interface 的实现创建一个 go 包。
- 使用来自 Kubernetes 核心包的 cloud-controller-manager 中的 main.go 作为 main.go 的模板。如上所述,唯一的区别应该是将导入的云包。
- 在
main.go
中导入你的云包,确保你的包有一个init
块来运行 cloudprovider.RegisterCloudProvider。
用现有的 out-of-tree 云驱动作为例子可能会有所帮助。你可以在这里找到 清单。
In Tree
对于 in-tree 驱动,您可以将 in-tree 云控制器管理器作为群集中的 Daemonset 运行。有关详细信息,请参阅 运行的云控制器管理器文档。
反馈
此页是否对您有帮助?
感谢反馈。如果您有一个关于如何使用 Kubernetes 的特定的、需要答案的问题,可以访问 Stack Overflow. 在 GitHub 仓库上登记新的问题 报告问题 或者 提出改进建议.