部署与测试
在我们测试转换之前,我们需要在我们的 CRD 中启用它们:
Kubebuilder 在 config
目录下生成 Kubernetes 清单,默认情况下禁用了 webhook 部分。要启用它们,我们需要:
-
在
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
文件中CERTMANAGER
部分下的所有变量。
另外,如果在我们的 Makefile 中存在,我们需要将 CRD_OPTIONS
变量设置为 "crd"
,移除 trivialVersions
选项(这确保我们实际上为每个版本[生成验证](/reference/generating-crd.md#multiple-versions “生成CRDs:多个版本”),而不是告诉 Kubernetes 它们是相同的):
CRD_OPTIONS ?= "crd"
现在我们已经完成了所有的代码更改和清单,接下来将其部署到集群并进行测试。
除非你有其他证书管理解决方案,否则你需要安装 cert-manager(版本 0.9.0+
)。Kubebuilder 团队已经在 0.9.0-alpha.0 版本中测试了本教程中的指令。
一旦我们的证书准备齐全,我们可以像往常一样运行 make install deploy
来将所有组件(CRD 和控制器管理器部署)部署到集群上。
测试
一旦集群中所有位都启动并运行并启用了转换功能,我们就可以通过请求不同版本来测试我们的转换。
我们将根据我们的 v1 版本制作一个 v2 版本(放在 config/samples
下)。
apiVersion: batch.tutorial.kubebuilder.io/v2
kind: CronJob
metadata:
labels:
app.kubernetes.io/name: project
app.kubernetes.io/managed-by: kustomize
name: cron作业示例
spec:
日程安排:
分钟: "*/1"
启动截止时间(秒): 60
并发策略: 允许 # 显式指定,但允许也是默认值。
工作模板:
spec:
template:
spec:
容器:
- name: 你好
image: busybox
args:
- /bin/sh
- -c
- 日期; 在Kubernetes集群中打招呼。
重启策略: 失败时
然后,我们可以在集群上创建它:
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:
labels:
app.kubernetes.io/name: project
app.kubernetes.io/managed-by: kustomize
name: cron作业示例
spec:
日程安排:
分钟: "*/1"
启动截止时间(秒): 60
并发策略: 允许 # 显式指定,但允许也是默认值。
工作模板:
spec:
template:
spec:
容器:
- name: 你好
image: busybox
args:
- /bin/sh
- -c
- 日期; 在Kubernetes集群中打招呼。
重启策略: 失败时
和 v1 资源
kubectl get cronjobs.v1.batch.tutorial.kubebuilder.io -o yaml
apiVersion: batch.tutorial.kubebuilder.io/v1
kind: CronJob
metadata:
labels:
app.kubernetes.io/name: project
app.kubernetes.io/managed-by: kustomize
name: cron作业示例
spec:
日程安排: "*/1 * * * *"
启动截止时间(秒): 60
并发策略: 允许 # 显式指定,但允许也是默认值。
工作模板:
spec:
template:
spec:
容器:
- name: 你好
image: busybox
args:
- /bin/sh
- -c
- 日期; 在Kubernetes集群中打招呼。
重启策略: 失败时
两者都应该填写,并且看起来与我们的 v2 和 v1 示例各自相当。请注意,每个都有不同的 API 版本。
最后,如果我们等一会儿,我们应该注意到我们的 CronJob 继续进行调整,尽管我们的控制器是针对我们的 v1 API 版本编写的。