Helm 部署或升级失败:服务器无法找到所请求的资源或升级失败:没有已部署的发布

77次阅读
没有评论

问题描述

在使用 Helm 部署应用程序的过程中遇到了问题。无论是部署新的应用程序还是升级现有的应用程序,都会遇到错误。用户尝试了不同的命令,但都无法成功部署或升级应用程序。以下是用户遇到的具体问题。

当运行以下命令时:

helm install --name foo . -f values.yaml --namespace foo-namespace

用户收到以下错误消息:

Error: release foo failed: the server could not find the requested resource

当运行以下命令时:

helm upgrade --install foo . -f values.yaml --namespace foo-namespace

或者

helm upgrade foo . -f values.yaml --namespace foo-namespace

用户收到以下错误消息:

Error: UPGRADE FAILED: "foo" has no deployed releases

用户不太理解为什么会出现这种情况。此外,用户还提供了 Helm 和 Kubernetes 的版本信息以及 Tiller 的状态。

解决方案

在使用 Helm 部署或升级应用程序时遇到这种情况,可能有几种原因。以下是可能的解决方案。

请注意以下操作注意版本差异及修改前做好备份。

方案1:删除失败的发布并重新部署

在 Helm 部署或升级过程中,如果之前的发布失败,可能会导致无法正常升级或部署新的应用程序。你可以尝试删除之前失败的发布,并重新部署应用程序。

  1. 查看已发布的 Helm 发布列表,包括已失败的发布:
    bash
    helm ls -a

  2. 如果存在之前失败的发布,使用以下命令删除它:
    bash
    helm delete --purge <release_name>

  3. 确保之前的发布已被完全删除后,尝试重新部署应用程序:
    bash
    helm install --name foo . -f values.yaml --namespace foo-namespace

方案2:强制重新部署

在部署或升级应用程序时,使用 --force 参数可以尝试强制重新部署应用程序,即使之前的操作存在一些问题。

  1. 使用 --force 参数尝试重新部署应用程序:
    bash
    helm upgrade --install foo . -f values.yaml --namespace foo-namespace --force

或者

bash
helm upgrade foo . -f values.yaml --namespace foo-namespace --force

  1. 如果仍然遇到问题,可能需要结合其他方案进行排查。

方案3:确保命名空间存在

确认你指定的命名空间(namespace)foo-namespace 存在且正确。如果命名空间不存在,部署或升级将会失败。你可以通过以下方式确认命名空间是否存在:

kubectl get namespaces

如果命名空间不存在,你需要先创建命名空间,然后尝试重新部署或升级应用程序。

方案4:检查 Tiller 状态和版本

确认 Tiller 是否正常运行,并与 Kubernetes 集群兼容。根据用户提供的信息,Tiller 已经以相同版本运行在 Kubernetes 集群中。

方案5:查看 Helm GitHub 讨论

有时候 Helm 的特定问题可能会在 Helm GitHub 讨论区得到解决。你可以查看是否有类似问题的讨论或解决方案可以参考。

请根据上述方案逐步排查问题,并根据实际情况选择适合的解决方案。如果问题仍然存在,请考虑进一步调查或寻求社区支持。

正文完