运行和部署控制器
可选步骤
如果选择对 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,就像我们之前所做的那样,我们应该看到控制器再次正常运行!