You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级cert-manager至1.5后Helm更新Certificate API版本冲突解决方案咨询

解决cert-manager Certificate API版本升级导致的Helm资源冲突问题

原因分析

cert-manager 1.5会自动将cert-manager.io/v1beta1的Certificate资源通过ManagedFields升级到cert-manager.io/v1,但Helm 3的release元数据里仍记录着旧的API版本。当你修改模板为v1后执行helm upgrade,Helm会因API版本不一致判定为要创建新资源,从而触发冲突。

解决方案步骤

1. 确认资源状态与Helm记录

先检查Helm release中记录的旧API版本:

helm get manifest <你的release名称> -n <命名空间> | grep -A2 -B2 "apiVersion: cert-manager.io/v1beta1"

再验证集群中实际的Certificate资源版本:

kubectl get certificates <证书名称> -n <命名空间> -o yaml | grep apiVersion

2. 修改Helm release的存储元数据

Helm 3默认将release数据存在kube-system命名空间的Secret中,先找到对应release的Secret:

kubectl get secrets -n kube-system | grep sh.helm.release.v1.<你的release名称>

导出Secret内容到临时文件:

kubectl get secret sh.helm.release.v1.<你的release名称>.v<版本号> -n kube-system -o yaml > helm-secret.yaml

编辑helm-secret.yaml,将所有apiVersion: cert-manager.io/v1beta1替换为apiVersion: cert-manager.io/v1,保存修改。

3. 替换原Helm Secret

先删除旧Secret:

kubectl delete secret sh.helm.release.v1.<你的release名称>.v<版本号> -n kube-system

再应用修改后的文件:

kubectl apply -f helm-secret.yaml

4. 执行Helm升级

现在重新执行升级命令,冲突即可解决:

helm upgrade <你的release名称> <chart路径> -n <命名空间> [其他自定义参数]

备选方案:使用--force参数(谨慎操作)

如果修改Secret的方式过于繁琐,可尝试添加--force参数强制升级,该参数会强制替换资源,但cert-manager的Certificate不会因API版本变更重新签发证书:

helm upgrade <你的release名称> <chart路径> -n <命名空间> --force [其他自定义参数]

注意事项

  • 修改Helm Secret属于直接操作内部存储,操作前务必备份原Secret文件。
  • 确保Helm模板中所有Certificate资源的API版本已全部改为cert-manager.io/v1,无遗漏。
  • 升级完成后可通过helm history <你的release名称>确认记录正常。

内容的提问来源于stack exchange,提问作者Комбинатор Дюшесовый

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:42:03