Kubernetes GKE入口速度慢,无法获取吊舱准备就绪/活跃度

Kubernetes GKE入口速度慢,无法获取吊舱准备就绪/活跃度,kubernetes,google-kubernetes-engine,kubernetes-ingress,Kubernetes,Google Kubernetes Engine,Kubernetes Ingress,我成功地使用GKE和gce入口创建了一个集群。但是,入口需要很长时间才能检测到服务已准备就绪(我已经设置了livenessProbe和readinessProbe)。 我的豆荚竖起来了 Containers: ... gateway: Liveness: http-get http://:5100/api/v1/gateway/healthz delay=0s timeout=1s period=10s #success=1 #failure=3 Readiness:

我成功地使用GKE和gce入口创建了一个集群。但是,入口需要很长时间才能检测到服务已准备就绪(我已经设置了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
然而,如果我只部署一个简单的nginx pod,而不指定
livenessProbe
readinessProbe
,则生成的后端如下

Backend
Timeout: 30 seconds

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

Backend Health Check
Interval: 60 seconds
Timeout: 60 seconds
Unhealthy threshold: 10 consecutive failures
Healthy threshold: 1 success
后端运行状况检查是否是提货缓慢的根本原因?如果是的话,有没有办法加快速度


更新 看完后想澄清一下

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


然而,我也注意到,当我发布新版本的服务时(通过Helm-deployment设置为重新创建而不是RollingUpgrade),或者如果pod死机(内存不足)并重新启动,尽管pod已经处于运行/正常状态,但后端状态再次正常还需要一段时间(这适用于GCP中现有的入口和负载平衡器)。有没有办法加快此速度?

使用GCE入口时,需要等待负载平衡器设置时间,然后才能认为正常

考虑到当您使用这个入口类时,您依赖于GCE基础设施,该基础设施在将请求发送到集群之前必须自动提供一个入口类及其所有组件

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

Backend Health Check
Interval: 60 seconds
Timeout: 60 seconds
Unhealthy threshold: 10 consecutive failures
Healthy threshold: 1 success
但是,使用
readinessProbe
。因此,在您的情况下,默认情况下,您有
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分钟)加上
readinessProbe

中设置的
periodSeconds
值。感谢您的回答和代码链接!我试图查看ingress gce代码,但没有找到它。我更新了我的问题以澄清我的问题(我之前错过了).有什么想法吗?我试图用你发布的信息进行复制。我一直在卷曲一个正在工作的3副本部署。我使用了两个测试使其失败:第一个测试将其缩小到0,第二个测试使用错误的映像进行更新。两个测试都立即开始返回502。我注意到,当我放大/重新部署一个工作映像时,它花费了一个小时d~20秒后开始正常服务请求(考虑到此时没有正常的复制副本).这就是你所说的吗?我还注意到web UI几乎从未选择更改,并且花了很长时间将更改标记为健康/不健康,是吗?此外,你在哪里看到错误?你是如何测量延迟的?是的,正如你所描述的。我并没有真正进行适当的延迟测量,但总体上我的经验是在正常服务请求之前约1分钟。不确定此时是否可以根据所有这些信息执行任何操作,这里的变量似乎是部署的映像。如果为readinessProbe设置最小值,则可能与您自己容器中的进程有关,(如果有),等等。也许解决这个问题的最好方法就是在那里检查。