4

在我的 Kubernetes 设置中,我有 2 个 pod - A(通过部署)和 B(通过 DS)。Pod B 在某种程度上依赖于 Pod A 的完全启动。我现在想在 Pod 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 Probes?“您不能在主机参数中使用服务名称,因为 kubelet 无法解析它。”

4

1 回答 1

2

正确,DNS 不适用于 liveness probes,kubelet 网络空间基本上无法解析任何集群内的 DNS。

您可以考虑将您的两个服务作为 sidecar 放在一个 pod 中。这样,如果一个容器发生故障,它们将共享相同的地址空间,然后重新启动整个 pod。

另一种选择是为您的 pod/应用程序创建一个操作符 ,基本上让它通过集群内 DNS 分别检查两个 pod 的活跃度,并通过 Kubernetes API 重新启动这些 pod。

您也可以在 pod 中创建自己的脚本,该脚本只调用curl检查 a200 OKkubectl在收到其他内容时重新启动您的 pod。

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

✌️☮️

于 2020-07-25T02:27:59.630 回答