文档首页/ 云容器引擎 CCE/ 用户指南/ 网络/ 服务(Service)/ 负载均衡(LoadBalancer)/ 网络与后端配置/ 为负载均衡类型的Service配置StatefulSet后端Pod的权重
更新时间:2026-05-21 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注解。

通过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'时,也可以使用kubernetes.io/elb.custom-backend-weights来为每个StatefulSet后端Pod配置权重。跨集群后端使用场景及配置请参考为负载均衡类型的Service配置跨集群的后端 。只需将其中的kubernetes.io/elb.multicluster-loadbalancer-weight配置换成kubernetes.io/elb.custom-backend-weights配置即可。

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

相关文档