【问题标题】:Can't do anything with helmhelm 什么都做不了
【发布时间】:2020-02-19 14:50:24
【问题描述】:

我在使用 Kubernetes/helm 时遇到了各种各样的问题,但我对它真的很陌生,所以我完全不确定自己在做什么,尽管我花了一天的时间试图解决它。

我有一个处于 CrashLoopBackOff 情况的 pod,因为我在 Dockerfile 中输入了错误的端口号。当我执行kubectl -n dev get pods 时,我可以在崩溃循环中看到它。我试图用helm delete --purge emails 杀死它,但我收到错误Error: unknown flag: --purge。我尝试使用kubectl edit pod emails -n dev 编辑图表,但收到一条错误消息,提示无法更改该字段。

但我无法删除 pod,所以我不太确定从这里去哪里。我试过不带 --purge 标志,但收到错误Error: uninstall: Release not loaded: emails: release: not found。如果我尝试helm uninstall emails 或几乎任何东西,我都会得到同样的结果。

要找到问题的症结所在,我认为这是因为 helm 客户端已升级到 v3.1.0 版本,但 Pod 是使用 v2.11.0 创建的。但我不知道如何将客户端回滚到这个版本。我已经通过curl -L https://git.io/get_helm.sh | bash -s -- --version v2.11.0 下载了它,但我无法运行helm init,所以我仍在使用 v3.1.0

如果我运行helm list,我会得到一个空列表。我有 16 个正在运行的 pod,我可以通过 kubectl -n dev get pods 看到,但我似乎无法对它们中的任何一个做任何事情。

这可能是因为我的 helm 客户端版本错误,如果是,我该如何回滚?

感谢您的任何建议。

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    EricZ 的回答抓住了要点,但只是为了提供一些上下文并推荐一些资源 - 首先,您可以找到当前 v2 版本的二进制文件here。只需将它放在您的路径中,一切都应该与您的所有版本一样。

    如前所述,问题是您尝试使用 v3 客户端1 查询 Helm v2 版本。但是,Helm v3 设计有一个单独的版本“存储”,允许滚动迁移您的工作负载;这就是为什么 v3 客户端不会“看到”v2 版本,反之亦然(例如,您可以在测试环境中将 v2 版本“转换”为 v3,同时部署的版本继续运行,验证一切看起来都不错,然后将流量翻转到新版本并删除旧版本)。当您迁移时,您可能会在 PATH 中同时使用这两个版本 — 我只是将 v2 客户端 aliased 到 helm2,所以例如,helm2 list 会显示我所有的 v2 版本,而 @987654329 @ 新迁移的版本。

    话虽如此,没有什么可以阻止您继续像以前一样使用 Helm v2。如果您已经有一个运行 v2 的工作集群,那么在您更熟悉 Kubernetes 基础知识的同时坚持下去可能是值得的。上周我参加了与 Helm 的核心维护者之一的聚会,听起来 Helm v2 在明年左右仍将得到支持;所以你有时间。 (事实上​​,他们建议花时间在开发集群上为生产关键型应用程序测试您的迁移。)


    当您准备好迁移时... 我强烈建议您查看Helm 2to3 plugin(由核心 Helm 团队维护的官方插件),它旨在自动迁移 v2在一个简单的 CLI 界面中发布到 v3。 YMMV,但对我来说效果很好。简而言之:

    $ helm plugin install https://github.com/helm/helm-2to3
    # Note: the following commands can be also be run with the `--dry-run` 
    # flag to preview their effects.
    $ helm 2to3 move config
    [...]
    [Move Config/confirm] Are you sure you want to move the v2 configuration? [y/N]: y
    2020/02/18 23:02:08
    Helm v2 configuration will be moved to Helm v3 configuration.
    [...]
    $ helm 2to3 convert some-helm2-release
    2020/02/19 00:30:35 Release "some-helm2-release" will be converted from Helm v2 to Helm v3.
    2020/02/19 00:30:35 [Helm 3] Release "some-helm2-release" will be created.
    [...]
    

    希望这会有所帮助!


    1 查看文档here“自 Helm 2 以来的变化”以了解详细信息。在您的情况下值得注意:

    • 现在发布的范围仅限于部署它们的命名空间;要查看所有版本,请使用 helm list -A
    • 在 Helm v3 中无需 helm init — 因为 v3 客户端不再依赖 tiller
    • 如您所见 — helm delete --purge 现在在 v3 中为 helm uninstall;如果您想要保留“已删除”版本的 v2 功能,请使用 --keep-history 标志。

    【讨论】:

    • 感谢您提供的额外细节,Jesse,这真的很有用。
    • 你打赌——祝你好运!顺便说一句,Kubernetes Slack 在刚开始时可能是一个有用的资源——#helm-users 频道有大量的问题/答案+讨论。 Kubernetes 社区是最受欢迎的社区之一 - 随时打个招呼 :)
    【解决方案2】:

    问题是你混合了 helm 2 和 helm 3

    release是helm v2创建的,所以需要helm v2删除,helm v3将无法看到helm v2创建的release。

    你可以这样做

    1. 下载 helm v2,删除 release(我通常在一个文件夹中同时拥有 helm 2/3,将 helm v2 重命名为 helm2)。
    2. 可选,您可以删除分蘖,因为 helm v3 不再需要分蘖。只需确保 helm v2 没有部署其他版本
    3. 更新您的舵图以使用正确的端口
    4. 使用 helm v3 部署更新后的图表

    【讨论】:

    • 谢谢埃里克!您将 helm2 与 helm3 放在同一文件夹中的最重要提示是为我解决此问题的关键。事后看来,如此明显!
    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 2019-03-08
    • 2016-12-24
    • 2017-04-18
    • 2011-08-03
    • 2014-05-11
    • 2014-09-10
    • 1970-01-01
    相关资源
    最近更新 更多