【问题标题】:Helm Error: UPGRADE FAILED: rendered manifests contain a new resource that already existsHelm 错误:升级失败:呈现的清单包含已存在的新资源
【发布时间】:2020-07-31 03:53:10
【问题描述】:

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

如果不手动删除我的所有 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

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

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

如何强制升级?

【问题讨论】:

    标签: kubernetes-helm


    【解决方案1】:

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

    • 将 helm 升级到 3.2.4 (Which is the current 3.2 version)
    • 标记并注释要升级的资源 (As per #7649):
      KIND=deployment
      NAME=my-app-staging
      RELEASE=staging
      NAMESPACE=default
      kubectl annotate $KIND $NAME meta.helm.sh/release-name=$RELEASE
      kubectl annotate $KIND $NAME meta.helm.sh/release-namespace=$NAMESPACE
      kubectl label $KIND $NAME app.kubernetes.io/managed-by=Helm 
      
    • 像以前一样运行 helm upgrade 命令。

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

    【讨论】:

    • 这很有帮助。注意:我必须使用 --override。例如。 `kubectl annotate --override $KIND' ...
    • 帮了我很多“喜欢”,但同样重要的是要说明需要添加 -n $NAMESPACE,因为并非所有部署都在默认部署上运行
    【解决方案2】:
    • 列出服务
    kubectl get service
    
    
    • 按以下顺序删除
    kubectl delete service  <service-name>
    
    

    他们像往常一样运行 helm upgrade

    【讨论】:

    • 不幸的是,我找到了最好的答案。如果它包含多个服务、部署、...
    【解决方案3】:

    做:

    1. helm status -n "namespace"
    2. 使用helm delete "deployment_name" -n "namespace" 删除现有部署
    3. 再次helm upgrade

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2020-04-23
      • 2023-03-08
      • 2022-11-11
      • 2020-09-30
      • 2021-01-29
      • 2022-10-13
      相关资源
      最近更新 更多