一个 pod 通过另一个 pod 的 Liveness-Probe

Liveness-Probe of one pod via another

在我的 Kubernetes 设置中,我有 2 个 pods - A(通过部署)和 B(通过 DS)。 Pod B 以某种方式依赖于完全启动的 Pod A。我现在想在 Pods B 中设置一个 HTTP Liveness-Probe,以在通过 POD A 进行的健康检查失败时重启 POD B。如果我将我的 POD A 服务的外部 IP 放在主机中,重新启动工作正常。问题在于解析主机中的 DNS 名称。

如果我这样设置就可以了:

livenessProbe:
  httpGet:
    host: <POD_A_SERVICE_EXTERNAL_IP_HERE>
    path: /health
    port: 8000

如果我这样设置会失败:

livenessProbe:
  httpGet:
    host: auth
    path: /health
    port: 8000

失败,出现以下错误消息:

Liveness probe failed: Get http://auth:8000/health: dial tcp: lookup auth on 8.8.8.8:53: no such host

参考:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

上一页中的以下行是否也适用于 HTTP 探测器? “您不能在主机参数中使用服务名称,因为 kubelet 无法解析它。”

正确,DNS 不适用于 liveness 探测,kubelet 网络 space 基本上无法解析任何集群内 DNS。

您可以考虑将您的两个服务放在一个 pod 中作为 sidecar。这样他们将共享相同的地址 space 如果一个容器失败然后整个 pod 将重新启动。

另一种选择是为您的 pods/application 创建一个 operator 并基本上让它通过集群内 DNS 分别检查 pods 的活跃度并重新启动 pods 通过 Kubernetes API.

您也可以在 pod 中创建自己的脚本,该脚本仅调用 curl 来检查 200 OKkubectl 以在您得到其他东西时重新启动您的 pod。

请注意,对于上述 2 个选项,您需要确保 Coredns 稳定可靠,否则您的健康检查可能无法使您的服务有潜在的停机时间。

✌️☮️