AWS EC2 Auto Scaling Group从0扩容至1实例超时及就绪信息查找失败问题排查咨询
AWS EC2 Auto Scaling Group从0扩容至1实例超时及就绪信息查找失败问题排查咨询
碰到这种阻塞流水线的问题确实闹心,咱们一步步来拆解排查,先解决眼前的超时问题,再深挖根因:
一、先确认5分钟超时是否合理,以及怎么调整
g4dn-2xlarge是GPU加速实例,启动流程比普通CPU实例复杂多了——要加载NVIDIA驱动、初始化GPU容器运行时,加上EKS节点本身的kubelet启动、CNI网络插件部署、节点注册到集群这一系列步骤,5分钟(300秒)真的可能不够用,尤其是如果你的节点自定义了UserData脚本(比如装额外工具),或者所在AWS区域的GPU实例库存紧张导致启动延迟的话。
调整ASG的健康检查宽限期
这是最直接的缓解手段:
- 登录AWS控制台,找到你的Auto Scaling Group,进入「配置」>「编辑」
- 找到「健康检查宽限期」(Health Check Grace Period),把默认的300秒改成900秒(15分钟)甚至1200秒(20分钟),保存配置
- 如果用的是EKS托管节点组,直接在节点组的「高级配置」里调整这个参数就行
调整Cluster Autoscaler的扩容超时
Cluster Autoscaler默认的扩容超时是10分钟,但如果你的ASG健康检查宽限期调长了,也要同步调整CA的超时:
- 如果是用Helm部署的CA,在values.yaml里添加或修改参数:
--scale-up-timeout=15m - 如果是直接管理CA的Deployment,在容器的command里加上这个参数,比如:
command: - ./cluster-autoscaler - --v=4 - --scale-up-timeout=15m - --cloud-provider=aws # 其他原有参数...
调整ASG实例预热时间
在ASG的配置里找到「实例预热」(Instance Warmup),设置成和健康检查宽限期相近的时间,避免ASG在实例还没就绪的时候就判断扩容失败,重复触发扩容。
二、深挖「找不到就绪信息」的根因
调整超时只是治标,得找到为什么实例没就绪,咱们一步步查:
登录残留实例排查节点状态
- 先SSH或者SSM连到那个残留的g4dn实例,查看kubelet日志:
journalctl -u kubelet -f,看看有没有注册集群失败、CNI初始化错误、驱动加载失败的报错 - 检查节点是否注册到EKS集群:在控制平面执行
kubectl get nodes,看这个节点的状态是NotReady还是Pending,有没有对应的污点/标签问题 - 检查NVIDIA驱动状态:执行
nvidia-smi,如果报错说明驱动没装好,这会导致节点无法就绪(如果你的节点组依赖GPU就绪探针的话)
- 先SSH或者SSM连到那个残留的g4dn实例,查看kubelet日志:
查看ASG的事件日志
- 回到ASG的控制台,切换到「事件」标签,看看有没有健康检查失败的具体提示,比如「实例状态检查失败」「ELB健康检查未通过」,或者「实例未在宽限期内变为健康状态」的记录
排查CA的详细日志
- 找到CA的Pod:
kubectl get pods -n kube-system | grep cluster-autoscaler - 查看完整日志:
kubectl logs <ca-pod-name> -n kube-system,除了那条“Failed to find readiness information”,有没有提到节点未注册、节点标签不符合扩容要求,或者CA无法和kube-apiserver通信的细节
- 找到CA的Pod:
检查节点的UserData脚本
- 如果你的节点用了自定义的UserData,查看脚本执行日志:
cat /var/log/cloud-init-output.log,看有没有脚本执行超时、安装包失败的情况——比如自定义安装NVIDIA驱动时编译卡住,会直接拖慢整个节点启动流程
- 如果你的节点用了自定义的UserData,查看脚本执行日志:
三、针对g4dn实例的特殊优化
- 尽量用AWS官方的EKS Optimized GPU AMI,这些AMI已经预装了经过验证的NVIDIA驱动和nvidia-container-toolkit,启动速度比自定义编译驱动快很多
- 检查EKS节点的默认污点:g4dn节点默认会带
nvidia.com/gpu=present:NoSchedule的污点,确保你的流水线Pod配置了对应的容忍(不过这是调度的问题,和节点就绪无关,但如果CA是因为Pod无法调度误判的话也要注意)
最后,调整完参数后可以手动触发一次从0到1的扩容测试,看看超时问题是否解决,再根据日志里的具体报错解决根因。
备注:内容来源于stack exchange,提问作者Shanteva
相关产品推荐
相关产品推荐

