使用 Kubebuilder 生成控制器 Gen

Mab*_*Oza 1 containers kubernetes kubebuilder kubernetes-operator

我正在尝试在 Kubebuilder 中构建我的自定义资源项目,但每当我构建它时,我似乎都缺少我的控制器生成。我不断收到错误:

/Users/*****/Kubernetes/postgres-writer-operator/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
bash: /Users/****/Kubernetes/postgres-writer-operator/bin/controller-gen: No such file or directory
make: *** [generate] Error 127
Error: failed to create API: unable to run post-scaffold tasks of "base.go.kubebuilder.io/v3": exit status 2
Usage:
  kubebuilder create api [flags]
Run Code Online (Sandbox Code Playgroud)

我是 Kubernetes 新手,正在遵循以下教程: https://yash-kukreja-98.medium.com/develop-on-kubernetes-series-operator-dev-understanding-and-dissecting-kubebuilder-4321d3ecd7d6

首先,我运行以下命令来引导我的项目:

kubebuilder init \
--domain yash.com \
--repo github.com/yashvardhan-kukreja/postgres-writer-operator \
--project-name postgres-writer-operator \
--license apache2 \
--skip-go-version-check
Run Code Online (Sandbox Code Playgroud)

运行命令后,我进入目录并找到以下文件和文件夹: 在此输入图像描述

然后下一步是为我的自定义资源 PostgresWriter 运行引导程序并将其附加到运算符。

kubebuilder create api \
--group demo \
--version v1 \
--kind PostgresWriter \
--resource true \
--controller true \
--namespaced true
Run Code Online (Sandbox Code Playgroud)

这导致了上面列出的错误。如何使用 kubebuilder 生成控制器生成器?我在这里缺少一个步骤吗?

仅供参考,go 版本是 1.18。

Mab*_*Oza 7

这不是一个完美的解决方案,这应该适用于最新的 go 版本,但事实并非如此,所以我不得不将 go 版本降级到 1.17,然后它就工作了

总结一下我从这篇文章中学到的有关降级 go 版本的知识。 https://blog.notmyhostna.me/posts/downgrade-go-installed-with-homebrew/

安装1.17版本go

brew install go@1.17
Run Code Online (Sandbox Code Playgroud)

您仍然会看到版本没有更改,因此您需要通过运行取消链接当前版本

brew unlink go
Run Code Online (Sandbox Code Playgroud)

现在您可以链接 Go 的 1.17 版本,因此当您链接 Go 版本时,您将获得 1.17。

brew link --force go@1.17
Run Code Online (Sandbox Code Playgroud)

瞧!您现在应该看到当前版本是 1.17,并且您将能够成功运行 Kubebuilder。