当前位置: 首页 > 知识库问答 >
问题:

即使Kubernetes就绪探测失败,Pod也能接收通信

柴晔
2023-03-14
readinessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 5
  periodSeconds: 5
Readiness probe failed: cat: can't open '/tmp/healthy': No such file or directory

1)kafka消息已被我的应用程序使用并保存到数据库中。
2)无法访问rest api。

我假设如果Pod的准备探测失败,应用程序既不能接收kafka消息,也不能接收rest请求。但为什么在我的测试中,REST请求和Kafka消息的处理方式不同。

根据Kubernete文档:

The kubelet uses readiness probes to know when a Container is ready to start accepting traffic

共有1个答案

柳豪
2023-03-14

这是两件非常不同的事情:

  • 接收请求:外部服务正在发送请求并期望响应。
  • 发送请求:您的服务正在发送请求并等待响应。

当ReadinessProbe失败时,不会将任何新的请求路由到Pod。

无法打开“/tmp/health”:没有这样的文件或目录

如果服务需要/tmp/health目录才能正常工作,则服务应在启动时检查该目录,如果所需的目录不可用,则应检查exit(1)(崩溃时出现错误消息)。这应该在连接到Kafka之前完成。如果您的应用程序持续使用该目录,例如写入该目录,则应检查并正确处理任何操作错误代码--根据您的情况记录和崩溃。

我的实际意图是使我的服务应用程序(kafka consumer)能够控制何时接收kafka消息(以及REST请求)。例如。如果有大量操作,我的服务将删除/tmp/health文件,从而使pod无法接收kafka消息和Rest请求。

Kafka消费者投票Kafka获得更多的数据,只要消费者想要。换句话说,Kafka消费者只要准备好获取更多的数据,就会要求获取更多的数据。

消费者代码示例:

 while (true) {
     ConsumerRecords<String, String> records = consumer.poll(100);
     for (ConsumerRecord<String, String> record : records) {
         // process your records
     }
 }

记住commit处理过的记录,这样消息就不会被多次处理,例如在崩溃之后。

 类似资料:
  • 在上使用helm upgrade命令运行容器时,出现了以下错误: “准备探测失败:获取http://172.17.0.6:3003/:拨号tcp 172.17.0.6:3003:GetSockopt:连接拒绝”。

  • 我使用的是标准的skydns RC/SVC YAMLS。 吊舱描述: (etcd) 我还将放入kube2sky容器中,ca.crt与服务器上的ca.crt匹配。

  • 我试图在Azure中新部署的aks Kuberbetes(1.9.6)集群中部署zalenium helm chart。但我不让它起作用。豆荚给出了下面的日志: 描述pod给出:警告不健康4M(x12超过6M)kubelet,aks-agentpool-93668098-0就绪探测失败:HTTP探测失败,状态代码:502 Zalenium图像版本:Dosel/Zalenium:3 如果使用Kube

  • 我正在尝试设置我的第一个Kubernetes集群,它似乎已经设置好,直到nginx-ingress控制器。以下是我的集群信息:节点:三个RHEL7和一个RHEL8节点,主服务器运行在RHEL7Kubernetes服务器版本:1.19.1网络使用:Frannel coredns运行良好。在所有节点上禁用selinux和防火墙 然后,我按照以下页面中的说明安装了nginx入口控制器:https://d

  • 当我执行部署并描述pod时,我看到在输出底部的'Events'下列出了以下内容: (这是令人困惑的,因为它将年龄声明为2m1s-但大于这个值-所以我不确定它为什么将这个值报告为年龄) 就绪探测随后以相同错误失败。IP号与我的pod的IP匹配,我在pod描述中的下看到了这一点: 活性和就绪探针的失败导致pod不断终止和重新启动。 该应用程序有一个默认的页面,所以我相信如果健康探测能够连接,它应该会收

  • 我正在尝试设置istio1。5.1在minicube kubernetes集群中,我遵循Knative的官方文档,在不使用侧车注入的情况下设置istio。我我面临istio入口网关服务的问题,该服务将入口网关服务的外部ip显示为。我已经浏览了这里发布的其他答案,以及许多其他论坛,但没有一个对我有帮助。 使用Minikube v1.9.1与驱动=无头盔v2.16.5 kubectl v1.18.0