排他的な ENI モードは、Pod に最適なネットワークパフォーマンスを提供し、ネットワーク集約型アプリケーションに最適です。このモードは、ビッグデータ分析、リアルタイムストリーム処理、ビデオストリーミング、オンラインゲーム、科学計算などのネットワークに敏感なアプリケーションに対して、高いネットワークスループットと超低ネットワーク遅延を実現します。高頻度取引の場合、このモードはマルチキャスト機能も提供します。
制限事項
ECS インスタンスを追加するには Terway v1.11.0 以降が、Lingjun インスタンスを追加するには Terway v1.14.3 以降が必要です。コンポーネントのバージョンをアップグレードするには、「Terway」をご参照ください。
クラスターでデュアルスタックを有効にする場合、ノードの追加は共有 ENI モードと同じインスタンスタイプの制限を受けます。IPv4 アドレス (プライマリおよびセカンダリ) の数は、IPv6 アドレスの数と等しくなければなりません。ECS インスタンスがサポートする IPv4 および IPv6 アドレスの数については、「インスタンスファミリー」をご参照ください。
Lingjun インスタンスはデュアルスタックをサポートしていません。
排他的な ENI が割り当てられた Pod は、eBPF ネットワーク高速化または Kubernetes NetworkPolicy をサポートしていません。
排他的な ENI モードには新しいノードが必要です。既存のノードをノードプールに追加する場合、アタッチされている伸縮性のあるネットワークインターフェースは使用されません。
排他的な ENI モードは新しいノードにのみ適用されます。ノードプールがこのモードで設定された後、共有 ENI モードに変更することはできません。また、既存のノードを共有 ENI モードから排他的な ENI モードに切り替えることもできません。
「カスタム CNI チェーンを設定」することはできません。
ノードプールレベルでのコンテナネットワークの設定
排他的な ENI モードは、Terway が提供するノードプールモードです。共有 ENI モードと排他的な ENI モードの詳細な比較については、「共有 ENI モードと排他的な ENI モード」をご参照ください。以下の手順に従って、排他的な ENI モードでノードプールを計画し、作成します。ノードプールが作成された後、Pod をスケジュールできます。
1. 排他的な ENI ノードプールの計画
排他的な ENI モードでは、ノードあたりの最大 Pod 数が少なくなります。ワーカーノードがクラスターに追加されるには、6 つ以上の伸縮性のあるネットワークインターフェースが必要です。伸縮性のあるネットワークインターフェースの数の計算方法については、「インスタンスファミリー」をご参照ください。
Pod の vSwitch とセキュリティグループを計画します。
Terway は複数の設定方法をサポートしており、優先度の高い順にリストされています。
クラスターのデフォルト設定:「Terway 設定パラメーターのカスタマイズ」
重要設定に各ノードのゾーンの vSwitch が含まれていることを確認してください。含まれていない場合、Pod の作成は失敗します。
Lingjun ノードプールは、「Pod の固定 IP アドレス、独立した vSwitch、およびセキュリティグループの設定」をサポートしていません。
2. 排他的な ENI ノードプールの作成
「ノードプールの作成と管理」を参照して新しいノードプールを作成し、作成プロセス中にノードにラベル
k8s.aliyun.com/exclusive-mode-eni-type: eniOnlyを追加します。また、排他的な ENI を必要としない Pod がスケジュールされないように、ノードプールに Taint を追加する必要があります。
重要ノードプールの作成時にラベルを追加する必要があります。既存のノードを排他的な ENI モードに切り替えることはできません。ラベルを誤って設定した場合は、ノードプールを削除して再作成してください。
次のコマンドを実行して、ノード上の割り当て可能なリソースをクエリし、排他的な ENI モードが有効になっていることを確認します。
kubectl describe node <node-name>期待される出力:
Capacity: aliyun/eni: 7 cpu: 16 ephemeral-storage: 123460788Ki hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 31555380Ki pods: 213 Allocatable: aliyun/eni: 7 cpu: 15890m ephemeral-storage: 113781462033 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 28587828Ki pods: 213期待される出力には
aliyun/eniが表示され、排他的な ENI モードが正常に有効化されたことを示します。
3. ENI ノードプールへの Pod のスケジューリング
NodeAffinity または PodNetworking カスタムリソースを使用して、Pod を排他的な ENI ノードプールにスケジュールできます。
NodeAffinity:固定 IP アドレスの使用や、独立した vSwitch とセキュリティグループの使用など、Pod レベルの設定をサポートしていません。
PodNetworking:vSwitch、セキュリティグループ、および固定 Pod IP アドレスの Pod レベルの設定をサポートしています。詳細については、「Pod の固定 IP アドレス、独立した仮想スイッチ、およびセキュリティグループの設定」をご参照ください。
次の YAML の例を参照し、
eniOptionsフィールドのeniTypeをENIに設定して、Pod を専用の ENI ノードプールにスケジュールできます。apiVersion: network.alibabacloud.com/v1beta1 kind: PodNetworking metadata: name: enionly spec: eniOptions: eniType: ENI allocationType: type: Elastic selector: podSelector: matchLabels: network: enionly
よくある質問
Pod の排他的な ENI の検証
Terway は、Pod と同じ名前と名前空間を持つ PodENI リソースを自動的に作成します。このリソースは、Pod のネットワーク設定を記録します。
次のコマンドを実行してリソースをクエリします。
kubectl get podeni nginx-9d557694f-rcdzs -oyaml期待される出力:
apiVersion: network.alibabacloud.com/v1beta1
kind: PodENI
metadata:
annotations:
k8s.aliyun.com/pod-uid: 05590939-fc51-47ab-a204-3dd187233bca
creationTimestamp: "2024-09-13T08:09:27Z"
finalizers:
- pod-eni
generation: 1
labels:
k8s.aliyun.com/node: cn-hangzhou.172.XX.XX.25
name: example-9d557694f-rcdzs
namespace: default
resourceVersion: "1131123"
spec:
allocations:
- allocationType:
type: Elastic
eni:
attachmentOptions: {}
id: eni-xxxx
mac: 00:16:3e:37:xx:xx
securityGroupIDs:
- sg-xxxx
vSwitchID: vsw-xxxx
zone: cn-hangzhou-j
ipv4: 172.16.0.30
ipv4CIDR: 172.16.0.0/24
ipv6: 2408:4005:xxxx:xxxx:xxxx:xxxx:xxxx:9ad4
ipv6CIDR: 2408:4005:39c:xxxx::/64
zone: cn-hangzhou-j
status:
eniInfos:
eni-xxxx:
id: eni-xxxx
status: Bind
type: Secondary
instanceID: i-xxxx
phase: Bind