You need to enable JavaScript to run this app.
导航

在 Flannel 网络集群中推送镜像

最近更新时间2024.03.06 10:23:29

首次发布时间2024.03.06 10:23:29

本文介绍如何修复 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 部署到目标集群上,修改集群中所有节点的内核参数。

  1. 登录 容器服务控制台

  2. 在目标集群中,选择 工作负载 > 守护进程

  3. 通过 YAML 创建守护进程。示例代码如下。

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: sysctl-conf
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          name: sysctl-conf
      template:
        metadata:
          labels:
            name: sysctl-conf
        spec:
          hostPID: true
          hostIPC: true
          hostNetwork: true
          containers:
          - name: sysctl
            image: busybox
            securityContext:
              privileged: true
            command: ["/bin/sh"]
            args: ["-c", "sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1 && sleep 86400"]
    
  4. 检查 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 修改目标内核参数。

通过控制台管理节点池执行脚本,调整新增节点的目标内核参数。

  1. 登录 容器服务控制台

  2. 在目标集群中,选择 节点管理 > 节点池

  3. 单击目标节点池 操作 列下的 编辑

    alt

  4. 在高级配置中设置部署执行脚本,示例如下。

    alt

    sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1
    
  5. 单击 确认 完成配置。

方案三:通过自定义镜像在节点部署操作系统

说明

邀测·申请试用】容器服务支持自定义镜像作为节点操作系统。功能使用说明,请参见 自定义镜像说明

通过容器服务的自定义镜像,在节点或者节点池部署 /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal 参数值为 1 的自定义操作系统。