kubebuilder create webhook 需要之前创建的 API

alo*_*rma 7 go kubernetes kubebuilder

我正在尝试创建一个验证网络钩子

kubebuilder create webhook batch \
            --version v1 \
            --kind Webhook \
            --defaulting \
            --programmatic-validation
Run Code Online (Sandbox Code Playgroud)

但它总是给我一个错误。

failed to create webhook: unable to inject the resource to. 
"base.go.kubebuilder.io/v3": kubebuilder create webhook requires. 
a previously created API
Run Code Online (Sandbox Code Playgroud)

我不确定在 kubebuilder 命令中添加额外的内容。任何帮助表示赞赏。

小智 5

我刚刚遇到了同样的问题,似乎 kubebuilder 会查看PROJECT项目根目录下调用的文件来验证 API 是否已创建。因此,在创建默认 Webhook 之前,请确保在创建 Webhook 之前已创建 API,我很难解释这一点,但我认为一些示例会清楚地说明这一点

所以在你的项目的根目录下,如果你运行 $ cat PROJECT 它会看起来像这样

domain: example.org
layout:
- go.kubebuilder.io/v3
projectName: khello
repo: example.com/khello
version: "3"
Run Code Online (Sandbox Code Playgroud)

现在如果我们运行你的命令

kubebuilder create webhook batch \
            --version v1 \
            --kind Webhook \
            --defaulting \
            --programmatic-validation
Run Code Online (Sandbox Code Playgroud)

它会抱怨并说类似的话

....
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
Run Code Online (Sandbox Code Playgroud)

好吧,很酷,现在我们处于相同的状态,现在怎么办?

现在,如果您还没有创建 API,请使用 one make one

kubebuilder create api  --version v1 --kind Webhook
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

现在我们已经创建了 api,我们可以运行您的命令

kubebuilder create webhook batch \
            --version v1 \
            --kind Webhook \
            --defaulting \
            --programmatic-validation
Run Code Online (Sandbox Code Playgroud)

瞧,现在可以了

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"
Run Code Online (Sandbox Code Playgroud)

话虽这么说,我不确定 kubebuilder 在幕后是如何工作的,但根据我的理解,它会检查PROJECT每当create命令发生时是否从中创建了一些东西。因此,我的建议是检查您的PROJECT文件,确保创建了 API,如果创建了,请确保在命令中添加正确的参数以匹配 thta文件kubebuilder create weboook的内容。PROJECT