Pod Descheduler问题:处于CrashLoopBackOff状态的Pod无法被驱逐
问题分析与解决方案
核心配置问题
你的RemoveFailedPods策略存在两个关键错误,导致CrashLoopBackOff状态的Pod无法被驱逐:
- 无效字段
failed_pods_with_reason:Kubernetes 1.25版本的Descheduler(对应release-1.25分支)中,RemoveFailedPods策略的参数里没有该字段,你添加的CrashLoopBackOff不会被识别,需将其移入reasons数组。 - 原因拼写错误:
OutOfcpu应改为OutOfCPU(CPU大写),否则该原因的Pod也无法被匹配。
修正后的ConfigMap配置
--- apiVersion: v1 kind: ConfigMap metadata: name: descheduler-policy-configmap namespace: kube-system data: policy.yaml: | apiVersion: "descheduler/v1alpha1" kind: "DeschedulerPolicy" evictFailedBarePods: false strategies: "RemoveDuplicates": enabled: true "RemovePodsViolatingInterPodAntiAffinity": enabled: true "LowNodeUtilization": enabled: true params: nodeResourceUtilizationThresholds: thresholds: "cpu" : 20 "memory": 20 "pods": 20 targetThresholds: "cpu" : 50 "memory": 50 "pods": 50 "RemoveFailedPods": enabled: true params: failedPods: reasons: - OutOfCPU # 修正拼写错误 - CreateContainerConfigError - Evicted - Unhealthy - Error - Completed - BackOff - CrashLoopBackOff # 移至正确的配置数组 includingInitContainers: true # excludeOwnerKinds: # - "Job" minPodLifetimeSeconds: 120 # 注意:实际为2分钟,注释标注的1小时有误 "PodLifeTime": enabled: true params: podLifeTime: maxPodLifeTimeSeconds: 60 # 注意:实际为1分钟,注释标注的7天有误 states: - "Pending" - "PodInitializing" - "ContainerCreating" "RemovePodsHavingTooManyRestarts": enabled: true params: podsHavingTooManyRestarts: podRestartThreshold: 5 includingInitContainers: true runningPods: enabled: false failedPods: enabled: true
后续验证步骤
- 更新ConfigMap:
kubectl apply -f <你的ConfigMap文件路径> - 重启Descheduler Pod(或等待下一次CronJob触发,确保新配置加载):
kubectl delete pods -n kube-system -l <你的Descheduler Pod标签> - 查看Descheduler日志,确认配置无报错:
kubectl logs -n kube-system <descheduler-pod-name> - 检查
CrashLoopBackOff状态的Pod是否被正常驱逐。
另外注意:配置中minPodLifetimeSeconds和maxPodLifeTimeSeconds的实际值与注释描述不符,若需对应注释的时长,请调整数值。
内容的提问来源于stack exchange,提问作者0ptimus
相关产品推荐
相关产品推荐

