【问题标题】:How to use helm chart test to do integration tests?如何使用 helm chart test 进行集成测试?
【发布时间】:2020-02-20 06:45:23
【问题描述】:

我正在尝试使用它来运行一些集成测试,以便验证我正在部署的服务代码实际上是在做正确的事情。

基本上我是如何设置的(如此处所述:https://docs.helm.sh/developing_charts/#chart-tests)创建此templates/tests/integration-test.yaml 图表测试文件,并在其中指定运行一个容器,该容器基本上是一个自定义的 maven 映像,其中添加了测试代码和测试容器只需通过命令“mvn test”启动,该命令会对整个 helm 版本部署的 kube 服务进行一些简单的 curl 检查。

通过这种方式,helm test 确实有效。

但是,问题是,在 helm test 运行期间,新版本的服务代码实际上已经在线并暴露给外界/用户。如果 helm 测试失败,我当然可以立即回滚,但这不会阻止我将服务代码的问题版本托管一段时间。

有没有一种方法可以在 Pod 启动之后但在它暴露给 Kubernetes 服务之前在 Pod 上运行服务/集成测试?

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    理想情况下,您将首先在测试环境(专用测试集群或命名空间)上进行安装和测试。对于额外的检查,您可以先将图表安装到新的命名空间中,让测试在那里运行,然后在全部通过后删除该命名空间。这确实需要以一种可以访问特定于该命名空间的 URL 的方式编写测试。无论如何,基于服务名称的集群内部 URL 将是与命名空间相关的,但如果您在测试中使用外部 URL,那么您需要将它们切换为内部 URL 或使用前缀。

    【讨论】:

    • 这是有道理的。我还没有研究过使用命名空间。我们当前的 helm-chart 测试是在我们的测试和沙箱环境中运行的,作为投入生产之前的一些健全性检查,所以我猜临时暴露新版本的服务可能没问题? :) 在将您的答案标记为解决方案之前,我会看看其他人是否会提供其他答案:)
    • 您是在现场运行相同的测试还是在现场安装图表时禁用挂钩?
    • 这是一组测试,无论它们在什么环境中,它们都“运行”。但是其中一些测试仅在沙盒环境中执行,因为我们在这些沙盒测试中添加了几行代码,因此它们正在检查一些环境参数,如果不是“沙盒”,它们只会返回 void。
    • 我认为发布后的健全性检查是使用 helm 测试挂钩的好方法。对于创建或修改数据的更广泛的测试,我目前喜欢从管道运行这些测试,因为您不想实时更改数据。对于直播,您希望切换流量并检查/监控新版本是否正确处理流量。
    • 有道理。谢谢瑞恩 :)
    【解决方案2】:

    使用 pod 规范中的就绪和活跃度探针来确保在探针失败时部署甚至不会推出。

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 1970-01-01
      • 2014-10-05
      • 2023-01-12
      • 1970-01-01
      • 2018-04-15
      • 2015-06-30
      • 2013-04-07
      • 2019-12-17
      相关资源
      最近更新 更多