- 文档首页
镜像仓库
镜像仓库 CR
最佳实践
镜像推拉
在 Flannel 网络集群中推送镜像
在 Flannel 网络集群中推送镜像
本文介绍如何修复 Flannel 网络模型的集群中大并发流量场景下,镜像推送失败的问题。
背景信息
问题场景
在 Flannel 网络的集群中,大并发流量下可能出现镜像推送失败的问题。过大的并发流量可能导致 TCP ack 包超过窗口上限,使 ECS 协议栈返回 reset 包,导致推送流中断,进而镜像推送失败。例如,在 Flannel 网络的集群中,使用 Kaniko 作为流水线推送镜像失败。
解决方案
通过调整物理节点内核参数的方法可以解决这个问题。在客户端 ECS 中,将 /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal 参数设置为 1,允许大并发流量下 TCP ack 包超过窗口上限,避免 ECS 协议栈返回 reset 包所导致的推送流中断。调整 /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal 参数不会对业务产生影响。
- 方案一:创建守护进程修改节点参数。一次性修改集群中所有节点的内核参数,适合频繁扩缩容的大规模集群。后续节点池扩缩容后,无需手动运维。
- 方案二:通过节点池配置修改节点参数。仅对新增节点实例生效。存量节点实例需要登录到节点通过命令 sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1 修改目标内核参数。
- 方案三:【邀测·申请试用】通过自定义镜像在节点部署操作系统。在节点池中部署自定义镜像对后续 新增节点 的参数变更都生效;存量节点参数变更需要在指定节点中操作。
说明
VPC-CNI 网络模型自身可以有效避免大并发导致的镜像推送失败问题。选用 VPC-CNI 网络模型需要 重新创建 容器集群,在 容器网络模型 选择 VPC-CNI。创建集群操作参见 创建集群。 操作步骤
方案一:创建守护进程修改节点参数
说明
该方案一次性修改集群中所有节点的内核参数,适合频繁扩缩容的大规模集群。后续节点池扩缩容后,无需手动运维。
通过 Daemonset 守护进程,创建具有特权的 Pod 部署到目标集群上,修改集群中所有节点的内核参数。
args: ["-c", "sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1 && sleep 86400"]
- 检查 ECS 中 /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal 是否成功切换为 1。
cat /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal
方案二:通过节点池配置修改节点参数
说明
- 存量节点实例需要登录到节点通过命令 sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1 修改目标内核参数。
通过控制台管理节点池执行脚本,调整新增节点的目标内核参数。
-
sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1
方案三:通过自定义镜像在节点部署操作系统
通过容器服务的自定义镜像,在节点或者节点池部署 /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal 参数值为 1 的自定义操作系统。
最近更新时间:2026.03.17 15:03:36