Liveness/Readiness 探针如何与 Pod 通信?

Mar*_*olo 3 kubernetes kubernetes-pod readinessprobe

我对 k8s 很陌生,所以如果问题没有意义或者不正确/愚蠢,我深表歉意。

我为我的 pod 定义配置了一个活性探针,它只访问运行状况 API 并检查其响应状态以测试 pod 的活性。

我的问题是,虽然我了解活性/就绪探针的目的……它们到底是什么?它们是否只是另一种类型的 Pod,它们被旋转起来并尝试通过配置的 API 与我们的 Pod 进行通信?或者它们是某种轻量级进程,在 Pod 内部运行并尝试 API 调用?

另外,探针如何与 Pod 通信?我们是否需要为 Pod 配置一个服务,以便探针能够访问 API,或者它是一个内部进程,不需要额外的配置?

Mr.*_*ler 5

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

\n\n

无需配置服务帐户即可让探测器正常工作,这是由 kubernetes 处理的内部流程。

\n\n

来自 Kubernetes文档

\n\n
\n

探针 是kubelet 在容器上定期执行 诊断 。为了执行诊断,kubelet 调用 容器实现的处理程序。处理程序分为三种类型:

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

  • \n
  • TCPSocketAction:对指定端口上的 Container\xe2\x80\x99s IP 地址执行 TCP 检查。如果端口打开,则认为诊断成功。

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

  • \n
\n\n

每个探测都有以下三个结果之一:

\n\n
    \n
  • 成功:容器通过诊断。
  • \n
  • 失败:容器诊断失败。
  • \n
  • 未知:诊断失败,因此不应采取任何操作。
  • \n
\n\n

kubelet 可以选择对正在运行的容器执行三种探测并做出反应:

\n\n
    \n
  • livenessProbe:指示Container是否正在运行。如果活性探测失败,kubelet 会杀死 Container,并且 Container 会遵循其 重启策略。如果容器不提供活性探针,则默认状态为 Success

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

  • \n
  • startupProbe:表示Container内的应用程序是否启动。如果提供了启动探针,则所有其他探针都将被禁用,直到成功为止。如果启动探测失败,kubelet 会杀死 Container,并且 Container 会遵循其 重启策略。如果容器不提供启动探针,则默认状态为 Success

  • \n
\n
\n