“活跃/就绪”探测器如何与吊舱通信?

时间:2020-03-24 21:16:55

标签: kubernetes kubernetes-pod readinessprobe

我对k8s还是很陌生,所以如果这个问题没有道理或不正确/愚蠢,我深表歉意。

我为我的广告连播定义配置了一个活动性探针,该探针只是命中了一个健康API,并检查其响应状态以测试广告连播的活动性。

我的问题是,在我了解活跃性/就绪性调查的目的时,它们究竟是什么?它们是否只是另外一种类型的Pod,可以通过配置的API尝试与我们的Pod通信?还是它们是某种在Pod本身内部运行并尝试API调用的轻量级进程?

此外,探针如何与吊舱通信?我们是否需要为Pod配置服务,以便探针能够访问API,或者它是内部过程而无需其他配置?

2 个答案:

答案 0 :(得分:3)

简短答案: kubelet处理此检查以确保您的服务正在运行,如果没有运行,它将被另一个容器替换。 Kubelet运行在群集的每个节点中,您无需进行任何其他配置。

不需要来配置服务帐户以使探针正常工作,这是由kubernetes处理的内部过程。

来自Kubernetes documentation

Probekubelet在容器上定期执行的诊断。为了执行诊断,kubelet调用由Container实现的Handler。处理程序分为三种:

  • ExecAction:在容器内执行指定的命令。如果命令以状态代码0退出,则认为诊断成功。

  • TCPSocketAction:根据指定端口上容器的IP地址执行TCP检查。如果端口打开,则认为诊断成功。

  • HTTPGetAction:针对指定端口和路径上容器的IP地址执行HTTP Get请求。如果响应的状态码大于或等于200且小于400,则认为诊断成功。

每个探针具有以下三个结果之一:

  • 成功:容器通过了诊断。
  • 失败:容器诊断失败。
  • 未知:诊断失败,因此不应采取任何措施。

kubelet可以选择对正在运行的Container进行三种探测并对其做出反应:

  • livenessProbe:指示容器是否正在运行。如果活动性探针失败,则kubelet将杀死Container,然后对该Container进行restart policy处理。如果容器未提供活动性探针,则默认状态为Success

  • readinessProbe:指示容器是否准备好处理请求。如果就绪探针失败,则端点控制器将从与Pod匹配的所有服务的端点中删除Pod的IP地址。初始延迟之前的默认就绪状态为Failure。如果容器未提供就绪探测器,则默认状态为Success

  • startupProbe:指示容器中的应用程序是否已启动。如果提供了启动探针,则将禁用所有其他探针,直到成功。如果启动探针失败,则kubelet将杀死Container,然后对该Container进行restart policy处理。如果容器未提供启动探针,则默认状态为Success

答案 1 :(得分:0)

对于网络探针,它们从运行Pod的节点上的kubelet中运行。 Exec探针通过与kubectl exec相同的机制运行。