排他的な Elastic Network Interface (ENI) モードは、Pod に最適なネットワークパフォーマンスを提供するポリシーです。このモードは、厳しいネットワークパフォーマンス要件を持つシナリオに最適です。たとえば、このモードは、ビッグデータ分析、リアルタイムストリーム処理、およびビデオストリーミング、オンラインゲーム、科学計算などのネットワークに敏感なアプリケーションに、高いネットワークスループットと非常に低いネットワーク遅延を提供します。高周波取引シナリオでは、このモードはマルチキャスト機能を提供します。
制限
ECS インスタンスを追加するには、Terway v1.11.0 以降が必要です。Lingjun ノードインスタンスを追加するには、Terway v1.14.3 以降が必要です。コンポーネントをアップグレードするには、「Terway」をご参照ください。
クラスターでデュアルスタックを有効にした後、ノードを追加する際には、共有 ENI モードの ECS インスタンスタイプの制限が適用されます。IPv4 と IPv6 アドレスの数は 1:1 の比率である必要があります。ECS インスタンスがサポートする IPv4 および IPv6 アドレスの数の詳細については、「インスタンスファミリー」をご参照ください。
Lingjun ノードインスタンスは IPv6 デュアルスタックをサポートしていません。
排他的な ENI を使用する Pod は、eBPF ネットワークアクセラレーションまたは NetworkPolicy をサポートしません。
排他的な ENI を使用する場合、新しいノードを使用する必要があります。既存のノードを使用する場合、それらのノードに既にある ENI は使用されません。
排他的な ENI モードは新しいノードでのみ有効になります。ノードプールが設定された後、共有 ENI モードに切り替えることはできません。また、既存のノードを共有 ENI モードから排他的な ENI モードに切り替えることもできません。
ノードプールのコンテナーネットワークを設定する
排他的な ENI は、Terway によって提供されるノードプールモードです。排他的な ENI モードと共有 ENI モードの詳細な比較については、「共有 ENI モードと排他的な ENI モード」をご参照ください。このプロシージャに従って、排他的な ENI を使用するノードプールを計画および作成します。ノードプールが作成された後、Pod をそれにスケジュールできます。
1. 排他的な ENI ノードプールを計画する
排他的な ENI モードでは、ノードあたりの Pod の最大数が少なくなります。ワーカーノードがクラスターに追加されるには、6 つ以上の ENI が必要です。ENI の数の計算方法の詳細については、「インスタンスファミリー」をご参照ください。
Pod の vSwitch とセキュリティグループを計画します。
Terway は、優先度の高い順にリストされた複数の設定メソッドをサポートしています:
デフォルトのクラスター構成。詳細については、「Terway パラメーターのカスタマイズ」をご参照ください。
重要構成にノードのゾーンの vSwitch が含まれていることを確認してください。そうでない場合、Pod は作成できません。
Lingjun ノードプールは、Pod に静的 IP アドレス、独立した vSwitch、およびセキュリティグループを設定することをサポートしていません。
2. 排他的な ENI ノードプールを作成し、モードが有効になっていることを確認する
ノードプールを作成します。詳細については、「ノードプールの作成と管理」をご参照ください。作成プロセス中に、ラベル
k8s.aliyun.com/exclusive-mode-eni-type: eniOnlyをノードに追加します。また、他の Pod が排他的な ENI ノードプールにスケジュールされるのを防ぐために 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: 213aliyun/eniが出力に含まれている場合、排他的な ENI モードは有効になっています。
3. Pod を排他的な ENI ノードプールにスケジュールする
NodeAffinity または PodNetworking カスタムリソース定義 (CRD) を使用して、Pod を排他的な ENI ノードプールにスケジュールできます。
NodeAffinity: このメソッドは、静的 IP アドレスの割り当てや、独立した vSwitch およびセキュリティグループの設定など、Pod レベルの構成をサポートしていません。
PodNetworking: このメソッドは、Pod の vSwitch、セキュリティグループ、および静的 IP アドレスの設定をサポートしています。詳細については、「Pod に静的 IP アドレス、独立した vSwitch、およびセキュリティグループを設定する」をご参照ください。
次の 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