一个 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
上一页中的以下行是否也适用于 HTTP 探测器?
“您不能在主机参数中使用服务名称,因为 kubelet 无法解析它。”
正确,DNS 不适用于 liveness 探测,kubelet 网络 space 基本上无法解析任何集群内 DNS。
您可以考虑将您的两个服务放在一个 pod 中作为 sidecar。这样他们将共享相同的地址 space 如果一个容器失败然后整个 pod 将重新启动。
另一种选择是为您的 pods/application 创建一个 operator 并基本上让它通过集群内 DNS 分别检查 pods 的活跃度并重新启动 pods 通过 Kubernetes API.
您也可以在 pod 中创建自己的脚本,该脚本仅调用 curl
来检查 200 OK
和 kubectl
以在您得到其他东西时重新启动您的 pod。
请注意,对于上述 2 个选项,您需要确保 Coredns 稳定可靠,否则您的健康检查可能无法使您的服务有潜在的停机时间。
✌️☮️
在我的 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
上一页中的以下行是否也适用于 HTTP 探测器? “您不能在主机参数中使用服务名称,因为 kubelet 无法解析它。”
正确,DNS 不适用于 liveness 探测,kubelet 网络 space 基本上无法解析任何集群内 DNS。
您可以考虑将您的两个服务放在一个 pod 中作为 sidecar。这样他们将共享相同的地址 space 如果一个容器失败然后整个 pod 将重新启动。
另一种选择是为您的 pods/application 创建一个 operator 并基本上让它通过集群内 DNS 分别检查 pods 的活跃度并重新启动 pods 通过 Kubernetes API.
您也可以在 pod 中创建自己的脚本,该脚本仅调用 curl
来检查 200 OK
和 kubectl
以在您得到其他东西时重新启动您的 pod。
请注意,对于上述 2 个选项,您需要确保 Coredns 稳定可靠,否则您的健康检查可能无法使您的服务有潜在的停机时间。
✌️☮️