运行并部署控制器

可选

如果你选择修改了 API 定义,那么在继续之前,请生成 CR/CRD 等清单:

make manifests

为了测试控制器,我们可以在本地连接到集群运行它。但在此之前,需要按照快速开始安装我们的 CRD。必要时,这会使用 controller-tools 自动更新 YAML 清单:

make install

现在 CRD 已安装好,我们可以连接到集群运行控制器了。它会使用我们连接集群所用的凭证,因此暂时不需要担心 RBAC。

在另一个终端中运行:

export ENABLE_WEBHOOKS=false
make run

你应当能看到控制器的启动日志,但此时它还不会做任何事情。

接下来我们需要一个 CronJob 来测试。把示例写到 config/samples/batch_v1_cronjob.yaml,然后使用它:

apiVersion: batch.tutorial.kubebuilder.io/v1
kind: CronJob
metadata:
  labels:
    app.kubernetes.io/name: project
    app.kubernetes.io/managed-by: kustomize
  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,我们应该能看到控制器又在正常工作了!