helm test pod 应该是生产 pod 的 "full copy" 吗?

Should helm test pod be a "full copy" of production pod?

我的问题是关于 Helm 测试及其基本原理。

简单的问题是,helm 测试 pod 应该是生产 pod 的“完整副本”吗?

通常,在我见过的所有示例中,测试 pod 使用精简的 Dockerfile,其中包含 curl 等基本内容,而 test.yaml 文件仅包含 host/port/secrets 服务。测试本身通常只关注 ping 或连接到服务。

但这仅仅是 helm 测试哲学的意义所在吗? helm tests 背后的想法是测试 pod 应该是生产 pod 的完整副本并且 运行 基本上是您想要的任何测试吗?

希望在构建和部署映像之前,您已经 运行 对 pod 进行了一些更有针对性的测试。我通常使用的序列看起来像这样:

  1. 在容器外部,运行 服务的单元测试 (RSpec/JUnit/PyTest/Jest/catch2/shunit/...)。
  2. 一旦这些测试通过,构建 Docker 图像并将其推送到存储库。
  3. 将候选图像部署到测试集群。
  4. 运行 集成测试发出纯 HTTP 请求,或将消息发布到 Kafka 或 RabbitMQ 队列,并从外部观察结果。
  5. 将映像升级为生产。

在这个序列中,请注意在我们完全构建容器之前依赖于代码的一组测试(单元测试)运行,以及针对已部署系统的测试(集成测试) ) 在部署的环境中测试容器的对外接口。在这两种情况下,您都不需要同时使用应用程序代码、测试和“在容器中”。

我预计 helm test 测试可能更像是冒烟测试,而不是完整的集成测试;检查该服务是否存在并且可以以正确的格式回答请求。确实,测试是一个任意作业,可以 运行 一个具有任意代码的任意容器,并且可以包括完整的应用程序作为其图像。但是 运行ning 对部署的 pod“旁边”的东西的测试与 运行ning 对部署的 pod 本身的测试不同。