AKS中KEDA ScaledJob无响应及Pod被驱逐问题求助
问题分析与解决方案
问题根源
从Pod错误信息可直接定位核心问题:
The node was low on resource: ephemeral-storage. Container azdevops-agent-job was using 23001896Ki, which exceeds its request of 0.
问题出在容器未配置临时存储(ephemeral-storage)的请求与限制,当容器占用的临时存储超出节点剩余资源时,Kubernetes会直接驱逐该Pod,导致Azure DevOps Agent失联,进而引发流水线挂起。
另外,你的集群仅使用1台Standard_E8ds_v5节点(本地SSD临时存储容量64Gi),未做存储配额限制的情况下,多Agent Pod并发运行极易耗尽节点存储资源。
解决方案
1. 为容器配置临时存储的请求与限制
在ScaledJob的容器资源配置中添加ephemeral-storage的请求和限制值,根据实际使用情况调整(比如参考当前容器的23Gi使用量,设置请求10Gi、限制25Gi预留缓冲空间):
containers: - env: # 省略原有环境变量配置 resources: limits: cpu: 1500m memory: 6Gi ephemeral-storage: 25Gi # 添加临时存储限制 requests: cpu: 500m memory: 3Gi ephemeral-storage: 10Gi # 添加临时存储请求 # 省略原有容器其他配置
2. 调整ScaledJob的最大副本数
结合单节点的资源容量重新计算合理的最大副本数:
- CPU维度:Standard_E8ds_v5为8核,每个Pod请求0.5核,扣除节点系统资源后最多支持12-14个Pod,但受限于存储容量
- 存储维度:节点临时存储共64Gi,每个Pod限制25Gi的话,最多仅能运行2个Pod
建议将maxReplicaCount调整为2,或扩容节点池增加实例数后再提升副本数。
3. 优化Agent的临时存储占用
- 修改Agent工作目录到已挂载的Azure Disk持久卷:当前已挂载
/mnt,可通过环境变量指定Agent工作目录,减少临时存储消耗:- name: AZP_WORK value: /mnt/work - 清理Agent镜像中的冗余文件、压缩镜像层,减小镜像本身的存储占用。
4. 配置节点存储预留
为AKS节点的系统组件预留部分临时存储,避免系统进程占用过多资源导致Pod被驱逐。可通过节点池的--kubelet-config参数配置evictionHard中的nodefs.available阈值,例如设置为节点存储的10%。
验证步骤
- 更新ScaledJob配置并应用:
kubectl apply -f scaledjob.yaml -n ado - 触发流水线,观察Pod状态,确认不再出现驱逐错误。
- 监控节点临时存储使用情况:
kubectl describe node <节点名称> | grep -A 10 "Ephemeral Storage"
内容的提问来源于stack exchange,提问作者Vowneee
相关产品推荐
相关产品推荐

