Helm Chart 测试的一般问题
General Questions on Helm Chart Tests
我正在使用 Helm Chart 测试,我有点困惑。我有几个(愚蠢的)问题,
- 测试舱有什么作用?为什么还要制作一个 Test Pod?为什么原来的Pod不能做测试?
- Test Pod如何与原始Pod通信?
- 测试 Pod 是否告诉原始 Pod 执行某些任务?
- 如果我想检查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 端点是否响应。
您需要的测试工具可能不属于您的主要应用程序。举一个极端的例子,许多 Go 镜像是建立在镜像 FROM scratch
之上的,除了应用程序二进制文件之外什么都不包含,所以你需要一个包含 curl
和 shell 的单独镜像.您可以想象 运行 一个更大的测试系统需要某种语言 运行 与正常语言不匹配的时间。
测试 pod 向应用程序服务“发出正常请求”。这通常是通过 HTTP 实现的,但这取决于应用程序的具体功能。
测试 pod 可以发出 HTTP POST 请求导致某些操作,并验证其结果。您还可以争辩说,测试 pod 不应在生产推出期间修改数据。除了普通的 network-request 路径之外,测试 pod 无法使应用程序“执行任务”。
测试 pod 可以发出一组已知的 (HTTP) 请求并验证返回的结果。例如,如果它得到 503 Service Unavailable 那几乎肯定是坏的。它可以根据 OpenAPI 规范验证响应是否具有正确的格式。可能没有随机的其他 pod 导致应用程序 运行 任意命令的路径,这不会帮助您证明应用程序正常工作。
我正在使用 Helm Chart 测试,我有点困惑。我有几个(愚蠢的)问题,
- 测试舱有什么作用?为什么还要制作一个 Test Pod?为什么原来的Pod不能做测试?
- Test Pod如何与原始Pod通信?
- 测试 Pod 是否告诉原始 Pod 执行某些任务?
- 如果我想检查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 端点是否响应。
您需要的测试工具可能不属于您的主要应用程序。举一个极端的例子,许多 Go 镜像是建立在镜像
FROM scratch
之上的,除了应用程序二进制文件之外什么都不包含,所以你需要一个包含curl
和 shell 的单独镜像.您可以想象 运行 一个更大的测试系统需要某种语言 运行 与正常语言不匹配的时间。测试 pod 向应用程序服务“发出正常请求”。这通常是通过 HTTP 实现的,但这取决于应用程序的具体功能。
测试 pod 可以发出 HTTP POST 请求导致某些操作,并验证其结果。您还可以争辩说,测试 pod 不应在生产推出期间修改数据。除了普通的 network-request 路径之外,测试 pod 无法使应用程序“执行任务”。
测试 pod 可以发出一组已知的 (HTTP) 请求并验证返回的结果。例如,如果它得到 503 Service Unavailable 那几乎肯定是坏的。它可以根据 OpenAPI 规范验证响应是否具有正确的格式。可能没有随机的其他 pod 导致应用程序 运行 任意命令的路径,这不会帮助您证明应用程序正常工作。