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

运行和部署 controller

要测试 controller,我们可以在集群本地运行它。不过,在开始之前,我们需要按照 快速入门 安装 CRD。如果需要,将使用 controller-tools 自动更新 YAML 清单:

make install

现在我们已经安装了 CRD,在集群上运行 controller 了。这将使用与集群连接所用的任何凭据,因此我们现在不必担心 RBAC。

在单独的终端中运行

make run ENABLE_WEBHOOKS=false

您应该会看到 controller 关于启动的日志,但它还没有做任何事情。

此时,我们需要一个 CronJob 进行测试。让我们写一个样例到 config/samples/batch_v1_cronjob.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
kubectl create -f config/samples/batch_v1_cronjob.yaml

此时,您应该看到一系列的活动。如果看到变更,则应该看到您的 cronjob 正在运行,并且正在更新状态:

kubectl get cronjob.batch.tutorial.kubebuilder.io -o yaml
kubectl get job

现在我们知道它正在工作,我们可以在集群中运行它。停止 make run 调用,然后运行

make docker-build docker-push IMG=<some-registry>/<project-name>:tag
make deploy IMG=<some-registry>/<project-name>:tag

如果像以前一样再次列出 cronjobs,我们应该会看到控制器再次运行!