我刚刚遇到了同样的问题,似乎 kubebuilder 会查看PROJECT
项目根目录中调用的文件来验证 API 是否已创建。因此,在您创建默认 webhook 之前,请确保您在创建 webhook 之前已经创建了 API,我很难解释这一点,但我认为一些示例可以清楚地说明
所以在你的项目的根目录下,如果你运行
$ cat PROJECT
它会看起来像这样
domain: example.org
layout:
- go.kubebuilder.io/v3
projectName: khello
repo: example.com/khello
version: "3"
现在如果我们运行你的命令
kubebuilder create webhook batch \
--version v1 \
--kind Webhook \
--defaulting \
--programmatic-validation
它会抱怨并说类似
....
2021/11/17 13:15:03 failed to create webhook: unable to inject the resource to "base.go.kubebuilder.io/v3": kubebuilder create webhook requires a previously created API
好的,很酷,现在我们处于相同的状态,现在呢?
现在,如果您还没有创建 API,请使用
kubebuilder create api --version v1 --kind Webhook
现在,如果您在项目目录的根目录中发现一个名称PROJECT
为的文件,它会显示类似
domain: example.org
layout:
- go.kubebuilder.io/v3
projectName: khello
repo: example.com/khello
resources:
- api:
crdVersion: v1
namespaced: true
controller: true
domain: example.org
kind: Webhook
path: example.com/khello/api/v1
version: v1
version: "3"
现在我们已经创建了 api,我们可以运行你的命令
kubebuilder create webhook batch \
--version v1 \
--kind Webhook \
--defaulting \
--programmatic-validation
瞧,它现在可以工作了
文件将PROJECT
变成类似
domain: example.org
layout:
- go.kubebuilder.io/v3
projectName: khello
repo: example.com/khello
resources:
- api:
crdVersion: v1
namespaced: true
controller: true
domain: example.org
kind: Webhook
path: example.com/khello/api/v1
version: v1
webhooks:
defaulting: true
validation: true
webhookVersion: v1
version: "3"
话虽如此,我不确定kubebuilder是如何在后台工作的,但据我所知,PROJECT
无论何时create
命令发生,它都会检查是否从中创建了一些东西。因此,我的建议是检查您的PROJECT
文件,确保创建了 API,如果创建了,请确保在kubebuilder create weboook
命令中放入正确的参数以匹配 thtaPROJECT
文件的内容。