部署与测试

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

Kubebuilder 在 config 目录下生成 Kubernetes 清单,默认情况下禁用了 webhook 部分。要启用它们,我们需要:

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

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

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

另外,如果在我们的 Makefile 中存在,我们需要将 CRD_OPTIONS 变量设置为 "crd",移除 trivialVersions 选项(这确保我们实际上为每个版本[生成验证](/reference/generating-crd.md#multiple-versions “生成CRDs:多个版本”),而不是告诉 Kubernetes 它们是相同的):

CRD_OPTIONS ?= "crd"

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

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

一旦我们的证书准备齐全,我们可以像往常一样运行 make install deploy 来将所有组件(CRD 和控制器管理器部署)部署到集群上。

测试

一旦集群中所有位都启动并运行并启用了转换功能,我们就可以通过请求不同版本来测试我们的转换。

我们将根据我们的 v1 版本制作一个 v2 版本(放在 config/samples 下)。

apiVersion: batch.tutorial.kubebuilder.io/v2
kind: CronJob
metadata:
  labels:
    app.kubernetes.io/name: project
    app.kubernetes.io/managed-by: kustomize
  name: cron作业示例
spec:
  日程安排:
    分钟: "*/1"
  启动截止时间(秒): 60
  并发策略: 允许 # 显式指定,但允许也是默认值。
  工作模板:
    spec:
      template:
        spec:
          容器:
          - name: 你好
            image: busybox
            args:
            - /bin/sh
            - -c
            - 日期; 在Kubernetes集群中打招呼。
          重启策略: 失败时

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

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:
  labels:
    app.kubernetes.io/name: project
    app.kubernetes.io/managed-by: kustomize
  name: cron作业示例
spec:
  日程安排:
    分钟: "*/1"
  启动截止时间(秒): 60
  并发策略: 允许 # 显式指定,但允许也是默认值。
  工作模板:
    spec:
      template:
        spec:
          容器:
          - name: 你好
            image: busybox
            args:
            - /bin/sh
            - -c
            - 日期; 在Kubernetes集群中打招呼。
          重启策略: 失败时

和 v1 资源

kubectl get cronjobs.v1.batch.tutorial.kubebuilder.io -o yaml
apiVersion: batch.tutorial.kubebuilder.io/v1
kind: CronJob
metadata:
  labels:
    app.kubernetes.io/name: project
    app.kubernetes.io/managed-by: kustomize
  name: cron作业示例
spec:
  日程安排: "*/1 * * * *"
  启动截止时间(秒): 60
  并发策略: 允许 # 显式指定,但允许也是默认值。
  工作模板:
    spec:
      template:
        spec:
          容器:
          - name: 你好
            image: busybox
            args:
            - /bin/sh
            - -c
            - 日期; 在Kubernetes集群中打招呼。
          重启策略: 失败时
  

两者都应该填写,并且看起来与我们的 v2 和 v1 示例各自相当。请注意,每个都有不同的 API 版本。

最后,如果我们等一会儿,我们应该注意到我们的 CronJob 继续进行调整,尽管我们的控制器是针对我们的 v1 API 版本编写的。

故障排除

故障排除步骤