驱动数字化 质变

从权威的技术洞察,到精准的软硬配置,为企业的每一次转型提供决策支持。

架构师笔记
还在用 SSH 批量跑脚本?基于 K3s + Rancher Fleet 构建边缘网关“GitOps”零干预分发 (附 YAML 模板)

2026-03-17 11:33:00

#GitOps #K3s #RancherFleet #边缘计算 #大规模运维 #IaC #DevO


一、 场景痛点:更新 1000 台网关的“至暗时刻”

你的集成公司业务做得很成功,在全国 50 个工厂部署了 1000 台 AI 边缘网关(运行着采集脚本和 YOLO 质检模型)。


噩梦才刚刚开始

  • 需求:今天算法团队把 YOLO 模型优化了一下,或者修改了 Node-RED 里的一个点表参数,需要更新到这 1000 台设备上。

  • 现状:运维工程师写了一个 Ansible 脚本(或者自己写的 Python 批量 SSH 脚本),准备向这 1000 个 IP “推(Push)”送更新。

  • 灾难现场

  1. NAT 穿透失败:这 1000 台设备分布在各种复杂的内网、4G 路由器和多层防火墙后面,中心端根本主动连不上它们(无法建立 SSH 连接)。

  2. 弱网超时:脚本跑到第 400 台时,有一台设备 4G 信号不好卡住了,整个批量脚本直接挂起报错。

  3. 配置漂移 (Configuration Drift):现场的电工有时会偷偷登录网关改配置。中心端以为网关跑的是 V2 版本,实际现场已经变成了面目全非的“魔改版”。

架构师指令:在广域网边缘计算场景,严禁使用“中心向边缘主动 Push”的部署模式


必须切换为 “拉取式 (Pull-based) GitOps”。网关只认 Git 仓库,Git 仓库就是唯一的真理之源 (Single Source of Truth)。


二、 架构设计:为什么选 Rancher Fleet?

在 K8s 生态中,ArgoCD 是 GitOps 的绝对王者,但它适合**“一个集群里有 1000 个应用”的云端场景。在边缘端,我们的场景是“1000 个分散的微集群(每台网关就是一个单节点 K3s),跑同一个应用”**。此时,专门为百万级边缘集群设计的 Rancher Fleet 是最佳选择。

  • 工作原理

  1. 我们把应用的 YAML 配置(包含 Docker 镜像地址、版本号)全部提交到 GitHub/GitLab 仓库。

  2. 网关(运行 K3s + Fleet Agent)会主动定时向 Git 仓库(或本地的 Fleet Controller)发送 HTTPS GET 请求。

  3. 网关发现 Git 里的版本变了,主动把配置拉下来,并在本地执行应用重启

优势:网关主动往外拉,完美穿透一切内网 NAT 防火墙。就算今天断网了,明天网关一上线,依然会自动同步到最新版本。

拓扑图


架构师 --(git push)--> [GitLab 仓库] <--HTTPS Pull--[Fleet Agent @网关 1...1000 (K3s)] -> 拉取新 Docker 镜像


三、 核心实施步骤 (Copy & Paste)

假设你已经有一台中心服务器运行了 Rancher/Fleet Controller,且边缘网关已安装好 K3s 并注册到 Controller。

1. 基础设施即代码 (IaC) 目录结构

在你的 Git 仓库中,创建如下结构,把配置当代码一样管理。


Text
my-edge-apps/
├── fleet.yaml        # Fleet 核心路由配置
└── node-red-app/
    ├── deployment.yaml # 业务容器定义
    └── service.yaml

2. 定义容器配置 (deployment.yaml)

这是标准的 K8s 定义文件。你想跑什么,就在这里写。


Yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: edge-node-red
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: node-red
  template:
    metadata:
      labels:
        app: node-red
    spec:
      containers:
      - name: node-red
        # 当你需要升级时,只需在 Git 里把 v2.0 改为 v2.1
        image: my-registry.com/edge-node-red:v2.1 
        ports:
        - containerPort: 1880


3. 编写 Fleet 路由规则 (fleet.yaml)

这是最爽的一步。你可以根据网关的标签 (Labels),决定哪个网关拉取哪个配置。比如“华东区的机器更新 A 版本,华北区的机器更新 B 版本”。


Yaml
defaultNamespace: default
labels:
  app: edge-data-collector

# 目标网关匹配规则
targetCustomizations:
- name: east-china-nodes
  clusterSelector:
    matchLabels:
      region: "east-china" # 只要网关带这个标签,就会自动拉取这个配置
  yaml:
    # 可以在这里覆盖特定区域的配置,比如修改环境变量
    overlays:
    - apiVersion: apps/v1
      kind: Deployment
      name: edge-node-red
      spec:
        template:
          spec:
            containers:
            - name: node-red
              env:
              - name: MQTT_BROKER
                value: "tcp://east-mqtt.cloud.com"


操作流程


在开发机敲下 git commit -m "Update to v2.1" 和 git push。


喝杯咖啡,全国 1000 台打了 region: east-china 标签的网关,会在 1 分钟内自动把 MQTT_BROKER 修改掉并重启容器。无需一次 SSH 登录。


四、 踩坑复盘 (Red Flags)

1. 镜像拉取风暴 (Image Pull Storm)

  • 灾难:你把一个 2GB 的 AI 模型镜像推到了云端 Registry,并 git push 了更新。1000 台网关同时向云端拉取镜像。公司的公网带宽瞬间被打满,云服务器直接宕机。

  • 对策

    • 金丝雀发布 (Canary Release):在 fleet.yaml 中利用 Rollout 策略,先给 5% 的标签节点更新,没问题再扩大。

    • P2P 镜像分发:在边缘端集成 Dragonfly (蜻蜓)Kraken。网关从临近的网关采用 P2P 下载镜像,把中心带宽压力降到几乎为 0。

2. 密码泄露在 Git 里

  • :把数据库密码明文写在 YAML 文件里传到 Git,离职员工把代码拷走,引发重大安全事故。

  • 对策绝对严禁将 Secret 明文存入 Git。请使用 SOPSSealed Secrets。开发用公钥将密码加密后存入 Git(密文),只有网关上的 K3s 拥有私钥,可以在本地解密还原出密码。

3. 存储容量耗尽

  • 现象:频繁发布更新后,网关的 32GB eMMC 满了,导致 K3s 驱逐所有的 Pod。

  • 原因:旧的 Docker 镜像没有被清理。

  • 对策:必须在 K3s 启动参数(/etc/rancher/k3s/config.yaml)中严格配置镜像垃圾回收(Image GC)阈值:

kubelet-arg:
  - "image-gc-high-threshold=80"
  - "image-gc-low-threshold=60"

五、 关联资源与选型

跑 K3s 和 Fleet Agent,网关不能用几十块钱的单片机,需要标准的 Linux 环境。

  • 硬件推荐

    • x86 边缘网关 (Intel J6412 / N100):如果你有很多基于 Python 的复杂容器,或者需要兼顾 HMI 屏幕输出,x86 是跑 K3s 最省心的选择。

    • 点击配置完美兼容 K3s/K8s 的 x86 工业网关

    • ARM 高性能边缘盒子 (NXP i.MX8M Plus):具备极佳的功耗比,自带 NPU,适合将 AI 模型通过 GitOps 分发到成千上万个视觉检测节点。

    • 查看支持云原生容器编排的 ARM 边缘主板


代码下载与工具

还没有搭建好中心控制端?


我们准备了一个 "Edge GitOps 快速体验环境"


包含:Rancher Server 的一键 Docker-Compose 脚本、Fleet 的标准 YAML 模板、以及 Sealed Secrets 加密工具包。

架构师福利:下载 K3s+Fleet 边缘大集群分发套件