文档首页/ 云容器引擎 CCE/ 用户指南/ 网络/ 服务(Service)/ 负载均衡(LoadBalancer)/ 网络与后端配置/ 为负载均衡类型的Service配置StatefulSet后端Pod的权重
更新时间:2026-09-20 GMT+08:00

为负载均衡类型的Service配置StatefulSet后端Pod的权重

在使用弹性负载均衡(ELB)与集群中的Service对接时,通常情况下所有后端Pod会均匀分配流量。但在某些特定场景下,例如需要对性能更强的Pod分配更多流量,或对新部署的Pod进行灰度发布时,这种均匀分配的方式无法满足需求。

您可以通过在Service的metadata.annotations中添加自定义注解kubernetes.io/elb.custom-backend-weights,为特定Pod设置自定义权重(仅支持StatefulSet类型工作负载)。

前提条件

  • 已创建CCE Turbo集群,其他类型的集群不支持该功能。
  • 集群版本满足以下要求:
    • v1.29集群:v1.29.15-r60及以上版本
    • v1.30集群:v1.30.14-r60及以上版本
    • v1.31集群:v1.31.14-r20及以上版本
    • v1.32集群:v1.32.9-r20及以上版本
    • v1.33集群:v1.33.7-r20及以上版本
    • v1.34集群:v1.34.3-r10及以上版本
    • v1.35集群:v1.35.1-r0及以上版本
    • 其他更高版本的集群

约束与限制

  • 仅独享型负载均衡实例支持此功能。
  • 此功能不能与动态调整后端云服务器权重功能(kubernetes.io/elb.adaptive-weight注解)同时配置。
  • 如果开启跨集群访问功能时同时使用此功能,则不能配置kubernetes.io/elb.multicluster-loadbalancer-weight注解。
  • 使用此功能时Service仅支持配置单端口监听器,不支持配置区间端口监听器。

通过kubectl命令行配置

  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 创建名为“service-test.yaml”的YAML文件,此处文件名可自定义。

    vi service-test.yaml
    以关联已有ELB为例,YAML配置文件如下:
    apiVersion: v1
    kind: Service
    metadata:
      name: test
      labels:
        app: test-state
        version: v1
      namespace: default
      annotations:
        kubernetes.io/elb.class: performance   # ELB实例类型,此功能只支持独享型(performance)
        kubernetes.io/elb.id: <your_elb_id>   # ELB ID,替换为实际值
        #  配置StatefulSet后端Pod的权重
        kubernetes.io/elb.custom-backend-weights: |
          {
            "defaultWeight": 12,
            "groups": [
              {
                "listener": {
                  "protocol": "TCP",
                  "port": 978
                },
                "statefulSets": [
                  {
                    "name": "test-state",
                    "weights": [
                      {
                        "weight": 18,
                        "podIndexes": [1]
                      }
                    ]
                  }
                ]
              }
            ]
          }
    spec:
      selector:  # Service需关联StatefulSet类型的工作负载
        app: test-state
        version: v1
      externalTrafficPolicy: Cluster
      ports:
        - name: cce-service-0
          targetPort: 80
          nodePort: 0
          port: 978
          protocol: TCP
      type: LoadBalancer
      loadBalancerIP: 192.168.0.6
    表1 kubernetes.io/elb.custom-backend-weights字段数据结构说明

    参数

    是否必填

    参数类型

    描述

    defaultWeight

    是

    Integer

    默认后端权重。未被显式指定权重的Pod将使用此值。

    取值范围:1~100

    groups

    否

    Array of WeightGroup Object

    权重规则分组列表,每组对应一个监听器所对接的后端服务器。

    表2 WeightGroup数据结构说明

    参数

    是否必填

    参数类型

    描述

    listener

    是

    Listener Object

    匹配目标监听器。

    statefulSets

    是

    Array of StatefulSet Object

    要配置权重的StatefulSet列表。

    表3 Listener数据结构说明

    参数

    是否必填

    参数类型

    描述

    protocol

    是

    String

    监听器协议,需要与该Service对接的监听器协议保持一致。

    port

    是

    Integer

    监听器端口,需要与该Service对接的监听器端口保持一致。

    表4 StatefulSet数据结构说明

    参数

    是否必填

    参数类型

    描述

    name

    是

    String

    StatefulSet名称,需要与该Service实际关联的StatefulSet名称一致。

    如果该Service关联的工作负载中无一匹配该名称,或匹配的工作负载类型为非StatefulSet,则权重配置不生效。

    weights

    是

    Array of Weight Object

    该StatefulSet下的Pod权重配置。

    表5 Weight数据结构说明

    参数

    是否必填

    参数类型

    描述

    weight

    是

    String

    分配给指定Pod的流量权重。

    取值范围:1~100

    podIndexes

    是

    Array of Integer

    使用该权重的Pod索引列表(例如示例中的[1]表示Pod test-state-1)。

  3. 创建Service。

    kubectl create -f service-test.yaml

    回显如下,表示Service已创建。

    service/service-test created

验证权重设置成功

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“服务”,找到新建Service所在行,单击负载均衡名称跳转至ELB控制台查看。
  3. 切换至“监听器”页签,查看监听器的后端服务器已添加辅助弹性网卡,并确认权重是否符合预期。

相关文档

当您开启跨集群后端kubernetes.io/elb.multicluster: 'true'时,如果需要为StatefulSet后端Pod配置权重,请将其中的kubernetes.io/elb.multicluster-loadbalancer-weight配置换成kubernetes.io/elb.custom-backend-weights配置,其余配置不变。跨集群后端使用场景及配置请参考为负载均衡类型的Service配置跨集群的后端 。

kubernetes.io/elb.custom-backend-weights中配置的StatefulSet只对该Service对接的后端服务器生效。所以跨集群使用时,您需要为每个集群的Service添加kubernetes.io/elb.multicluster和kubernetes.io/elb.custom-backend-weights配置。