AWS EKS中SPOT实例ASG结合ALB出现502错误的求助
Spot节点下线导致ALB转发502的解决思路
利用Spot中断通知提前干预
部署AWS Node Termination Handler(NTH),配置它监听Spot中断、重平衡通知:- 收到通知后立即给节点添加
node.kubernetes.io/unschedulable污点,阻止新Pod调度 - 触发Pod优雅驱逐,同时让NTH在节点上创建标记文件,让Pod的readinessProbe检测到该文件后返回失败,快速标记Pod为NotReady,促使ALB将其从目标组移除
- 收到通知后立即给节点添加
优化Pod就绪探针逻辑
修改readinessProbe,让它不仅检查容器服务可用性,还要关联节点状态:- 通过Downward API注入节点名称到Pod环境变量,在探针脚本中调用kubelet本地接口(
http://127.0.0.1:10255/nodes/${NODE_NAME}/status)查询节点Ready状态 - 若节点已进入NotReady状态,探针直接返回失败,Pod会被立刻标记为未就绪,ALB停止转发请求
- 通过Downward API注入节点名称到Pod环境变量,在探针脚本中调用kubelet本地接口(
调整Kubernetes节点与Pod驱逐参数
- 修改kubelet配置,缩短
node-status-update-frequency(默认10秒),让节点状态变更更快同步到APIServer - 调小
pod-eviction-timeout(默认5分钟),节点NotReady后更快触发Pod驱逐流程 - 配置PodDisruptionBudget(PDB),确保驱逐过程中可用Pod数量满足业务最低需求
- 修改kubelet配置,缩短
优化ALB目标组配置
- 缩短健康检查间隔(如从30秒改为5秒)、降低失败阈值(如从3次改为2次),让ALB更快识别不可用Pod
- 调小目标组注销延迟(deregistration delay),默认300秒可改为30-60秒(需大于Pod的
terminationGracePeriodSeconds,确保剩余请求处理完成),加速ALB从目标组移除失效Pod
内容的提问来源于stack exchange,提问作者Roman Dayneko
相关产品推荐
相关产品推荐

