我有一个应用程序,它为 REST 请求提供服务器,并且正在侦听 Kafka 主题。我将应用程序部署到 Kubernetes 并像这样配置就绪探针
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
基本上遵循[configure-liveness-readiness-startup-probes]的说明
部署完成后,我可以看到 Pod 就绪探测失败
Readiness probe failed: cat: can't open '/tmp/healthy': No such file or directory
这是意料之中的。然后我向该主题发送了一条kafka消息。我观察到
1)我的应用程序已使用 kafka 消息并保存到数据库。
2)其余的api无法访问。
我假设如果 pod 的就绪探测失败,应用程序既不能接收 kafka 消息也不能接收 rest 请求。但是为什么在我的测试中,REST 请求和 Kafka 消息的处理方式不同。
根据 Kubernetes 文档:
The kubelet uses readiness probes to know when a Container is ready to start accepting traffic
但它并没有明确说明它真正意味着什么样的流量。如果就绪探测失败,kubernetes 是否只限制到 pod 的 http 流量,但不限制 tcp 流量(因为 Kafka 正在通过 tcp 工作)?
我的实际意图是让我的服务应用程序(kafka 消费者)能够控制何时接收 kafka 消息(以及 REST 请求)。例如,如果操作繁重,我的服务将删除 /tmp/healthy 文件,从而使 pod 无法准备好接收 kafka 消息和 Rest 请求。当繁重的操作完成后,应用程序会写入健康文件以使 pod 准备好接收消息。
更多信息,在我的测试中,kubernetes 版本是 v1.14.3,并且 kafka 代理在 kubernetes 之外的一个单独的 vm 中运行。