オンラインアプリケーションはネットワークの待ち時間に敏感ですが、オフラインアプリケーションは大量の帯域幅リソースを消費します。 両方のタイプのアプリケーションを制限なく実行すると、予期しないトラフィックの急増がオンラインアプリケーションを圧倒し、ネットワーク全体に悪影響を及ぼす可能性があります。 この問題を回避するには、ポッドのサービス品質 (QoS) を設定します。 このトピックでは、Kubernetesで定義されているポッドのアノテーションと関連する帯域幅制限について説明します。 このトピックでは、QoSクラスを設定する方法についても説明します。
帯域幅の制限
Terwayネットワークプラグインを使用して、ポッドのネットワーク帯域幅を制御できます。 次の表に、ポッドの受信帯域幅と送信帯域幅を指定するために使用できるポッドの注釈を示します。
注釈 | 平均 |
kubernetes.io/ingress-bandwidth: 10M | Ingress帯域幅 |
kubernetes.io/egress-bandwidth: 10M | 出力帯域幅 |
次の表に、帯域幅を制限するためにさまざまなTerwayモードでサポートされる機能を示します。
Terwayモード | 出口の形成 | 進入シェーピング |
VPCモード (レガシー) | ||
共有ENI | ||
共有ENI + IPVLAN eBPF | ||
共有ENI + DataPath V2 |
共有ENI + DataPath V2モードでは、カーネルバージョンより後のバージョンを使用するノードのポッドは、帯域幅を制限するためにEarliest Departure Time (EDT) を使用5.10ます。 他のモードでは、ポッドはTBF Qdiscを使用して帯域幅を制限します。
Kubernetesで定義されたポッドアノテーションの使用
Terway V1.3.0以降を使用するContainer Service for Kubernetes (ACK) クラスターでは、Kubernetesで定義されたポッドアノテーションを使用して、ポッドの受信帯域幅と送信帯域幅を指定できます。
V1.3.0より前のバージョンのTerwayを使用するACKクラスターでは、Alibaba Cloudで定義されたポッドのアノテーションのみを使用して、ポッドのインバウンドおよびアウトバウンド帯域幅を制限できます。 次の表に、ポッドの注釈を示します。
注釈
平均
k8s.aliyun.com/ingress-bandwidth: 10M
Ingress帯域幅
k8s.aliyun.com/egress-bandwidth: 10M
出力帯域幅
Alibaba Cloudによって定義されたポッドのアノテーションは廃止され、まもなくACKから削除されます。 帯域幅を制限する場合は、Kubernetesで定義されているポッドアノテーションを使用します。
V1.3.0より前のバージョンのTerwayを使用するACKクラスターの場合、TerwayのConfigMapを変更して、Kubernetesで定義されたポッドアノテーションを有効にする必要があります。
次のコマンドを実行して、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キーを押してConfigMapを保存し、終了します。
次のコマンドを実行して、変更されたConfigMapを有効にするTerwayポッドを再作成します。
kubectl delete -n kube-system pod -l app=terway-eniip
QoSクラスの設定
デフォルトでは、elastic network interface (ENI) キューは、パケットを処理するときに先入れ先出し (FIFO) の原則に従います。 これにより、遅延に敏感なアプリケーションのパケットに優先順位を付けることができます。 デフォルトでは、トラフィックの優先順位付けは無効です。 この機能を手動で有効にする必要があります。
次の表に、Terwayを使用する場合にポッドのQoSクラスを構成するために使用できるポッドの注釈を示します。
注釈 | 平均 |
k8s.aliyun.com/network-priority: 「保証」 | 遅延に敏感なアプリケーション |
k8s.aliyun.com/network-priority: 「ベストエフォート」 | 通常のアプリケーション |
k8s.aliyun.com/network-priority: 「バースト可能」 | 大量の帯域幅を消費するアプリケーション |
トラフィックの優先順位付けを有効にするには、次の手順を実行します。
次のコマンドを実行して、TerwayのConfigMapを変更します。
kubectl edit cm -n kube-system eni-config
追加
enable_network_priority
にdata.10-terway.conf
セクションでトラフィックの優先順位付けを有効にします。apiVersion: v1 data: 10-terway.conf: | { "cniVersion": "0.3.1", "name": "terway", "enable_network_priority": true, "type": "terway" }
ConfigMapを変更した後、Escキーを押します。 次に、入力します。: wq! Enterキーを押して変更したファイルを保存し、編集モードを終了します。
変更されたConfigMapを有効にするためにTerwayポッドを再作成します。
kubectl delete -n kube-system pod -l app=terway-eniip
重要トラフィックの優先順位付けが有効になると、ENIキューはmq + prioに置き換えられます。