部署和测试
在测试版本转换之前,我们需要在 CRD 中启用转换:
Kubebuilder 在 config
目录下生成禁用 webhook bits 的 Kubernetes 清单。要启用它们,我们需要:
-
在
config/crd/kustomization.yaml
文件启用patches/webhook_in_<kind>.yaml
和patches/cainjection_in_<kind>.yaml
。 -
在
config/default/kustomization.yaml
文件的bases
部分下启用../certmanager
和../webhook
目录。 -
在
config/default/kustomization.yaml
文件的patches
部分下启用manager_webhook_patch.yaml
。 -
在
config/default/kustomization.yaml
文件的CERTMANAGER
部分下启用所有变量。
此外,我们需要将 CRD_OPTIONS
变量设置为 "crd"
,删除 trivialVersions
选项(这确保我们实际
为每个版本生成验证,而不是告诉 Kubernetes 它们是一样的):
CRD_OPTIONS ?= "crd"
现在,我们已经完成了所有的代码更改和清单,让我们将其部署到集群并对其进行测试。
你需要安装 cert-manager(0.9.0+
版本),
除非你有其他证书管理解决方案。Kubebuilder 团队已在
0.9.0-alpha.0
版本中测试了本教程中的指令。
一旦所有的证书准备妥当后, 我们就可以运行 make install deploy
(和平常一样)将所有的 bits(CRD,
controller-manager deployment)部署到集群上。
测试
一旦启用了转换的所有 bits 都在群集上运行,我们就可以通过请求不同的版本来测试转换。
我们将基于 v1 版本制作 v2 版本(将其放在 config/samples
下)
apiVersion: batch.tutorial.kubebuilder.io/v2
kind: CronJob
metadata:
name: cronjob-sample
spec:
schedule:
minute: "*/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 apply -f config/samples/batch_v2_cronjob.yaml
如果我们正确地完成了所有操作,那么它应该能够成功地创建,并且我们能够使用 v2 资源来获取它
kubectl get cronjobs.v2.batch.tutorial.kubebuilder.io -o yaml
apiVersion: batch.tutorial.kubebuilder.io/v2
kind: CronJob
metadata:
name: cronjob-sample
spec:
schedule:
minute: "*/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
v1 资源
kubectl get cronjobs.v1.batch.tutorial.kubebuilder.io -o 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
两者都应填写,并分别看起来等同于的 v2 和 v1 示例。注意,每个都有不同的 API 版本。
最后,如果稍等片刻,我们应该注意到,即使我们的控制器是根据 v1 API 版本编写的,我们的 CronJob 仍在继续协调。