kubernetes Kubenetes readinessProbe在AWS EKS和ALB入口中失败

k4emjkb1  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(127)

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秒,似乎periodSecondslivenessProbe的值相同。如果Pod遇到OOM被杀死,并在15秒间隔内成功重启,则目标组无法检查此Pod的故障,因此目标组可以将网络流量转发到此Pod。
一个可能的解决方案是减少目标群体的健康检查间隔,但似乎无法完全解决这个问题。
以下是我的问题:

  • readinessProbe在AWS EKS和ALB ingress中失败,如何正确配置?
  • 配置ALB目标组的运行状况检查间隔以匹配容器的readinessProbelivenessProbe的最佳做法是什么?
u0njafvf

u0njafvf1#

一种选择是,我们可以在AWS负载均衡器控制器上启用Pod readiness gates,以指示pod已注册到ALB,并且可以正常接收流量。在创建pod期间,控制器通过mutating webhook自动将必要的就绪门配置注入pod规范。
在某些情况下,需要pod就绪性门,以在以下情况下实现零停机时间滚动部署:

  • 部署中的复制副本数量较少
  • 启动部署的滚动更新
  • 部署新Pod所需的时间少于AWS负载均衡器控制器注册新Pod并使其健康状态在目标组中变为Healthy所需的时间
  • 在此滚动更新期间的某个时刻,目标组可能仅具有处于InitialDraining状态的已注册目标;这会导致服务中断

Pod readiness gate支持默认在AWS负载均衡器控制器上启用。您需要将就绪门注入标签应用到您想要使用此功能的每个名称空间。

$ kubectl label namespace readiness elbv2.k8s.aws/pod-readiness-gate-inject=enabled

字符串

注意:这只适用于target-type: ip,因为当使用target-type: instance时,它是作为后端使用的节点,在这种情况下,ALB本身不知道pod/podReadiness。

来源:https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.1/deploy/pod_readiness_gate/

相关问题