从 go/v3 迁移到 go/v4
在继续之前,请确保您了解 Kubebuilder go/v3 和 go/v4 之间的区别。
请确保您已经按照安装指南安装了所需的组件。
迁移 go/v3
项目的推荐方法是创建一个新的 go/v4
项目,并将 API 和调整代码复制过去。转换后的项目将呈现出原生 go/v4
项目布局的样子(最新版本)。
然而,在某些情况下,可以进行就地升级(即重用 go/v3 项目布局,手动升级 PROJECT 文件和脚手架)。有关更多信息,请参见 通过手动更新文件从 go/v3 迁移到 go/v4。
初始化一个 go/v4 项目
创建一个新目录,使用你的项目名称。请注意,这个名称在脚手架中用于创建你的管理器 Pod 的名称以及管理器默认部署的命名空间。
$ mkdir migration-project-name
$ cd migration-project-name
现在,我们需要初始化一个 go/v4 项目。在此之前,如果我们不在 GOPATH
中,我们需要初始化一个新的 go 模块。虽然从技术上讲,在 GOPATH
内部并不需要,但仍然推荐这样做。
go mod init tutorial.kubebuilder.io/migration-project
现在,我们可以使用 kubebuilder 完成项目的初始化。
kubebuilder init --domain tutorial.kubebuilder.io --plugins=go/v4
迁移 API 和控制器
接下来,我们将重新搭建 API 类型和控制器。
kubebuilder create api --group batch --version v1 --kind CronJob
迁移API
现在,让我们将旧项目中的 api/v1/<kind>_types.go
文件中的 API 定义复制到新项目中。
这些文件没有被新的插件修改,所以您应该可以用旧的文件替换新生成的文件。可能会有一些外观上的变化。因此,您可以选择仅复制类型本身。
迁移控制器
现在,让我们将旧项目中 controllers/cronjob_controller.go
的控制器代码迁移到新项目中的 internal/controller/cronjob_controller.go
。
迁移 Webhooks
现在让我们为我们的 CRD(CronJob)搭建 Webhook。我们需要使用 --defaulting
和 --programmatic-validation
标志运行以下命令(因为我们的测试项目使用了默认值和验证 Webhook):
kubebuilder create webhook --group batch --version v1 --kind CronJob --defaulting --programmatic-validation
现在,让我们将旧项目中的 api/v1/<kind>_webhook.go
的 webhook 定义复制到新项目中。
其他人
如果在 v3 的 main.go
中有任何手动更新,我们需要将这些更改迁移到新的 main.go
中。我们还需要确保所有需要的 controller-runtime schemes
都已注册。
如果在配置目录下添加了其他清单,请一并移植。请注意,新版本的 go/v4 使用 Kustomize v5.x,而不再是 Kustomize v4。因此,如果在配置中添加了自定义实现,您需要确保它们能够与 Kustomize v5 一起使用,如果不能,则需要更新/升级您可能遇到的任何破坏性更改。
在 v4 中,Kustomize 的安装方式已经从 bash 脚本更改为 go get
。请将 Makefile 中的 kustomize
依赖更改为
``如果需要,请在Makefile中更改图像名称。
验证
最后,我们可以运行 make
和 make docker-build
来确保一切正常。