Volcano调度器插件升级后,Volcano Job(vcjob)资源无法正常运行
问题现象
Volcano调度器插件由1.4.7及以下版本升级到1.4.7以后版本时,出现新建的vcjob资源无法正常运行的现象。同时,API Server日志报错信息和volcano-admission组件报错信息分别如下。
... W0318 14:57:51.376736 13 dispatcher.go:142] Failed calling webhook, failing open validatejob.volcano.sh: failed calling webhook "validatejob.volcano.sh": failed to call webhook: Post "https://volcano-admission-service.kube-system.svc:443/jobs/validate?timeout=30s": EOF E0318 14:57:51.376768 13 dispatcher.go:149] failed calling webhook "validatejob.volcano.sh": failed to call webhook: Post "https://volcano-admission-service.kube-system.svc:443/jobs/validate?timeout=30s": EOF ...
volcano-admission组件报错信息:
... no kind "AdmissionReview" is registered for version "admission.k8s.io/v1beta1" ...
问题原因
主要原因在于新旧版本的“webhooks.admissionReviewVersions”字段信息不兼容。
在旧版本(1.4.7及以下)中,MutatingWebhookConfiguration和ValidatingWebhookConfiguration资源对象的webhooks.admissionReviewVersions字段值为“v1beta1”,而在新版本(1.4.7以上)中,该字段的值为“v1”。在升级插件时,如果使用了高可用模式,当扩容volcano-admission的副本数时,旧版本的ReplicaSet会启动一个旧版本的“Pod”。如果该Pod未及时销毁,它将强制覆盖MutatingWebhookConfiguration和ValidatingWebhookConfiguration资源中的配置,将“webhooks.admissionReviewVersions”字段重置为“v1beta1”。此时,Kubernetes无法识别该字段信息,从而导致创建的vcjob资源无法正常运行。
具体的MutatingWebhookConfiguration和ValidatingWebhookConfiguration资源对象请参见表1。
资源类型 |
资源名称 |
---|---|
MutatingWebhookConfiguration |
volcano-admission-service-jobs-mutate |
volcano-admission-service-podgroups-mutate |
|
volcano-admission-service-queues-mutate |
|
volcano-admission-service-pods-mutate |
|
ValidatingWebhookConfiguration |
volcano-admission-service-jobs-validate |
volcano-admission-service-pods-validate |
|
volcano-admission-service-queues-validate |
解决方法
请将下列资源对象的“webhooks.admissionReviewVersions”字段信息由“v1beta1”修改为“v1”后,再尝试重新创建vcjob资源。
- 请依次执行kubectl edit命令,依次修改表1中字段信息。以“volcano-admission-service-jobs-mutate”为例,介绍如何修改“webhooks.admissionReviewVersions”字段信息。
执行以下命令,修改“volcano-admission-service-jobs-mutate”的Yaml文件。
kubectl edit MutatingWebhookConfiguration volcano-admission-service-jobs-mutate
在Yaml中,按i键编辑文件内容,将“webhooks.admissionReviewVersions”由“v1beta1”修改为“v1”。apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration metadata: annotations: meta.helm.sh/release-name: cceaddon-volcano meta.helm.sh/release-namespace: kube-system creationTimestamp: "2025-02-25T08:11:52Z" generation: 2 labels: app.kubernetes.io/managed-by: Helm release: cceaddon-volcano name: volcano-admission-service-jobs-mutate resourceVersion: "252406" uid: 7e9bdaaf-1b6c-4975-a171-ada8456c12e5 webhooks: - admissionReviewVersions: - v1beta1 # 将该内容修改为v1 ...
修改完成后,按Esc键退出编辑,输入:wq保存。
- 表1中对象的“webhooks.admissionReviewVersions”字段都修改完成后完成,执行以下命令删除未成功运行的vcjob资源。
kubectl delete vcjob -n namespace vcjob_name
回显结果如下:
vcjob vcjob_name deleted
- 执行以下命令,重新创建vcjob资源。
kubectl create -f vcjob.yaml # 请替换为创建vcjob资源的YAML文件
回显结果如下:
job.batch.volcano.sh/vcjob_name created
- 执行以下命令,查看vcjob资源是否成功创建。
kubectl get vcjob_name -n namespace
回显结果如下,当STATUS为Running时,则说明vcjob资源创建成功。
NAME STATUS MINAVAILABLE RUNNINGS AGE vcjob_name Running 1 2m30s
问题规避措施
在插件升级之前,您可以通过以下措施对以上问题进行规避:
- 从Volcano调度器插件版本≤1.4.7升级到版本>1.4.7且≤1.13.7:在“升级插件”页面,请先将“插件规格”设置为“系统预置规格 > 单实例”或“自定义规格 > 实例数设置1”,然后进行升级。插件升级完成后,在“插件中心”中找到“Volcano调度器”插件,单击“编辑”。在“编辑插件”页面,将“插件规格”修改为所需规格即可。
- 从Volcano调度器插件版本≤1.4.7升级到版本>1.13.7:在“升级插件”页面,请先将“插件规格”切换至“自定义规格 ”,并将“volcano-admission”组件的副本数设置为1,然后进行升级。插件升级完成后,在“插件中心”中找到“Volcano调度器”插件,单击“编辑”。在“编辑插件”页面,将“插件规格”修改为所需规格即可。