在线业务对网络质量敏感、对网络延迟指标要求大,而离线业务对网络带宽占用大,如果两种业务在一起运行而不做任何控制,突发的流量则很可能影响在线业务,从而影响整体网络质量。通过对Pod进行细粒度的QoS配置,可以显著改善这种情况。本文介绍如何使用Kubernetes定义的Pod Annotations、涉及的带宽限制信息及如何配置优先级控制策略。
带宽限制
Terway网络插件支持对Pod网络带宽进行控制,您可以使用以下Pod Annotations指定Pod出、入方向带宽:
Annotation | Mean |
---|---|
kubernetes.io/ingress-bandwidth: 10M | Ingress banwidth |
kubernetes.io/egress-bandwidth: 10M | Egress banwidth |
带宽限制能力和集群网络类型相关,支持情况如下:
Terway Mode | Egress Shaping | Ingress Shaping |
---|---|---|
VPC Mode (legacy) | ![]() | ![]() |
共享ENI多IP模式 | ![]() | ![]() |
共享ENI多IP模式+IPvlan eBPF | ![]() | ![]() |
在IPvlan+eBPF模式下,节点内核5.10版本以上的Pod将使用EDT(Earliest Departure Time)对带宽进行控制。其他模式下将使用TBF Qdisc对带宽进行控制。
使用Kubernetes定义的Pod Annotations
- 在Terway v1.3.0版本后新建的集群支持使用Kubernetes的Pod Annotations指定Pod出、入方向带宽。
- 在Terway v1.3.0版本前新建的集群只支持使用阿里云的Pod Annotations指定Pod出、入方向带宽,Annotations定义如下:
Annotation Mean k8s.aliyun.com/ingress-bandwidth: 10M Ingress banwidth k8s.aliyun.com/egress-bandwidth: 10M Egress banwidth 阿里云定义的Pod Annotations已经标记为废弃,将来会移除,如您需要使用带宽控制,请使用Kubernetes定义的Pod Annotations。
对于在Terway v1.3.0版本前新建的集群,您需要修改Terway配置文件来启用Kubernetes定义的Pod Annotations。- 执行以下命令,打开和修改Terway的ConfigMap。
kubectl edit cm -n kube-system eni-config
- 在
data.10-terway.conf
下,增加capabilities
配置。apiVersion: v1 data: 10-terway.conf: | { "cniVersion": "0.3.1", "name": "terway", "capabilities": {"bandwidth": true}, #增加 "type": "terway" }
- 修改完成后,按Esc键,输入:wq!并按Enter键,保存修改后的配置文件并退出编辑模式。
- 执行以下命令,重建Terway Pods使得配置生效。
kubectl delete -n kube-system pod -l app=terway-eniip
- 执行以下命令,打开和修改Terway的ConfigMap。
配置优先级控制策略
默认情况下网卡队列在发送数据包时是执行先入先出的规则,通过对数据包分类可将延迟敏感业务的数据包优先发送,从而改善延迟。默认情况下优先级控制不启用,您需要通过配置启用。
Terway支持通过以下Pod Annotations指定Pod使用的优先级。
Annotation | Mean |
---|---|
k8s.aliyun.com/network-priority: "guaranteed" | 延迟敏感业务 |
k8s.aliyun.com/network-priority: "best-effort" | 普通业务 |
k8s.aliyun.com/network-priority: "burstable" | 大带宽业务 |
通过以下配置启用优先级控制策略。
- 执行以下命令,打开和修改Terway的ConfigMap。
kubectl edit cm -n kube-system eni-config
- 在
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" }
- 修改完成后,按Esc键,输入:wq!并按Enter键,保存修改后的配置文件并退出编辑模式。
- 重建Terway Pods使得配置生效。
kubectl delete -n kube-system pod -l app=terway-eniip
重要 启用优先级控制后,ENI网卡队列将替换为mq+prio。