kubebuilder 中文文档由云原生社区主导翻译。任何问题可以在这儿提issue。issue模版可以参考这个

部署和测试

在测试版本转换之前,我们需要在 CRD 中启用转换:

Kubebuilder 在 config 目录下生成禁用 webhook bits 的 Kubernetes 清单。要启用它们,我们需要:

  • config/crd/kustomization.yaml 文件启用 patches/webhook_in_<kind>.yamlpatches/cainjection_in_<kind>.yaml

  • config/default/kustomization.yaml 文件的 bases 部分下启用 ../certmanager../webhook 目录。

  • config/default/kustomization.yaml 文件的 patches 部分下启用 manager_webhook_patch.yaml

  • config/default/kustomization.yaml 文件的 CERTMANAGER 部分下启用所有变量。

此外,我们需要将 CRD_OPTIONS 变量设置为 "crd",删除 trivialVersions 选项(这确保我们实际 为每个版本生成验证,而不是告诉 Kubernetes 它们是一样的):

CRD_OPTIONS ?= "crd"

现在,我们已经完成了所有的代码更改和清单,让我们将其部署到集群并对其进行测试。

你需要安装 cert-manager0.9.0+ 版本), 除非你有其他证书管理解决方案。Kubebuilder 团队已在 0.9.0-alpha.0 版本中测试了本教程中的指令。

一旦所有的证书准备妥当后, 我们就可以运行 make install deploy(和平常一样)将所有的 bits(CRD, controller-manager deployment)部署到集群上。

测试

一旦启用了转换的所有 bits 都在群集上运行,我们就可以通过请求不同的版本来测试转换。

我们将基于 v1 版本制作 v2 版本(将其放在 config/samples 下)

apiVersion: batch.tutorial.kubebuilder.io/v2
kind: CronJob
metadata:
  name: cronjob-sample
spec:
  schedule:
    minute: "*/1"
  startingDeadlineSeconds: 60
  concurrencyPolicy: Allow # explicitly specify, but Allow is also default.
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

然后,我们可以在集群中创建它:

kubectl apply -f config/samples/batch_v2_cronjob.yaml

如果我们正确地完成了所有操作,那么它应该能够成功地创建,并且我们能够使用 v2 资源来获取它

kubectl get cronjobs.v2.batch.tutorial.kubebuilder.io -o yaml
apiVersion: batch.tutorial.kubebuilder.io/v2
kind: CronJob
metadata:
  name: cronjob-sample
spec:
  schedule:
    minute: "*/1"
  startingDeadlineSeconds: 60
  concurrencyPolicy: Allow # explicitly specify, but Allow is also default.
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

v1 资源

kubectl get cronjobs.v1.batch.tutorial.kubebuilder.io -o yaml
apiVersion: batch.tutorial.kubebuilder.io/v1
kind: CronJob
metadata:
  name: cronjob-sample
spec:
  schedule: "*/1 * * * *"
  startingDeadlineSeconds: 60
  concurrencyPolicy: Allow # explicitly specify, but Allow is also default.
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

两者都应填写,并分别看起来等同于的 v2 和 v1 示例。注意,每个都有不同的 API 版本。

最后,如果稍等片刻,我们应该注意到,即使我们的控制器是根据 v1 API 版本编写的,我们的 CronJob 仍在继续协调。

故障排除

故障排除的步骤