You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pod Descheduler问题:处于CrashLoopBackOff状态的Pod无法被驱逐

问题分析与解决方案

核心配置问题

你的RemoveFailedPods策略存在两个关键错误,导致CrashLoopBackOff状态的Pod无法被驱逐:

  1. 无效字段failed_pods_with_reason:Kubernetes 1.25版本的Descheduler(对应release-1.25分支)中,RemoveFailedPods策略的参数里没有该字段,你添加的CrashLoopBackOff不会被识别,需将其移入reasons数组。
  2. 原因拼写错误: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

后续验证步骤

  1. 更新ConfigMap:
    kubectl apply -f <你的ConfigMap文件路径>
    
  2. 重启Descheduler Pod(或等待下一次CronJob触发,确保新配置加载):
    kubectl delete pods -n kube-system -l <你的Descheduler Pod标签>
    
  3. 查看Descheduler日志,确认配置无报错:
    kubectl logs -n kube-system <descheduler-pod-name>
    
  4. 检查CrashLoopBackOff状态的Pod是否被正常驱逐。

另外注意:配置中minPodLifetimeSeconds和maxPodLifeTimeSeconds的实际值与注释描述不符,若需对应注释的时长,请调整数值。

内容的提问来源于stack exchange,提问作者0ptimus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:47:28