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

Kubernetes中如何实现首连调度至低CPU Pod并保持会话粘性?

解决方案

核心思路

要实现「首次连接优先调度到低负载Pod+后续请求保持会话粘性」,需要结合Nginx Ingress的负载均衡策略与已配置的会话粘性规则。默认轮询调度无法满足首连的负载感知需求,需切换为基于Pod负载的调度算法,同时保留原有cookie粘性配置即可达成目标。

具体配置步骤

1. 启用负载感知调度(二选一)

在现有Ingress的metadata.annotations中添加对应注解,替换默认的轮询策略:

选项1:优先调度到连接数最少的Pod(推荐,原生支持)

添加以下注解,Nginx会自动将首次请求分配给当前连接数最低的Pod,天然适配低负载调度需求:

nginx.ingress.kubernetes.io/load-balance: "least_conn"

选项2:基于CPU/带宽的加权调度(需额外组件支持)

如果需要更精细的CPU、带宽负载感知,需借助集群指标采集组件(如Metrics Server)配合权重调度:

  • 先确保集群已部署metrics-server,能采集Pod的实时CPU、内存使用率
  • 使用第三方工具(如kube-metrics-adapter)将Pod指标转化为Service Endpoint的权重
  • 添加注解启用加权轮询:
nginx.ingress.kubernetes.io/load-balance: "weighted_round_robin"

此方式配置复杂,适合对负载均衡精度要求极高的场景。

2. 保留原有会话粘性配置

你已配置的cookie粘性注解无需修改:当客户端首次请求被调度到某Pod后,后续请求会通过携带的会话cookie直接转发到该Pod,自动保持会话粘性,且优先级高于负载均衡策略。

最终完整Ingress配置(以least_conn为例)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "stickounet"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    # 新增:启用最少连接数调度策略
    nginx.ingress.kubernetes.io/load-balance: "least_conn"
spec:
  rules:
    - host: hello-world.info
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service-svc
                port:
                  number: 80

注意事项

  • least_conn是Nginx Ingress原生支持的策略,无需额外组件,配置简单高效
  • 若使用基于CPU/带宽的加权调度,必须保证集群能正常采集Pod的实时指标
  • 会话粘性优先级高于负载均衡:客户端携带有效会话cookie时,会直接转发到绑定Pod,不再执行负载调度

内容的提问来源于stack exchange,提问作者Berkay Aktaş

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:21:05