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

Azure Kubernetes Service Pod Pending:CPU资源不足问题排查求助

AKS发布后Pod Pending(CPU不足)问题排查与解决

核心问题定位

你的Standard_D2ds_v5节点单台是2vCPU,AKS会预留约0.4vCPU给系统组件,单节点实际可分配给Pod的CPU约1.6vCPU。每个带Istio Sidecar的Pod包含2个容器,按你设置的LimitRange默认请求250m/容器计算,单Pod总CPU请求是500m。40个Pod的总请求是20vCPU,而当前5个节点的总可分配CPU仅约8vCPU,CPU请求总和远超集群总可用资源,这就是导致Pod Pending的根本原因。

排查步骤

  1. 确认节点资源分配状态
    执行命令查看每个节点的可分配资源和已分配资源:

    kubectl describe nodes
    

    重点关注Allocatable和Allocated resources部分,能直观看到CPU资源已被占满。

  2. 统计所有Pod的CPU请求总和
    用以下命令列出所有Pod的CPU请求:

    kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}/{.metadata.name}{"\t"}{.spec.containers[*].resources.requests.cpu}{"\n"}{end}'
    

    手动统计总和,对比节点总可分配CPU,验证是否超量。

  3. 检查节点自动扩缩容状态
    你的Linux节点池最大可扩到6个实例,当前只有4个在提供服务?执行以下命令确认扩缩容是否正常触发:

    # 查看HPA状态
    kubectl get hpa -A
    # 查看节点池配置与状态
    az aks nodepool list --resource-group <你的资源组名> --cluster-name <你的AKS集群名> -o table
    

    排查是否因为扩缩容阈值未达标(比如CPU使用率未到触发值)或延迟导致未扩容。

解决方案

  1. 降低Pod的CPU请求配置
    修改LimitRange,降低默认CPU请求/限制,比如调整为100m请求、300m限制,这样单Pod总请求降到200m,40个Pod总请求8vCPU,适配5个节点的容量:

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: cpu-limit-range
      namespace: kube-system
    spec:
      limits:
      - default:
          cpu: "300m"
        defaultRequest:
          cpu: "100m"
        type: Container
    ---
    apiVersion: v1
    kind: LimitRange
    metadata:
      name: cpu-limit-range
      namespace: default
    spec:
      limits:
      - default:
          cpu: "300m"
        defaultRequest:
          cpu: "100m"
        type: Container
    

    同时手动更新现有Deployment的资源配置,确保新启动的Pod生效。

  2. 强制扩容节点池到最大实例数
    如果自动扩缩容未触发,手动扩容Linux节点池到6个实例,增加总可用CPU资源:

    az aks nodepool scale --resource-group <资源组名> --cluster-name <AKS集群名> --name <Linux节点池名> --node-count 6
    
  3. 单独配置Istio Sidecar资源
    避免Sidecar和业务容器共用默认资源配置,通过Istio的ConfigMap单独设置Sidecar的资源请求/限制:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: istio-sidecar-injector
      namespace: istio-system
    data:
      config: |
        policy: enabled
        templates:
          - sidecar
        injectors:
          sidecar:
            injectedAnnotations:
              sidecar.istio.io/inject: "true"
            template: |
              spec:
                containers:
                - name: istio-proxy
                  resources:
                    requests:
                      cpu: "100m"
                      memory: "128Mi"
                    limits:
                      cpu: "300m"
                      memory: "256Mi"
    

后续优化建议

  • 配置HPA(水平Pod自动扩缩容)和Cluster Autoscaler的告警规则,提前感知资源不足风险。
  • 定期清理闲置Pod或调整低优先级Pod的资源配置,释放集群资源。

内容的提问来源于stack exchange,提问作者Nayden Van

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:45:58