Kubebuilder v2 与 v3 (旧版 Kubebuilder v2.0.0+ 布局到 3.0.0+)

本文档涵盖了从 v2 迁移到 v3 时的所有重大更改。

所有更改(无论是破坏性或其他类型)的详细信息可以在 controller-runtimecontroller-toolskb-releases 的发布说明中找到。

常见变更

v3 项目使用 Go 模块,并要求 Go 1.18 及以上版本。Dep 不再支持用于依赖管理。

Kubebuilder

  • 增加了对插件的初步支持。有关更多信息,请参阅 可扩展 CLI 和脚手架插件:第一阶段可扩展 CLI 和脚手架插件:第一阶段 1.5可扩展 CLI 和脚手架插件:第二阶段 设计文档。此外,您还可以查看 插件部分

  • PROJECT 文件现在有了新的布局。它存储了更多关于正在使用的资源的信息,以更好地帮助插件在搭建时做出有用的决策。

    此外,PROJECT 文件本身现在也进行了版本控制:version 字段对应于 PROJECT 文件自己的版本,而 layout 字段则指示当前使用的脚手架和主插件版本。

  • 镜像 gcr.io/kubebuilder/kube-rbac-proxy 的版本从 0.5.0 更新到 0.11.0,这是一个默认启用的可选组件,用于保护对管理器的请求,以解决安全问题。所有更改的详细信息可以在 kube-rbac-proxy 中找到。

新版本 go/v3 插件的简述。

您可以在这里找到更多详细信息,但请查看下面的亮点

  • 搭建/生成的 API 版本变更:

    • 使用 apiextensions/v1 来生成 CRD(在 Kubernetes 1.16 中,apiextensions/v1beta1 已被弃用)
    • 对生成的 Webhook 使用 admissionregistration.k8s.io/v1admissionregistration.k8s.io/v1beta1 在 Kubernetes 1.16 中已被弃用)
    • 当使用 Webhook 时,请使用 cert-manager.io/v1 作为证书管理器(cert-manager.io/v1alpha2Cert-Manager 0.14 中已被弃用。更多信息请参见:CertManager v1.0 文档
  • 代码更改:

    • 管理器的标志 --metrics-addrenable-leader-election 现在被命名为 --metrics-bind-address--leader-elect,以更好地与核心 Kubernetes 组件保持一致。更多信息:#1839
    • 活跃性和就绪性探针现在默认使用 healthz.Ping 添加。
    • 引入了一个新的选项,可以使用 ComponentConfig 创建项目。有关更多信息,请参阅其 增强提案组件配置教程
    • 管理器清单现在使用 SecurityContext 来解决安全问题。更多信息请查看:#1637
  • 杂项:

    • controller-tools v0.9.0 的支持(对于 go/v2v0.3.0,之前是 v0.2.5
    • controller-runtime v0.12.1 的支持(对于 go/v2 版本是 v0.6.4,之前是 v0.5.0
    • kustomize v3.8.7的支持(对于go/v2,是v3.5.4,之前是v3.1.0
    • 所需的 Envtest 二进制文件会自动下载。
    • 最低 Go 版本现在是 1.18(之前是 1.13)。

迁移到 Kubebuilder v3

所以你想要升级你的脚手架以使用最新的功能,那么请按照下面的指南进行操作,该指南将以最简单明了的方式介绍步骤,使你能够升级你的项目,以获得所有最新的变更和改进。

通过手动更新文件

因此,如果您想在不更改脚手架的情况下使用最新版本的 Kubebuilder CLI,请查看以下指南,该指南将描述您手动升级仅项目版本并开始使用插件版本所需的步骤。

这种方式更复杂,容易出错,成功也无法得到保证。此外,按照这些步骤操作,您将无法获得默认生成项目文件中的改进和bug修复。

您可以通过使用 go/v2 插件检查是否仍然可以使用之前的布局,该插件不会将 controller-runtimecontroller-tools 升级到与 go/v3 一起使用的最新版本,因为这会导致不兼容的变化。通过查看此指南,您也可以了解如何手动更改文件以使用 go/v3 插件及其依赖版本。