Helm 测试最佳实践

Ser*_*kyi 8 docker kubernetes kubernetes-helm

只是为了澄清。

  1. 我不是在谈论 Helm 图表最佳实践。我可以在这里自己阅读:https : //helm.sh/docs/chart_best_practices/
  2. 我不是在谈论 Terratest。

我对 Helm Test 感兴趣,你可以在这里阅读更多关于它的信息https://helm.sh/docs/chart_tests/#chart-tests

不幸的是,文档没有为您提供很多信息,这部分是这个问题的原因。

我们有什么:

  1. 我们可以通过以下路径在图表中定义测试

our-app/templates/tests/test-our-app.yaml

  1. 据我所知,根据文档,它不是图表的单元测试,而更像是冒烟测试或集成测试。文档:“验证您的图表在安装时是否按预期工作”。这正是我所需要的。
  2. 为了运行测试https://helm.sh/docs/chart_tests/#steps-to-run-a-test-suite-on-a-release。我们需要安装 our-app Chart
    $ helm install our-app
Run Code Online (Sandbox Code Playgroud)

然后我们可以测试该图像

    $ helm test release-with-our-app
Run Code Online (Sandbox Code Playgroud)

我想澄清的事情:

  1. 我们应该有两个单独的 docker 镜像还是一个用于应用程序和测试?...

    一种)。如果它是应用程序代码和测试代码的单个图像,那么我们将在该图像上添加用于测试/测试的代码,这使得它更大,另外我们需要将测试所需的依赖项放在该图像上. 对我来说,这个解决方案似乎是错误的。

    b)。我们有一个单独的测试图像的情况更有意义,因为我们的应用程序 docker 图像没有任何不必要的依赖项。更重要的是,在第二个解决方案中,我们并不真正关心带有测试的 docker 镜像的大小,因为它应该是一个短期镜像,在对它的测试完成后会关闭。

    我的假设是否正确,我们应该为这些测试提供单独的图像吗?

  2. 如果有两个单独的图像,一个用于代码,另一个用于测试。我们如何与他们结婚?这是否意味着我们必须将 Build/Release 编号传递给 helm test 命令,以便它能够下拉正确的图像进行测试?

  3. 另外,如果我们有两个单独的图像。我应该在 docker 文件中指定测试运行进行测试吗?例如 :

   CMD ["sh", "-c", "gradle test -Denvironment=$ENVIRONMENT"]
Run Code Online (Sandbox Code Playgroud)

或者它应该在图表内

   our-app/templates/tests/test-our-app.yaml
Run Code Online (Sandbox Code Playgroud)

例如来自 mysql repo 的 test.yaml:

https://github.com/helm/charts/blob/master/stable/mysql/templates/tests/test-configmap.yaml

  1. 看起来文档中根本没有提到环境。我的问题是将环境名称传递给图表以便测试知道要命中哪些端点等的最佳/推荐方法是什么?应该是 Chart args如何将动态参数传递给运行作业的舵图

Ser*_*kyi 8

您可以通过以下链接在 mysql 图表中找到一个示例 https://github.com/helm/charts/tree/master/stable/mysql/templates

回答我自己的问题:

  1. 由于以下原因,我们为 helm 测试制作了一个单独的 docker 镜像:
    1.1 当 helm 烟雾 docker 镜像是单独的时,使其不受主应用程序 docker 镜像的任何约束。因此,您可以安装任何库并避免遵循主应用程序必须遵循的一些安全准则。
    1.2 helm test的docker镜像的大小没有限制,因为它是short live镜像,helm test的镜像是一个live,可以在内部测试一段时间。
  2. 我们通过图表版本与他们结婚。所以主应用程序的镜像总是与 helm 测试的 docker 镜像版本相同。 在此处输入图片说明

我们不需要传递任何东西,当您运行“helm test yourapp”时,helm 会查找您的应用程序的成功部署版本并使用该版本运行 helm test。
在此处输入图片说明
3. 当您运行“helm test yourapp”命令时。Helm 在文件
yourapp/templates/tests/smoke-test.yaml 中查找
由以下路径指定的命令:
spec/containers/command: ["sh", "-c", "your command"] 请看一下在屏幕截图上或转到 mysql 图表的 git repo https://github.com/helm/charts/tree/master/stable/mysql/templates 在此处输入图片说明

  1. 传递数据和 Env 特定数据的最佳方法是通过配置映射、环境变量和秘密传递它们,因为 Hanx 没有得到答复。如果它以这种方式存储,那么您可以通过 helm 值文件填充此类数据,并且很容易更新。我们发现在图像中包含特定于 env 的数据是一个糟糕的解决方案,因为例如,如果某个环境中的 URL/主机发生变化,我们需要创建一个新的构建,而不仅仅是更新值文件并执行部署。