首页 > 解决方案 > GKE Ingress 获取 Pod 就绪/活跃度的速度很慢

问题描述

我成功地使用 gce ingress 使用 GKE 创建了一个集群。然而,Ingress 需要很长时间才能检测到服务是否准备好(我已经设置了 livenessProbe 和 readinessProbe)。我的豆荚设置

Containers:
...
  gateway:
    Liveness:   http-get http://:5100/api/v1/gateway/healthz delay=0s timeout=1s period=10s #success=1 #failure=3
    Readiness:  http-get http://:5100/api/v1/gateway/healthz delay=0s timeout=1s period=10s #success=1 #failure=3
...

和入口

...
Name:             main-ingress
  Host                              Path  Backends
  ----                              ----  --------
  <host>
                                    /api/v1/gateway/    gateway:5100 (<ip:5100>)
                                    /api/v1/gateway/*   gateway:5100 (<ip:5100>)
                                                        web:80 (<ip>)
Annotations:
  ingress.kubernetes.io/backends:               {"k8s-be-***":"HEALTHY","k8s-be-***":"HEALTHY","k8s-be-***":"HEALTHY"}
  kubernetes.io/ingress.allow-http:             false

我注意到的是,如果我终止所有服务并重新部署,UNHEALTHY即使 Kubernetes 本身设法获取所有正在运行的 pod/服务,后端也会在它启动之前停留相当长的一段时间

我还注意到,当设置livenessProbe和时readinessProbe,由ingress-gce 生成的后端健康检查如下

Backend
Timeout: 30 seconds

Backend Health check
Interval: 70 seconds
Timeout: 1 second
Unhealthy threshold: 10 consecutive failures
Healthy threshold: 1 success

而如果我只是部署一个简单的 nginx pod 而不指定livenessProbeand readinessProbe,则生成的后端如下

Backend
Timeout: 30 seconds

Backend Health Check
Interval: 60 seconds
Timeout: 60 seconds
Unhealthy threshold: 10 consecutive failures
Healthy threshold: 1 success

后端健康检查是不是捡东西慢的根本原因?如果是这样,知道如何加快速度吗?


更新 想在阅读下面@yyyyahir的回答后澄清

我知道在创建新入口时需要更长的时间,因为入口控制器需要配置新的负载均衡器、后端和所有其他相关的东西。

但是我还注意到,当我发布新版本的服务时(通过 Helm - 部署设置为重新创建而不是 RollingUpgrade)或者如果 pod 死机(内存不足)并重新启动,需要很长时间才能尽管 Pod 已经处于运行/健康状态(这与 GCP 中现有的 Ingress 和负载均衡器一起使用),但后端状态再次健康。有没有办法加快这个速度?

标签: kubernetesgoogle-kubernetes-enginekubernetes-ingress

解决方案


使用 GCE Ingress 时,您需要等待负载均衡器的配置时间,后端服务才会被认为是健康的。

考虑一下,当您使用这个入口类时,您依赖于 GCE 基础架构,该基础架构必须在将请求发送到集群之前自动配置HTTP(S) 负载均衡器及其所有组件。

当您设置没有 的部署时readinessProbe,默认值将应用于负载均衡器运行状况检查:

Backend Health Check
Interval: 60 seconds
Timeout: 60 seconds
Unhealthy threshold: 10 consecutive failures
Healthy threshold: 1 success

但是,使用readinessProbe 会将periodSeconds值添加到默认的健康检查配置中。所以,在你的情况下,你有10seconds +60默认情况下 = 70

Backend Health check
Interval: 70 seconds
Timeout: 1 second
Unhealthy threshold: 10 consecutive failures
Healthy threshold: 1 success

请注意,GKE 将仅用于readinessProbe在负载均衡器中设置运行状况检查。活力永远不会被挑选出来。

这意味着,最低值将始终是默认负载均衡器运行状况检查的值,60. 由于这些值是在从 GKE 调用负载均衡器时自动设置的,因此无法更改它们。

最后,您必须等待负载均衡器提供时间(大约 1-3 分钟)加上periodSeconds您在readinessProbe.


推荐阅读