本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
Terway网络模式下,ECS上的弹性网卡由Terway进行管理并分配IP给Pod。受限于ECS网卡能力,直接创建弹性网卡不能满足容器秒级启动的需求。Terway对弹性网卡资源管理进行了优化,以便满足快速弹性、IP资源回收等多种需求。通常您无需调整配置,但若需提升Pod网络分配速度,可参考本文的优化建议调整资源水位和API流控值。
CNI执行时间消耗
一个Pod的创建往往耗时较长,至少会经历kubelet、运行时(containerd)、CNI插件的创建过程。在这些组件完成各自任务后,kubelet才会将Pod的IP地址和Pod启动状态更新到kube-apiserver。如下图所示。
如需优化kubelet配置,请参见自定义节点池kubelet配置。
如需优化存储挂载速度,请参见使用云盘并行挂载。
Terway弹性网卡资源模型
为了帮助您更好地使用本功能,推荐您了解Terway管理的弹性网卡资源模型。下图展示了一个节点上的弹性网卡以及Terway网卡的管理情况。
弹性网卡(ENI):ECS提供的一种资源,一个弹性网卡具备多个IP地址。ECS上的弹性网卡有多种类型,包括主网卡(Primary)和辅助弹性网卡(Secondary),Terway不会管理节点的主网卡。Terway会依据Pod数量动态调整节点上ECS弹性网卡数量、弹性网卡的IP数量。
IP资源池:IP资源池是Terway内的IP管理模型,当弹性网卡从ECS分配后,就会将网卡上的IP存入IP资源池内。
Pod创建时,优先从地址池分配IP,无需与OpenAPI交互,提高容器创建效率。
Pod删除时,优先将IP放回地址池,快速供下次分配。当空闲IP超过配置阈值时,才会调用OpenAPI归还IP地址。
Terway 网络插件性能指标
Terway 网络插件主要的性能指标为创建、删除Pod的耗时。Terway 网络插件依赖外部影响比较大,依据业务需要正确配置各组件,可以取得最佳分配性能。
测试场景: 测试单节点上,100Pod创建、删除完成所需要的总耗时。
下方展示了在同样规格的节点上分别使用Terway与Flannel进行Pod创建与删除测试的结果。
测试环境
配置项 | 参数 |
节点ECS规格 | ecs.ebmg8i.48xlarge |
kubelet限流 |
|
Terway配置 |
|
Terway版本 | v1.13.3 |
Flannel版本 | v0.15.1.23-33d25c1-aliyun |
测试结果
网络插件 | 创建Pod | 删除Pod |
HostNetwork | 3s | 5s |
Flannel | 3s | 6s |
Terway + DataPathV2 | 13s | 13s |
Terway | 4s | 5s |
上述测试结果仅供您优化参考,不作为任何承诺。
默认配置
默认配置下不开启IP预热,开启缓存5个空闲IP。这种配置适配大部分场景,既兼顾IP密度,又满足弹性时快速分配的需求。
优化建议
Terway配置中提供了资源水位调整、API流控能力,您可以根据自身业务需要进行调整。具体操作和更多参数定义,请参见自定义Terway配置参数eni_conf。
参数 | 类型 | 说明 | 是否允许修改 | 是否支持通过控制台进行配置 |
| int | IP资源池,最大保留空闲IP数量。默认为 | 是 | 是 |
| int | IP资源池,最少保留空闲IP数量。默认为 | 是 | 是 |
| float32 | Kubernetes Client QPS配置。需要与 | 是 | 是 |
| int | Kubernetes Client Burst配置。需要与 | 是 | 是 |
减少max_pool_size
,增加min_pool_size
会使得Terway更加积极地调整资源水位,直到资源水位满足您的配置。此配置可导致OpenAPI调用次数增加并可能触发流控,请根据您账号的限流配额谨慎调整。
关于OpenAPI配额信息,请参考流量控制与配额管理。关于Terway使用的OpenAPI接口信息,请参考容器服务ACK服务角色AliyunCSManagedNetworkRole。
减少IP浪费
若您的集群网段规格较小,当集群规模超过2000节点时,默认配置下空闲IP至多可以达到10000个。这种情况下,您可以减小max_pool_size
,或者配置空闲 IP 回收策略来减少空闲IP数量。
空闲 IP 回收策略
假设节点配置如下:
min_pool_size = 2
max_pool_size = 10
在未配置空闲 IP 回收策略的情况下:
系统不会主动回收节点上未使用的 IP 地址。
每个节点最多可能保留 10 个空闲 IP。
在配置了空闲 IP 回收策略 的情况下:
当回收策略触发并执行完成后,系统将清理多余空闲 IP。
每个节点的空闲 IP 数量将被回收至 至少
min_pool_size
个,即最终保留 2 个空闲 IP。此机制有助于提高 IP 地址利用率,避免资源浪费。
提升网络分配速度
增加
max_pool_size
大小:将更多空闲IP保留在节点,以便提升Pod IP再次分配的速度。此操作不会主动缓存IP到节点。增加
min_pool_size
大小:主动预热IP到节点缓存。调整kubelet限流值
kubeAPIQPS
、kubeAPIBurst
,请参考自定义节点池kubelet配置。若您的Pod对弹性时间有较高要求,可将其发布为
HostNetwork
类型,此操作将绕过CNI网络分配。
优化周期性任务启动速度
若集群内可用IP资源充足,增加
max_pool_size
大小,将更多空闲IP保留在节点。当集群可用 IP 紧张时,提升周期性任务的启动速度需要在“尽量少占用空闲 IP”和“在任务窗口前精准预热”之间取得平衡。本文提供一套可操作的策略组合:节点预热 → 任务窗口内复用缓存 IP → 任务结束后快速回收。
策略总览
核心目标:在有限的网段里,最大化 IP 利用率,同时保证周期性任务在窗口期快速就绪。
原则:
不常态化提高
min_pool_size
:常态化提高min_pool_size
会强制每节点长留空闲 IP,导致全局可分配IP资源更紧张。控制性提高部分节点的
max_pool_size
:只在任务涉及的节点增大,用于缓存与快速复用。事件驱动预热:用临时 Pod 触发 IP 分配并让 IP 留在节点缓存,而非全局拉高
min_pool_size
。启用空闲 IP 回收:在任务完成后尽快释放缓存 IP,避免长期占用。
参数与配置建议
水位参数
max_pool_size
: 建议对参与周期任务的节点短时提升,可以按新建 Pod 数量/节点数量估算每个节点需要的 IP数量。min_pool_size
: 保持为0
,预热采用“临时 Pod”触发。
空闲 IP 回收策略
idle_ip_reclaim_after
: 贴合任务时长与冷却时间设置,例如周期任务运行 10-20 分钟,配置"20m"~"45m"
。idle_ip_reclaim_interval
: 下一批次回收间隔"5m"~"10m"
。idle_ip_reclaim_batch_size
: 每批最大回收的IP数量,建议5
。idle_ip_reclaim_jitter_factor
:"0.1"~"0.3"
,避免集中回收引发瞬时波动,越大越离散。
解决Datapath V2模式下限流问题
在Datapath V2或者IPvlan模式下,当一个节点上并行创建很多Pod时,会触发Agent侧的创建限流,默认的创建限流为0.5/s
。触发限流在Event中的示例内容如下。
unable to create endpoint: [PUT /endpoint/{id}][429]
您可以通过调整节点侧流控值解决。
已通过kubectl连接集群,请参见通过kubectl连接Kubernetes集群。
使用kubectl对Terway进行配置为高危操作,kubectl无法对输入内容进行校验,输入不正确的参数可能会导致Terway运行中止等错误。请您确保对配置有充分的理解再进行修改。
加大流控值将增加Terway组件的CPU、Memory 开销,也会影响kube-apiserver的负载。
执行如下命令配置高级参数。
kubectl edit cm -n kube-system eni-config
在
10-terway.conf
中,添加cilium_args
配置。以下示例配置为每秒2个创建请求,最大突发5个创建请求。10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "capabilities": {"bandwidth": true}, "eniip_virtual_type": "IPvlan", "cilium_args": "--api-rate-limit=endpoint-create=rate-limit:2/s,rate-burst:5", "type": "terway" }
完成配置后,保存并退出。然后,执行如下命令更新配置。
kubectl rollout restart -n kube-system daemonset.apps/terway-eniip