EKS和ALB入口在我们的服务器端使用。在AWS EKS下,容器的活动性和就绪性探测器定义如下
readinessProbe:
failureThreshold: 3
httpGet:
path: /
port: 3000
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
livenessProbe:
httpGet:
path: /
port: 3000
scheme: HTTP
initialDelaySeconds: 45
periodSeconds: 15
字符串
ALB入口Yarn
kind: Ingress
metadata:
name: alb-ingress
namespace: prod
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS":443}]'
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/load-balancer-attributes: access_logs.s3.enabled=false
型
最近,pod遇到OOM被杀死,并成功重启。我们假设pod在就绪状态后,即40秒后(initDelay 30秒+ 10秒探测)可以接收网络流量,但pod在重启成功后立即接收网络流量,没有initDelay
30秒。
如我们所知,网络流量由ALB目标组转发到pod。我们检查ALB目标组的健康检查设置
Port: Traffic port
Healthy threshold: 2 consecutive health check successes
Unhealthy threshold: 2 consecutive health check failures
Timeout: 5 seconds
Interval: 15 seconds
型
我们注意到ALB目标组的健康检查间隔为15秒,似乎periodSeconds
和livenessProbe
的值相同。如果Pod遇到OOM被杀死,并在15秒间隔内成功重启,则目标组无法检查此Pod的故障,因此目标组可以将网络流量转发到此Pod。
一个可能的解决方案是减少目标群体的健康检查间隔,但似乎无法完全解决这个问题。
以下是我的问题:
readinessProbe
在AWS EKS和ALB ingress中失败,如何正确配置?- 配置ALB目标组的运行状况检查间隔以匹配容器的
readinessProbe
和livenessProbe
的最佳做法是什么?
1条答案
按热度按时间u0njafvf1#
一种选择是,我们可以在AWS负载均衡器控制器上启用
Pod readiness gates
,以指示pod已注册到ALB,并且可以正常接收流量。在创建pod期间,控制器通过mutating webhook自动将必要的就绪门配置注入pod规范。在某些情况下,需要pod就绪性门,以在以下情况下实现零停机时间滚动部署:
Healthy
所需的时间Initial
或Draining
状态的已注册目标;这会导致服务中断Pod readiness gate
支持默认在AWS负载均衡器控制器上启用。您需要将就绪门注入标签应用到您想要使用此功能的每个名称空间。字符串
注意:这只适用于
target-type: ip
,因为当使用target-type: instance
时,它是作为后端使用的节点,在这种情况下,ALB本身不知道pod/podReadiness。来源:https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.1/deploy/pod_readiness_gate/