3

我正在尝试创建一个验证 webhook

kubebuilder create webhook batch \
            --version v1 \
            --kind Webhook \
            --defaulting \
            --programmatic-validation

但它总是给我一个错误。

failed to create webhook: unable to inject the resource to. 
"base.go.kubebuilder.io/v3": kubebuilder create webhook requires. 
a previously created API

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

4

2 回答 2

2

我刚刚遇到了同样的问题,似乎 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文件的内容。

于 2021-11-17T06:26:02.727 回答
0

我有一个类似的问题,我已经创建了 API,我的 PROJECT 文件如下所示:

domain: poc.com
layout: go.kubebuilder.io/v3
plugins:
  manifests.sdk.operatorframework.io/v2: {}
  scorecard.sdk.operatorframework.io/v2: {}
projectName: vnicmgr
repo: github.com/rohitju1/vnicmgr-op1
resources:
- api:
    crdVersion: v1
    namespaced: true
  controller: true
  domain: poc.com
  group: poc
  kind: VnicApp
  path: github.com/rohitju1/vnicmgr-op1/api/v1
  version: v1
version: "3"

下面是创建 webhol 模板的命令:

operator-sdk create webhook --group=poc --version=v1alpha1 --kind=VnicApp --defaulting --programmatic-validation

我得到同样的错误:

Error: failed to create webhook with "go.kubebuilder.io/v3": operator-sdk create webhook requires a previously created API

我会很感激你的意见。谢谢

于 2022-02-15T23:49:56.390 回答