Helm 错误:升级失败:渲染的清单包含已存在的新资源

Vin*_*t J 5 kubernetes-helm

上次升级失败时出现此错误。

如果不手动删除所有 Pod 和服务,我就无法升级。

Error: UPGRADE FAILED: rendered manifests contain a new resource that already exists.
Unable to continue with update: existing resource conflict: namespace: ns-xy, name: svc-xy, existing_kind: /v1, Kind=Service, new_kind: /v1, Kind=Service
Run Code Online (Sandbox Code Playgroud)

我尝试过helm upgrade --force但没有成功。

一种解决方案是删除所有已更新的服务和部署,但这时间很长,并且会造成长时间的中断。

如何强制升级?

小智 9

OP 没有提及当前使用的 helm 版本是什么。因此,假设您使用的是 3.1.0 之前的版本:

  • 将 helm 升级到 3.2.4 (这是当前的 3.2 版本
  • 标记并注释您要升级的资源(按照 #7649):
    KIND=deployment
    NAME=my-app-staging
    RELEASE=staging
    NAMESPACE=default
    kubectl annotate $KIND $NAME meta.helm.sh/release-name=$RELEASE --overwrite
    kubectl annotate $KIND $NAME meta.helm.sh/release-namespace=$NAMESPACE --overwrite
    kubectl label $KIND $NAME app.kubernetes.io/managed-by=Helm 
    
    Run Code Online (Sandbox Code Playgroud)
  • 像以前一样运行 helm 升级命令。

这应该告诉 Helm 可以接管现有资源并开始管理它。该过程也适用于 api 升级(例如“apps/v1beta2”更改为“apps/v1”)或在命名空间中加入旧元素。