【问题标题】:Why helm upgrade --install failed when previous install is failure?为什么上次安装失败时 helm upgrade --install 失败?
【发布时间】:2019-01-16 13:01:12
【问题描述】:

这是掌舵和舵柄版本:

> helm version --tiller-namespace data-devops
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

之前的helm安装失败:

helm ls --tiller-namespace data-devops
NAME            REVISION        UPDATED                         STATUS  CHART                   NAMESPACE
java-maven-app  1               Thu Aug  9 13:51:44 2018        FAILED  java-maven-app-1.0.0    data-devops

当我尝试使用此命令再次安装它时,它失败了:

helm --tiller-namespace data-devops upgrade java-maven-app helm-chart --install \
        --namespace data-devops \
        --values helm-chart/values/stg-stable.yaml
Error: UPGRADE FAILED: "java-maven-app" has no deployed releases

如果之前的安装失败,helm upgrade --install 命令会失败吗?我期待它强制安装。有什么想法吗?

【问题讨论】:

  • 可以删除版本吗?也许你可以做 helm delete java-maven-app --purge --no-hooks 然后做一个 helm install
  • 不幸的是,这对我来说是不行的。我正在使用 ci/cd 将我们的应用程序部署到 gke,所以幂等执行是我想要实现的。
  • 如果它有帮助的话,我一直在使用 jenkins-x 并且它运行相同的命令。我偶尔会遇到同样的错误,不得不通过删除版本、更正问题并再次运行管道来手动干预。我认为它只发生在图表的第一次安装出错的特定条件下,但我不确定具体是什么条件。
  • 我明白了,所以它只发生在第一次安装图表时?我想我可以通过删除版本来容忍这一点。我担心这个错误也发生在现有的正在运行的版本上,所以删除正在运行的版本会影响我正在运行的应用程序。

标签: kubernetes kubernetes-helm


【解决方案1】:

这在一段时间内是或一直是掌舵问题。它只影响图表的第一次安装失败并且 helm 2.7 需要在更正问题并再次安装之前手动删除失败的版本的情况。但是现在有一个 --force 标志可用于解决这种情况 - https://github.com/helm/helm/issues/4004

【讨论】:

  • 出于某种原因--force 在这种情况下没有帮助。而且我更希望失败的版本被修复的版本覆盖,而不是强迫。所以它似乎更像是 Helm 中的一个错误
【解决方案2】:

只是添加...

我经常在 Helm 3 中看到 Error: UPGRADE FAILED: "my-app" has no deployed releases 错误。 几乎每次,错误都出现在 kubectlaws-cliaws-iam-authenticator 而不是 Helm。似乎很多问题都出现在这个异常上,这并不理想。

要诊断真正的问题,您可以在其中一个或多个工具中运行简单的命令(如果您正在使用它们),您应该能够快速诊断您的问题。

例如:

aws-cli - aws --version 以确保您已安装 cli。

aws-iam-authenticator - aws-iam-authenticator version 检查是否已正确安装。

kubectl - kubectl version 将显示该工具是否已安装。

kubectl - kubectl config current-context 将显示您是否提供了可以连接到 Kubernetes 的有效配置。

【讨论】:

  • @SomeGuyWhoCodes 我通常使用:kubectl versionkubectl config current-context
  • 这些将允许您查看kubectl 是否可用以及您是否已正确配置为连接到 Kubernetes。
【解决方案3】:

试试:

helm delete --purge <deployment> 

这样就可以了

对于 helm3 以后,您需要卸载例如。

helm uninstall <deployment>  -n <namespace>

【讨论】:

  • 这仅适用于手动部署。对于 CI/CD,很难实现自动化。
【解决方案4】:

当部署意外失败时会发生这种情况。

首先,检查helm release部署的状态;

❯ helm ls  -n $namespace

NAME    NAMESPACE   REVISION    UPDATED STATUS  CHART   APP VERSION

您很可能不会看到有问题的 helm 部署。因此,请使用-a 选项检查部署状态;

❯ helm list -n $namespace -a
NAME            NAMESPACE       REVISION    UPDATED          STATUS             CHART         APP VERSION
$release_name   $namespace      7           $update_date     pending-upgrade    $chart_name   $app_version

如您所见,部署卡在pending-upgrade 状态。

检查 helm 部署秘密;

❯ kubectl get secret -n $namespace                                                                                                                                             42s ⎈ eks_non-prod/monitoring
NAME                                 TYPE                  DATA   AGE
sh.helm.release.v1.$namespace.v1     helm.sh/release.v1    1      2d21h
sh.helm.release.v1.$namespace.v2     helm.sh/release.v1    1      21h
sh.helm.release.v1.$namespace.v3     helm.sh/release.v1    1      20h
sh.helm.release.v1.$namespace.v4     helm.sh/release.v1    1      19h
sh.helm.release.v1.$namespace.v5     helm.sh/release.v1    1      18h
sh.helm.release.v1.$namespace.v6     helm.sh/release.v1    1      17h
sh.helm.release.v1.$namespace.v7     helm.sh/release.v1    1      16h

并描述最后一个;

❯ kubectl describe secret sh.helm.release.v1.$namespace.v7
Name:         sh.helm.release.v1.$namespace.v7
Namespace:    $namespace
Labels:       modifiedAt=1611503377
              name=$namespace
              owner=helm
              status=pending-upgrade
              version=7
Annotations:  <none>

Type:  helm.sh/release.v1

Data
====
release:  792744 bytes

您将看到密钥与失败的部署具有相同的状态。所以删除秘密;

❯ kubectl delete secret sh.helm.release.v1.$namespace.v7

现在,您应该可以升级 helm 版本了。升级后可以查看helm release的状态;

❯ helm list -n $namespace -a
NAME            NAMESPACE       REVISION    UPDATED          STATUS       CHART         APP VERSION
$release_name   $namespace      7           $update_date     deployed     $chart_name   $app_version

【讨论】:

  • 对我来说这是更好的解决方案,因为它不会删除部署并保持您的服务正常运行,直到下一次部署成功。
猜你喜欢
  • 2022-06-17
  • 1970-01-01
  • 2019-10-31
  • 2012-09-28
  • 1970-01-01
  • 2020-06-08
  • 2019-05-11
  • 1970-01-01
  • 2018-07-19
相关资源
最近更新 更多