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

AKS集群请求路由异常:如何确保新请求分配至空闲Pod而非忙碌Pod?

针对AKS计算密集型应用的性能优化方案

1. 切换到"最小连接数"负载调度策略

AKS默认的Service调度(iptables模式)采用轮询策略,完全不考虑Pod当前的负载状态。切换到IPVS模式并启用最小连接数调度,能让流量自动优先分配给空闲Pod:

  • 启用AKS的IPVS模式:
    az aks update --name <你的集群名> --resource-group <资源组名> --enable-ipvs
    
  • 在Service中添加注解指定调度算法:
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.kubernetes.io/ipvs-scheduler: "lc" # 最小连接数调度
      name: your-app-service
    spec:
      selector:
        app: your-app
      ports:
      - port: 80
        targetPort: 8080
    

2. 实现负载感知的自定义就绪探针

普通就绪探针只检查Pod是否存活,无法感知请求负载。给应用加一个负载状态接口,让Pod在忙碌时主动标记为未就绪:

  • 应用内部开发/ready接口:维护当前处理的请求计数器,当计数器>0时返回503 Service Unavailable,空闲时返回200 OK
  • 在Deployment中配置就绪探针:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: your-app-deployment
    spec:
      template:
        spec:
          containers:
          - name: your-app
            image: your-app-image:latest
            readinessProbe:
              httpGet:
                path: /ready
                port: 8080
              initialDelaySeconds: 5
              periodSeconds: 2 # 高频检查,快速感知负载变化
              failureThreshold: 1
    

这样Kubernetes会立即将忙碌的Pod从服务端点列表中移除,直到它空闲下来。

3. 优化CPU资源配置,避免节流

计算密集型应用的CPU请求/限制配置不合理会直接导致节流和负载不均:

  • 先通过性能测试确定单Pod处理一个请求所需的CPU量,比如测试后发现单请求需要1核CPU
  • 配置Pod的资源请求和限制:
    resources:
      requests:
        cpu: "1" # 保证Pod能分配到足够的CPU资源
      limits:
        cpu: "1.2" # 留一定缓冲,避免触发节流
    
  • 启用基于CPU利用率的HPA,自动扩容应对负载高峰:
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: your-app-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: your-app-deployment
      minReplicas: 3
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 70 # CPU利用率到70%时扩容
    

4. 配置Ingress层的流量控制

在Ingress层面限制每个Pod的并发连接数,避免单个Pod被压垮:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/limit-connections: "1" # 每个Pod最多处理1个并发请求
    nginx.ingress.kubernetes.io/limit-rpm: "2" # 每分钟最多2个请求(根据你的请求处理时长调整)
  name: your-app-ingress
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: your-app-service
            port:
              number: 80

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:52:26