Helm Chart 测试的一般问题

General Questions on Helm Chart Tests

我正在使用 Helm Chart 测试,我有点困惑。我有几个(愚蠢的)问题,

  1. 测试舱有什么作用?为什么还要制作一个 Test Pod?为什么原来的Pod不能做测试?
  2. Test Pod如何与原始Pod通信?
  3. 测试 Pod 是否告诉原始 Pod 执行某些任务?
  4. 如果我想检查Ports and Hosts(ping server),测试Pod是告诉原来的Pod执行ping命令,还是测试Pod执行ping?如果测试 Pod 是 运行 测试,您如何确定原始 Pod 是否正常工作(即如果它没有做任何事情)?

也许一些关于 Helm 测试的理论对我很有帮助。如果有关于 Helm 测试的详细信息的文档,请告诉我。

假设您想知道 Stack Overflow 是否正常工作。所以你运行curl https://whosebug.com。 99.9% 的时间,负载平衡器和数据库的一些魔法以及未发生的事情,你会得到一个问题列表,但 0.1% 的时间你会得到一个“出了点问题”的页面。也就是说,通过从应用程序外部的某处发出 HTTP GET 请求,您仍然可以high-level 了解它是否在工作。

您可以根据需要从测试舱进行尽可能多或尽可能少的测试。发送 ICMP ECHO 数据包,如 ping(1) 所做的那样,并没有那么有趣,因为它仅验证服务是否存在以及 Kubernetes 网络层是否正常运行;它根本没有到达您的应用程序。一个简单的“你还活着吗”调用可能很有趣,但就绪和活跃度探测也能做到这一点。我可能会尝试编写一些依赖于整个应用程序及其依赖项可用的东西,而不仅仅是查看 HTTP 端点是否响应。

  1. 您需要的测试工具可能不属于您的主要应用程序。举一个极端的例子,许多 Go 镜像是建立在镜像 FROM scratch 之上的,除了应用程序二进制文件之外什么都不包含,所以你需要一个包含 curl 和 shell 的单独镜像.您可以想象 运行 一个更大的测试系统需要某种语言 运行 与正常语言不匹配的时间。

  2. 测试 pod 向应用程序服务“发出正常请求”。这通常是通过 HTTP 实现的,但这取决于应用程序的具体功能。

  3. 测试 pod 可以发出 HTTP POST 请求导致某些操作,并验证其结果。您还可以争辩说,测试 pod 不应在生产推出期间修改数据。除了普通的 network-request 路径之外,测试 pod 无法使应用程序“执行任务”。

  4. 测试 pod 可以发出一组已知的 (HTTP) 请求并验证返回的结果。例如,如果它得到 503 Service Unavailable 那几乎肯定是坏的。它可以根据 OpenAPI 规范验证响应是否具有正确的格式。可能没有随机的其他 pod 导致应用程序 运行 任意命令的路径,这不会帮助您证明应用程序正常工作。