优化Terway网络插件下Pod网络分配速度

更新时间:2025-01-15 08:12:39
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

Terway网络模式下,ECS上的弹性网卡由Terway进行管理,并将IP分配给不同的Pod。受限于ECS网卡能力,直接创建弹性网卡不能满足容器秒级启动的需求。Terway对弹性网卡资源管理进行了优化,以便满足快速弹性、IP资源回收等多种需求。通常您无需对配置进行调整。若您对Pod网络分配速度有更多要求,您可以参考本文进行相应资源水位调整。

CNI 执行时间消耗

一个Pod 的创建往往耗时较长,至少会经历kubelet、运行时(containerd)、CNI插件的创建过程。在这些组件完成各自任务后,kubelet才会将PodIP地址和Pod启动状态更新到kube-apiserver。如下图所示。

image

如需优化kubelet配置,请参见自定义节点池kubelet配置;如需优化存储挂载速度,请参见使用云盘并行挂载。本文介绍Terway CNI插件配置,以提升Pod网络分配速度。

Terway弹性网卡资源模型

为了帮助您更好地使用本功能,推荐您了解Terway管理的弹性网卡资源模型。下图展示了一个节点上的弹性网卡以及Terway网卡的管理情况。

image
  • 弹性网卡(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配置参数

参数

类型

说明

参数

类型

说明

max_pool_size

int

IP资源池,最大保留空闲IP数量。默认为5

min_pool_size

int

IP资源池,最少保留空闲IP数量。默认为0min_pool_size不可以大于max_pool_size

kube_client_qps

float32

Kubernetes Client QPS配置。需要与kube_client_burst同时配置。

kube_client_burst

int

Kubernetes Client Burst配置。需要与kube_client_qps同时配置,且需要大于kube_client_qps

重要

减少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限流值kubeAPIQPSkubeAPIBurst,请参考自定义节点池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集群
警告
  • 使用kubectlTerway进行配置为高危操作,kubectl无法对输入内容进行校验,输入不正确的参数可能会导致Terway运行中止等错误。请您确保对配置有充分的理解再进行修改。

  • 加大流控值将增加Terway组件的CPU、Memory 开销,也会影响kube-apiserver的负载。

  1. 执行如下命令配置高级参数。

    kubectl edit cm -n kube-system  eni-config 
  2. 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"
        }
  3. 完成配置后,保存并退出。然后,执行如下命令更新配置。

     kubectl rollout restart -n kube-system daemonset.apps/terway-eniip

  • 本页导读 (1)
  • 默认配置
  • 优化建议
  • 减少IP浪费
  • 提升网络分配速度
  • 解决Datapath V2模式下限流问题
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等