外部Jenkins调用K8s v1.22创建Pod报kube-root-ca.crt未注册错误如何解决
问题根因
该报错是Kubernetes v1.22+ 版本特性与旧版Jenkins Kubernetes插件不兼容导致:Kubernetes v1.21及以上版本默认开启ServiceAccount投影卷特性,会为每个Pod自动注入名为kube-root-ca.crt的ConfigMap作为集群API访问根证书卷,而你当前使用的Jenkins Kubernetes插件版本未适配该特性,触发卷挂载失败。
解决步骤
按优先级选择以下任意方案即可:
- 方案1(优先推荐):升级Jenkins Kubernetes插件到1.30.11及以上版本
该版本开始官方完成了Kubernetes v1.22+的特性兼容,升级完成后重启Jenkins,重新触发任务即可验证。 - 方案2(无需升级兼容):禁用Slave Pod的ServiceAccount自动挂载
进入Jenkins「系统管理」→「节点和云」→「对应Kubernetes云配置」,找到你的Slave Pod模板,勾选「禁用自动挂载服务账号」选项后保存。因为你的Jenkins是外部部署,全局已经配置了集群访问凭证,Slave Pod本身不需要挂载集群内的ServiceAccount凭证,关闭该选项不会影响任务正常运行。 - 方案3(兜底方案):手动在目标命名空间创建缺失的ConfigMap
若上述两个方案暂时无法执行,可以手动将集群中存在的kube-root-ca.crtConfigMap同步到Jenkins Slave运行的命名空间,执行命令如下:
配置完成后重新触发任务即可。# 导出kube-system命名空间下的默认根证书ConfigMap kubectl get configmap kube-root-ca.crt -n kube-system -o yaml > kube-root-ca.yaml # 编辑导出的yaml文件,将metadata.namespace字段修改为你运行Jenkins Slave的命名空间(默认是default) # 应用到目标命名空间 kubectl apply -f kube-root-ca.yaml
验证逻辑
任务触发后查看Pod事件,确认无MountVolume.SetUp failed相关报错,Slave Pod正常进入Running状态即为修复完成。
内容的提问来源于stack exchange,提问作者P. Phalak
相关产品推荐
相关产品推荐

