运行和部署 controller
为了测试,我们可以在本地运行 controller。像快速入门中说的,在运行 controller 之前,我们需要先安装 CRD。
一下命令会通过 controller-tools 更新我们的 YAML manifests 文件。
make install
现在,我们已经安装了 CRD,我们可以针对我们的集群运行 controller了,运行 controller 的证书和我们连接 k8s 集群的证书是同一个 ,因此我们现在不必担心 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
执行下面的命令,你应该会看到一连串的信息。如果你使用 -w
参数,应该会看到你的 cronjob
正在运行,并且正在更新状态:
kubectl get cronjob.batch.tutorial.kubebuilder.io -o yaml
kubectl get job
现在, 我们已经可以在集群中运行 CronJob 了。 停掉 make run
命令,然后运行
make docker-build docker-push IMG=<some-registry>/<project-name>:tag
make deploy IMG=<some-registry>/<project-name>:tag
此时 Webhook
并不能正确运行,如果想 Webhook
正确运行,请参运行 Webhook。
注意
-
为了解决镜像拉不到的问题,可以将
Dockerfile
中的FROM gcr.io/distroless/static:nonroot
修改为FROM golang:1.13
或任意可正常拉取到的镜像。将/config/default/manager_auth_proxy_patch.yaml
文件中的gcr.io/kubebuilder/kube-rbac-proxy:v0.4.1
改为xuejipeng/learn:kube-rbac-proxy-v0.4.1
-
为了加速构建,我们可以把 Makefile 中
docker-build
后面的test
去掉
如果像以前一样再次get cronjobs ,我们应该可以看到 controller 再次运行!