本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
Terway网络模式下,ECS上的弹性网卡由Terway进行管理,并将IP分配给不同的Pod。受限于ECS网卡能力,直接创建弹性网卡不能满足容器秒级启动的需求。Terway对弹性网卡资源管理进行了优化,以便满足快速弹性、IP资源回收等多种需求。通常您无需对配置进行调整。若您对Pod网络分配速度有更多要求,您可以参考本文进行相应资源水位调整。
CNI 执行时间消耗
一个Pod 的创建往往耗时较长,至少会经历kubelet、运行时(containerd)、CNI插件的创建过程。在这些组件完成各自任务后,kubelet才会将Pod的IP地址和Pod启动状态更新到kube-apiserver。如下图所示。
如需优化kubelet配置,请参见自定义节点池kubelet配置;如需优化存储挂载速度,请参见使用云盘并行挂载。本文介绍Terway CNI插件配置,以提升Pod网络分配速度。
Terway弹性网卡资源模型
为了帮助您更好地使用本功能,推荐您了解Terway管理的弹性网卡资源模型。下图展示了一个节点上的弹性网卡以及Terway网卡的管理情况。
弹性网卡(ENI):ECS提供的一种资源,一个弹性网卡具备多个IP地址。Terway网络模式下,ECS上的弹性网卡由Terway进行管理,并将IP分配给不同的Pod。ECS上的弹性网卡有多种类型,包括主网卡(Primary)和辅助弹性网卡(Secondary)。Terway不会管理节点的主网卡。Terway会依据Pod数量动态调整节点上ECS弹性网卡数量、弹性网卡的IP数量,请参考下面的IP资源池部分。
IP资源池:IP资源池是Terway内的IP管理模型,当弹性网卡从ECS分配后,就会将网卡上的IP存入IP资源池内。
Pod创建时,会优先从地址池分配IP。此过程无需与OpenAPI交互,大大提高了容器创建的效率。
Pod删除时,会优先将IP放回地址池,以便下一次分配时快速使用。当空闲IP超过配置阈值时,才会调用OpenAPI归还IP地址。
默认配置
默认配置下不开启IP预热,开启缓存5个空闲IP。这种配置适配大部分场景,既兼顾IP密度,又满足弹性时快速分配的需求。
优化建议
Terway配置中提供了资源水位调、API流控整能力,您可以根据自身业务需要,结合本文建议进行调整。具体操作,请参见自定义Terway配置参数。
参数 | 类型 | 说明 |
参数 | 类型 | 说明 |
| 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数量。
提升网络分配速度
对已有的节点,您可以增加
max_pool_size
大小,将更多空闲IP保留在节点,以便提升Pod IP再次分配的速度。此操作不会主动缓存IP到节点。对已有的节点,您还可以增加
min_pool_size
大小,主动预热IP到节点缓存。调整kubelet限流值
kubeAPIQPS
、kubeAPIBurst
,请参考自定义节点池kubelet配置。若您的Pod对弹性时间非常苛刻,您可以将Pod发布为
HostNetwork
类型,此操作将绕过CNI网络分配。
解决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
- 本页导读 (1)
- 默认配置
- 优化建议
- 减少IP浪费
- 提升网络分配速度
- 解决Datapath V2模式下限流问题