我正在尝试使用exec探针在GKE中准备就绪和活跃。这是因为它是kubernetes在gRPC后端的recommended way to do health checks的一部分。但是,当我将exec探针配置放入我的部署yaml并应用它时,它不会在GCP中生效。这是我的容器yaml:
- name: rev79-uac-sandbox
image: gcr.io/rev79-232812/uac:latest
imagePullPolicy: Always
ports:
- containerPort: 3011
readinessProbe:
exec:
command: ["bin/grpc_health_probe", "-addr=:3011"]
initialDelaySeconds: 5
livenessProbe:
exec:
command: ["bin/grpc_health_probe", "-addr=:3011"]
initialDelaySeconds: 10
但是健康检查仍然失败,当我查看GCP控制台中的运行状况检查配置时,我看到一个针对'/'的纯HTTP健康检查
当我在GCP控制台中编辑运行状况检查时,似乎没有任何方法可以选择exec类型。此外,我看不到任何关于活动检查的提及与准备检查形成对比,即使这些是单独的Kubernetes事情。
谷歌云支持使用exec进行健康检查吗?如果是这样,我该怎么办?如果没有,我如何健康检查gRPC服务器?
当我们使用gRPC服务而不是使用HTTP探测时,TCP探测很有用。
- containerPort: 3011
readinessProbe:
tcpSocket:
port: 3011
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 3011
initialDelaySeconds: 15
periodSeconds: 20
kubelet将尝试在指定端口上打开容器的套接字。如果它可以建立连接,容器被认为是健康的,如果它不能被认为是失败define-a-tcp-liveness-probe
Exec探针在GKE中的工作方式与它们在任何地方的工作方式相同。您可以在“kubectl describe pod”中查看活体探测结果。或者您只需登录pod,执行命令并查看其返回码。
Vasily Angapov和Suresh Vishnoi的答案都应该在理论上有效,但实际上它们并没有(至少在我的实践中)。
所以我的解决方案是在我的后端容器上启动另一个服务器 - 一个HTTP服务器,它只需要在收到请求时执行运行状况检查,如果通过则返回200状态,如果失败则返回503。
我还必须在我的容器上打开第二个端口供该服务器监听。
服务器必须实现grpc探针协议,如here所示this article