运行和部署控制器

可选步骤

如果选择对 API 定义进行任何更改,则在继续之前,可以使用以下命令生成清单,如自定义资源(CRs)或自定义资源定义(CRDs):

make manifests

要测试控制器,请在本地针对集群运行它。 在继续之前,我们需要安装我们的 CRDs,如快速入门中所述。这将自动使用 controller-tools 更新 YAML 清单(如果需要):

make install

现在我们已经安装了我们的 CRDs,我们可以针对集群运行控制器。这将使用我们连接到集群的任何凭据,因此我们暂时不需要担心 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: cronjob
    app.kubernetes.io/instance: cronjob-sample
    app.kubernetes.io/part-of: project
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/created-by: project
  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

如果再次列出 CronJob,就像我们之前所做的那样,我们应该看到控制器再次正常运行!