kubernetes - GKE Ingress 获取 pod 就绪/活跃度的速度很慢

标签 kubernetes google-kubernetes-engine kubernetes-ingress

我成功地使用 gce ingress 使用 GKE 创建了一个集群。但是 Ingress 需要很长时间才能检测到服务是否就绪(我已经设置了 livenessProbe 和 readinessProbe)。
我的 pod 设置

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 本身设法接收所有正在运行的 pods/service

我还注意到,当设置 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 后澄清

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

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

最佳答案

使用 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 中设置的值.

关于kubernetes - GKE Ingress 获取 pod 就绪/活跃度的速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59371014/

相关文章:

kubernetes - 将 Kubelet、Kube-proxy 等限制在特定的网络接口(interface)上

kubernetes - K8S 上每个分支/命名空间的子域

kubernetes - 如何监控 Kubernetes Pod 崩溃?

Google Container Engine 中的 Kubernetes HTTPS 入口

docker - 无法在 Kubernetes 中调用我的 Loadbalanced 服务

kubernetes - 跨本地和公共(public)云的混合 K8S

kubernetes - 如何根据负载自动缩放pod数量?

node.js - 与 'wss://api.example.com/ws' 的 WebSocket 连接失败 : Error during WebSocket handshake: Unexpected response code: 404

kubernetes - 使用稳定的 Helm 图在kubernetes中安装cert-manager后无法对证书执行描述

kubernetes - Kubernetes Traefik,保持服务不可用