为Pod配置QoS

在线业务对网络质量敏感、对网络延迟指标要求高,而离线业务对网络带宽占用大,如果两种业务在一起运行而不做任何控制,很可能会出现由于争抢网络资源所导致的服务高延迟和服务不可用。您可自定义Pod的出入方向带宽及数据包优先级,以实现对网络资源更细粒度的控制,降低服务互相挤占带宽的影响。

Pod带宽限制

您可通过Kubernetes标准Pod AnnotationsPod出入方向的带宽进行限制:

Annotation

说明

kubernetes.io/ingress-bandwidth: 10M

Pod入方向的带宽限制,示例值为10Mbps。

kubernetes.io/egress-bandwidth: 10M

Pod出方向的带宽限制,示例值为10Mbps。

重要
  • Terway的配置为共享ENI模式,并启用了IPvlan+eBPF网络加速模式时,不支持配置kubernetes.io/ingress-bandwidth注解。

  • DataPathV2网络加速模式下,Terwayv.1.13.0版本开始支持Ingress带宽限制。且所有带宽限制只对进出节点的流量生效,同节点流量不生效。

  • Terway v1.3.0之前的版本创建的集群需要修改Terway配置以启用该功能。具体操作,请参见下方的说明。

早于Terway v1.3.0创建的集群

如果您的集群在创建时使用了Terway v1.3.0之前的版本,您需要修改Terway配置,以启用上方的Annotation。

修改Terway配置

  1. 执行以下命令,编辑TerwayConfigMap。

    kubectl edit cm -n kube-system eni-config
  2. data.10-terway.conf下,增加capabilities配置。

    apiVersion: v1
    data:
      10-terway.conf: |
        {
          "cniVersion": "0.3.1",
          "name": "terway",
          "capabilities": {"bandwidth": true},
          "type": "terway"
        }
  3. 保存并退出后,执行以下命令,重启Terway Pod使配置生效。

    kubectl delete -n kube-system pod -l app=terway-eniip

数据包优先级控制策略

默认情况下,网卡队列在发送数据包时执行先入先出的规则。Terway支持对Pod的数据包配置优先级控制策略,在流量高峰时也可以保证部分高优先级服务的数据包优先收发,从而改善延迟。

此功能默认不开启,请修改Terway配置以启用。

重要
  • 此功能不支持开启了DataPathV2网络加速模式的集群。

  • 此功能不支持独占 ENI 模式的节点。

  • 启用优先级控制后,ENI网卡队列将替换为mq+prio。

启用数据包优先级控制

  1. 执行以下命令,编辑TerwayConfigMap。

    kubectl edit cm -n kube-system eni-config
  2. data.10-terway.conf下,增加enable_network_priority配置。

    apiVersion: v1
    data:
      10-terway.conf: |
        {
          "cniVersion": "0.3.1",
          "name": "terway",
          "enable_network_priority": true,
          "type": "terway"
        }
  3. 保存并退出后,执行以下命令,重启Terway Pod使配置生效。

    kubectl delete -n kube-system pod -l app=terway-eniip

Terway支持通过以下Pod Annotations指定Pod数据包的优先级。

Annotation

说明

k8s.aliyun.com/network-priority: "guaranteed"

最高优先级,适用于延迟敏感业务

k8s.aliyun.com/network-priority: "best-effort"

中等优先级,适用于普通业务

k8s.aliyun.com/network-priority: "burstable"

最低优先级,适用于需要大带宽但延迟不敏感的业务