【问题标题】:rollback helm release on helm test failure在 helm 测试失败时回滚 helm 发布
【发布时间】:2021-09-24 15:24:49
【问题描述】:

假设我发布了具有与之关联的测试套件的版本。

所以典型的安装如下所示:

helm upgrade --install service service/

不久之后:

$ helm test service-test
NAME: service
LAST DEPLOYED: Thu Jul 15 15:45:40 2021
NAMESPACE: default
STATUS: deployed
REVISION: 4
TEST SUITE:     service-test
Last Started:   Thu Jul 15 15:45:45 2021
Last Completed: Thu Jul 15 15:46:00 2021
Phase:          Succeeded

这就是测试套件的幸福路径。

但让我们想想不那么快乐的场景:

$ helm test service-test
NAME: service
LAST DEPLOYED: Thu Jul 15 15:45:40 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE:     service-test
Last Started:   Thu Jul 15 15:25:48 2021
Last Completed: Thu Jul 15 15:26:54 2021
Phase:          Failed

因此有明确的失败迹象,并且可以查找“失败”子字符串以触发helm rollback service 0,但这种方法对我来说看起来很奇怪。

如何使用 helm 内置机制或其他不涉及将 helm test 命令输出通过管道传输到 sed/awk 的工具正确回滚失败的测试套件?

【问题讨论】:

    标签: kubernetes-helm release-management


    【解决方案1】:

    简短的回答是:舵钩。

    目前在 helm 发布管理中的设计方式,test 必须为 helm 提供注释,以便能够识别发布的终端状态。

    此外,如果测试失败,还有一种特殊的机制可以就地触发回滚。请记住,在这种情况下,与测试套件相关的所有资源都会被清理,因此必须监控 helm 历史记录以了解实际发布结果(或删除 hook-failed 以对其进行调试)。

    解决办法:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: "{{ .Release.Name }}-test"
      labels:
        app: {{ .Release.Name }}
        release: {{ .Release.Name }}
      annotations:
        "helm.sh/hook": test-success, post-upgrade
        "helm.sh/hook-delete-policy": hook-succeeded, hook-failed
        "helm.sh/hook-weight": "1"
    

    如果我理解正确,此注释将转换为以下内容:

    • 升级后运行此测试(即 pod 已启动并正在运行)
    • 监控测试状态
    • 如果测试表明失败,则释放和回滚失败
    • 如果测试没有失败指示,则一切顺利,无需进一步操作
    • 不管测试结果如何,清理所有与测试套件相关的资源(在我的例子中是 1 个作业和 2 个 pod)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-02
      • 2022-11-11
      • 2022-06-17
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      相关资源
      最近更新 更多