GKE Ingress收集豆荚的准备度/活跃度很慢

时间:2019-12-17 09:18:57

标签: kubernetes google-kubernetes-engine kubernetes-ingress

我成功地使用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 /服务都在运行

我还注意到,当设置livenessProbereadinessProbe时,由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而不指定livenessProbereadinessProbe,则生成的后端如下

Backend
Timeout: 30 seconds

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

后端健康检查是否是提货缓慢的根本原因?如果是这样,知道如何加快速度吗?


更新 想要在阅读@yyyyahir's answer below

之后进行澄清

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

但是,我还注意到的是,当我发布新版本的服务时(通过Helm-部署设置为Recreate而不是RollingUpgrade),或者如果pod终止(内存不足)并重新启动,则需要花费相当长的时间。尽管Pod已处于运行状态/健康状态,但后端状态又恢复为健康状态(这与GCP中现有的Ingress和Load Balancer一起使用)。有没有办法加快速度?

1 个答案:

答案 0 :(得分:1)

使用GCE Ingress时,您需要等待负载均衡器的配置时间,然后backend service被认为是正常的。

请考虑使用此入口类时,您所依赖的GCE基础结构在向集群发送请求之前必须自动配置HTTP(S) load balancer及其所有组件。

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

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

但是,使用readinessProbe will add the periodSeconds value to the default health check configuration。因此,根据您的情况,您有10秒+ 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值。