跳转至

VPC QoS

Kube-OVN 支持使用 QoSPolicy CRD 对自定义 VPC 的流量速率进行限制。

EIP QoS

对 EIP 进行限速,限速值为 1Mbps,优先级为 1,这里 shared=false,表示这个 QoSPolicy 只能给这个 EIP 使用且支持动态修改 QoSPolicy 去变更 QoS 规则。

QoSPolicy 配置如下:

apiVersion: kubeovn.io/v1
kind: QoSPolicy
metadata:
  name: qos-eip-example
spec:
  shared: false
  bindingType: EIP
  bandwidthLimitRules:
  - name: eip-ingress
    rateMax: "1" # Mbps
    burstMax: "1" # Mbps
    priority: 1
    direction: ingress
  - name: eip-egress
    rateMax: "1" # Mbps
    burstMax: "1" # Mbps
    priority: 1
    direction: egress

IptablesEIP 配置如下:

kind: IptablesEIP
apiVersion: kubeovn.io/v1
metadata:
  name: eip-1
spec:
  natGwDp: gw1
  qosPolicy: qos-eip-example

.spec.qosPolicy 的值支持创建时传入,也支持创建后修改。

查看已启用 QoS 的 EIP

通过 label 查看已经设置对应 qos 的 eip:

# kubectl get eip  -l ovn.kubernetes.io/qos=qos-eip-example
NAME    IP             MAC                 NAT   NATGWDP   READY
eip-1   172.18.11.24   00:00:00:34:41:0B   fip   gw1       true

VPC NATGW net1 网卡 QoS

对 VPC NATGW 的 net1 网卡速率进行限制,限速值为 10Mbps,优先级为 3,这里 shared=true,表示这个 QoSPolicy 可以同时给多个资源使用,这种场景下不允许修改 QoSPolicy 的内容。

QoSPolicy 配置如下:

apiVersion: kubeovn.io/v1
kind: QoSPolicy
metadata:
  name: qos-natgw-example
spec:
  shared: true
  bindingType: NATGW
  bandwidthLimitRules:
  - name: net1-ingress
    interface: net1
    rateMax: "10" # Mbps
    burstMax: "10" # Mbps
    priority: 3
    direction: ingress
  - name: net1-egress
    interface: net1
    rateMax: "10" # Mbps
    burstMax: "10" # Mbps
    priority: 3
    direction: egress

VpcNatGateway 配置如下:

kind: VpcNatGateway
apiVersion: kubeovn.io/v1
metadata:
  name: gw1
spec:
  vpc: test-vpc-1
  subnet: net1
  lanIp: 10.0.1.254
  qosPolicy: qos-natgw-example
  selector:
    - "kubernetes.io/hostname: kube-ovn-worker"
    - "kubernetes.io/os: linux"

.spec.qosPolicy 的值支持创建传入,也支持后续修改。

net1 网卡特定流量 QoS

对 net1 网卡上特定流量进行限速,限速值为 5Mbps,优先级为 2,这里 shared=true,表示这个 QoSPolicy 可以同时给多个资源使用,此时不允许修改 QoSPolicy 的内容。

QoSPolicy 配置如下:

apiVersion: kubeovn.io/v1
kind: QoSPolicy
metadata:
  name: qos-natgw-example
spec:
  shared: true
  bindingType: NATGW
  bandwidthLimitRules:
  - name: net1-extip-ingress
    interface: net1
    rateMax: "5" # Mbps
    burstMax: "5" # Mbps
    priority: 2
    direction: ingress
    matchType: ip
    matchValue: src 172.18.11.22/32
  - name: net1-extip-egress
    interface: net1
    rateMax: "5" # Mbps
    burstMax: "5" # Mbps
    priority: 2
    direction: egress
    matchType: ip
    matchValue: dst 172.18.11.23/32

VpcNatGateway 配置如下:

kind: VpcNatGateway
apiVersion: kubeovn.io/v1
metadata:
  name: gw1
spec:
  vpc: test-vpc-1
  subnet: net1
  lanIp: 10.0.1.254
  qosPolicy: qos-natgw-example
  selector:
    - "kubernetes.io/hostname: kube-ovn-worker"
    - "kubernetes.io/os: linux"

查看已启用 QoS 的 NATGW

通过 label 查看已经设置对应 qos 的 eip:

# kubectl get vpc-nat-gw  -l ovn.kubernetes.io/qos=qos-natgw-example
NAME   VPC          SUBNET   LANIP
gw1    test-vpc-1   net1     10.0.1.254

查看 qos 规则

# kubectl get qos -A
NAME                SHARED   BINDINGTYPE
qos-eip-example     false    EIP
qos-natgw-example   true     NATGW

限制

  • 只有在未使用时才能删除 QoS 策略。因此,在删除 QoS 策略之前,请先查看已启用 QoS 的 EIP 和 NATGW,去掉它们的 spec.qosPolicy 配置。

微信群 Slack Twitter Support Meeting

评论