獨佔ENI模式是為Pod提供最佳網路效能的一種策略,特別適合於那些對網路效能有嚴格需求的情境。例如,在處理巨量資料分析、即時資料流處理或者運行對網路敏感的應用(如視頻流、線上遊戲或科學計算)時,該網路模式可以提供高網路輸送量和極低的網路延遲。在高頻交易類型情境,該網路模式可以提供組播能力。
使用限制
添加ECS執行個體Terway版本需為v1.11.0及以上。添加靈駿執行個體Terway版本需為v1.14.3及以上。如需升級組件版本,請參見Terway。
叢集開啟雙棧後,添加節點時會受到共用ENI模式的ECS機型限制。主私網地址+輔助私人IPv4地址和IPv6地址數量需要為1:1。關於ECS執行個體支援的IPv4和IPv6數量,請參見執行個體規格類型系列。
靈駿執行個體不支援IPv6雙棧。
獨佔ENI的Pod不支援eBPF網路加速及NetworkPolicy。
使用獨佔 ENI 時,需使用建立節點。若您使用了存量的節點,節點上已有的彈性網卡不會被使用。
獨佔ENI僅對建立節點生效,配置後不可以調整為共用ENI,也不支援將已有共用ENI節點修改為獨佔ENI模式。
配置節點池層級的容器網路
獨佔ENI是Terway提供的一種節點池模式,獨佔ENI與共用ENI的詳細對比請參見共用ENI模式與獨佔ENI模式。請參見以下流程規劃並建立獨佔ENI節點池,建立成功後,您可以指定Pod調度至目標節點池。
1. 規劃獨佔ENI節點池
獨佔ENI模式下,單節點的最大Pod數量較少。Worker節點彈性網卡數量需要大於6才能加入叢集,關於如何計算彈性網卡的數量,請參見執行個體規格類型系列。
規劃Pod使用的交換器、安全性群組。
Terway支援多種配置方式,優先順序依次遞減:
叢集預設配置自訂Terway配置參數
重要請確保節點可用性區域對應的交換器已配置到上述配置中。否則Pod將無法建立成功。
靈駿節點池不支援為Pod配置固定IP及獨立虛擬交換器、安全性群組。
2. 建立獨佔ENI節點池並驗證獨佔ENI模式啟用成功
參見建立和管理節點池建立一個節點池,並在建立過程中為節點添加標籤
k8s.aliyun.com/exclusive-mode-eni-type: eniOnly。推薦您同時配置汙點,避免其他Pod調度到獨佔ENI的節點池中。
重要請在建立節點池時配置標籤。已建立的節點無法切換至獨佔ENI模式。若您配置錯誤,請刪除節點池重建。
執行以下命令,查詢節點的可分配(allocatable)資源,檢查節點是否已成功開啟獨佔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. 指定Pod調度到獨佔ENI節點池
您可以通過NodeAffinity或網路自訂資源PodNetworking配置指定Pod調度到獨佔ENI節點池。
NodeAffinity:不支援Pod維度配置(使用固定IP、配置獨立虛擬交換器以及安全性群組)。
PodNetworking:支援在Pod維度配置虛擬交換器、安全性群組,以及使用Pod固定IP。具體操作,請參見為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資源,用於記錄所使用的網路設定資訊。
您可以通過以下方式查詢:
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