kubernetes - 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 而不指定livenessProbe
and 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 和负载均衡器一起使用),但后端状态再次健康。有没有办法加快这个速度?
解决方案
使用 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
值添加到默认的健康检查配置中。所以,在你的情况下,你有10
seconds +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
.
推荐阅读
- python - 配对来自不同组的成员(任何 Python 脚本都会有所帮助)
- ios - Xcode 11 - 警告:自动布局本地化:没有任何布局约束的视图可能会剪切其内容或与其他视图重叠
- ios - iOS 13 的 UIColor 新属性,比如 label、secondaryLabel、tertiaryLabel 和 quaternaryLabel,这个有什么用?
- powershell - 使用 System.Xml.XmlDocument PreserveWhitespace 属性修改 xml 在结束标记之前添加额外的空间
- python - 从几个列标题中删除前 x 个字符
- laravel - 如何将参数从控制器传递到使用方法建模?
- data-structures - 动态编程 - 翻转数组元素的最小符号以获得可能的最小正元素总和
- java - 打包到 WAR for Apache Tomcat 时配置 Web 资源的位置
- java - spring boot Tomcat部署样式未加载到资源文件夹中
- php - 链接模型 cakephp 2.x