独占ENI模式是为Pod提供最佳网络性能的一种策略,特别适合于那些对网络性能有严格需求的场景。例如,在处理大数据分析、实时流处理或者运行对网络敏感的应用(如视频流、在线游戏或科学计算)时,该网络模式可以提供高网络吞吐量和极低的网络延迟。在高频交易类型场景,该网络模式可以提供组播能力。
使用限制
配置节点池级别的容器网络
请参见以下流程规划并创建独占ENI节点池,创建成功后,您可以指定Pod调度至目标节点池。
1. 规划独占ENI节点池
独占ENI模式下,单节点的最大Pod数量较少。Worker节点弹性网卡数量需要大于6才能加入集群,关于如何计算弹性网卡的数量,请参见实例规格族。
规划Pod使用的交换机、安全组。
Terway支持多种配置方式,优先级依次递减:
集群默认配置自定义Terway配置参数
重要请确保节点可用区对应的交换机已配置到上述配置中。否则Pod将无法创建成功。
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资源,用于记录所使用的网络配置信息。您可以通过以下方式查询。
k 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