为负载均衡类型的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命令行配置
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建名为“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权重配置。
- 创建Service。
kubectl create -f service-test.yaml
回显如下,表示Service已创建。
service/service-test created
验证权重设置成功
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“服务”,找到新建Service所在行,单击负载均衡名称跳转至ELB控制台查看。
- 切换至“监听器”页签,查看监听器的后端服务器已添加辅助弹性网卡,并确认权重是否符合预期。

相关文档
当您开启跨集群后端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.multicluster和kubernetes.io/elb.custom-backend-weights配置。