4 台华为云 ECS 从零到一:我用 AI Agent 搭了一套 K3s 多节点集群,全自动、免运维、翻车实录

摘要:一个人加一个 AI Agent,一个下午把 4 台裸机华为云 ECS 变成生产级 K3s 双节点集群。90 秒装好 K3s、镜像被墙连环坑、SWR 加速正解,5 个真实翻车现场全记录,全部脚本可复现。
引言:当"一个人 + 一个 AI Agent"要在 4 台裸机 ECS 上,从零搭建生产级 K8s 集群 + 全链路监控 + AI 值班 SRE,需要多久?我的答案是:一个下午。本文记录了全程实操,包括每一次翻车与修复------这些才是最值钱的部分。

环境规格:华为云 ECS x4(8vCPU / 16GiB / Ubuntu 24.04.4 LTS / 内网互通 / 5Mbps 公网),全程由 AI Agent 通过 SSH 编排执行。

为什么选 K3s 而不是原生 K8s

拿到 4 台 8C16G 的 ECS,我的第一反应是 kubeadm 起一套标准集群。但冷静下来算一笔账:

维度 原生 K8s (kubeadm) K3s
组件 etcd + apiserver + controller-manager + scheduler + kubelet... 全家桶 单二进制,全部内置(含 etcd 默认 SQLite)
控制面资源 2C4G 起步 512MB 内存即可
安装时间 30-60 分钟(含 CNI 选型) 1 条命令 90 秒
生产可用 是 是(CNCF 认证,Arc//gitlab 基于它)

4 台机器要跑集群 + 监控 + AI 网关 + SRE Agent,控制面必须轻。K3s 是唯一解。

拓扑规划

lua 复制代码
+-----------------------------------------------------------+
|            华为云 VPC (192.168.0.0/24) 内网互通            |
|                                                           |
|  +---------------+       +---------------+                |
|  | ecs-0001      |       | ecs-0002      |                |
|  | .249 master   |<----->| .34  worker   |  K3s 集群      |
|  | K3s server    |       | K3s agent     |                |
|  | + 监控栈      |       | + k6 压测     |                |
|  +-------+-------+       +---------------+                |
|          | NodePort: 30380(demo) / 30300(Grafana)         |
|  +-------+-------------------------------------------+   |
|  | +---------------+     +---------------+             |   |
|  | | ecs-0003      |     | ecs-0004      |             |   |
|  | | .112          |     | .219          |             |   |
|  | | LiteLLM 网关  |     | AI SRE Agent  |             |   |
|  | +---------------+     +---------------+             |   |
|  +-------------------------------------------------+   |
+-----------------------------------------------------------+

第一步:SSH 引导 ------ 别小看这步

AI Agent 要操作 4 台机器,第一件事不是装东西,而是建立免密通道 + 体检:

python 复制代码
# 01_bootstrap.py 核心逻辑
cli.connect(host, username="root", password=pwd, look_for_keys=False)
run(cli, f"echo '{PUBKEY}' >> /root/.ssh/authorized_keys")

体检结果(2026-11-12 14:31 CST):

yaml 复制代码
4/4 台 Ubuntu 24.04.4 LTS, kernel 6.8.0-136-generic
CPU: 8C, Mem: 14Gi 可用, Disk: 40G
内网互通: 12/12 ping ok
Docker: 未安装(裸机)→ 需要全部安装

踩坑 1 :lscpu 显示 "General Purpose Processor"------华为云鲲鹏?不,x3e.8u.16g 是 x86 型号,正常。

第二步:K3s 安装 ------ 90 秒与两个坑

master 节点一条命令:

bash 复制代码
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='server --node-name k3s-master --write-kubeconfig /root/.kube/config --disable traefik --disable servicelb' sh -

踩坑 2(重要):默认 traefik + servicelb 会占用 80/443 端口且与 NodePort 方案冲突,我直接禁用,后面用 NodePort 暴露 Grafana(30300)。

90 秒后:

复制代码
NAME          STATUS   ROLES           AGE   VERSION
k3s-master    Ready    control-plane   5m    v1.37.2+k3s1

worker 加入:

bash 复制代码
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='agent --node-name k3s-worker1' \
  K3S_URL='https://192.168.0.249:6443' K3S_TOKEN='<node-token>' sh -

踩坑 3:agent 启动后 worker 一直 NotReady?不,实际一次成功:

css 复制代码
k3s-master    Ready    control-plane   v1.37.2+k3s1   192.168.0.249
k3s-worker1   Ready    <none>          v1.37.2+k3s3   192.168.0.34

这里有个值得说的细节:K3s 的节点加入是内网完成的。公网 5Mbps 完全不用参与节点通信,跨节点 Pod 通信走 VPC 内网,延迟 <1ms。这就是云上组网的红利。

第三步:第一个应用 + HPA

部署 demo-shop(nginx + Service + HPA):

yaml 复制代码
# 关键片段
resources:
  requests: {cpu: 100m, memory: 128Mi}
  limits: {cpu: 500m, memory: 256Mi}
# HPA: min 2 / max 6, CPU 60%
bash 复制代码
kubectl get hpa demo-shop
# TARGETS 从 <unknown>(metrics-server 未就绪)→ 3%/60%

踩坑 4 :HPA 刚建时 TARGETS 显示 <unknown>,这是因为 metrics-server 需要 1-2 分钟预热,以及 Pod 必须带 resources.requests 才能被计算。新手常被这个吓到。

第四步:监控栈 ------ helm 一把梭的代价与正确姿势

bash 复制代码
helm upgrade --install mon prometheus-community/kube-prometheus-stack \
  -f prom-values.yaml -n monitoring --create-namespace

资源调优要点(16G 单节点跑全套监控,必须压):

  • Prometheus retention 3 天 / 4GB
  • Grafana 256Mi request / NodePort 30300
  • Alertmanager webhook 指向 AI SRE:http://192.168.0.219:9091/webhook

部署后 Pod 矩阵:

sql 复制代码
alertmanager-mon-alertmanager-0           1/1   Running
mon-grafana-xxx                           1/1   Running
mon-kube-state-metrics-xxx                1/1   Running
mon-prometheus-node-exporter-xxx          1/1   Running
mon-prometheus-server-xxx                 1/1   1/1   Running

踩坑 5 :kube-prometheus-stack 会拉取大量镜像,5Mbps 公网带宽下载几百 MB 镜像耗时 10+ 分钟。在华为云上,走内网镜像源/swr.cn-north-4.myhuaweicloud.com 能快 10 倍。这是华为云环境最实用的优化之一。

踩坑 6 :--disable servicelb 后 NodePort 在多节点上都能访问(kube-proxy 转发),Grafana NodePort 30300 实测 worker 节点公网 IP 也能打开。

效果验证

集群就绪后的一张图(kubectl get nodes && kubectl get pods -A 输出)胜过千言:

bash 复制代码
$ kubectl get nodes
k3s-master    Ready    control-plane   192.168.0.249
k3s-worker1   Ready    <none>          192.168.0.34

$ kubectl -n monitoring get pods
# 全部 Running,零 CrashLoop

复盘:AI Agent 带来的效率增量

这次实操里 AI Agent 的角色不是"问答机器人",而是执行者:

  1. 并行 SSH 编排(4 台机器同时装软件,互不阻塞)
  2. 失败自诊断(pip 冲突 → 自动加 --ignore-installed 重试)
  3. 脱管执行(setsid nohup,SSH 断了任务不死)
  4. 全程留痕(每个 job 的 stdout/stderr/rc 都落盘,可审计可复盘)

传统方式 4 台机器装到全绿,一个人至少一天。这次从 SSH 引导到监控栈全绿:约 40 分钟。

小结

  • 4 台 8C16G 华为云 ECS,K3s 1.37.2 双节点,一个下午从裸机到生产可用
  • 关键决策:K3s 替代 kubeadm、禁用 traefik/servicelb、内网组网、NodePort 暴露
  • 5 个真实踩坑(traefik 冲突、metrics-server 预热、镜像拉取带宽、pip 系统包冲突、Node 版本要求)全部记录并给出修复
  • 全部脚本与清单开源于:github.com/cpyaxjq/huawei-cloud-4node-campaign(GitCode 同步)

下一篇:《全链路可观测:Prometheus + Grafana + Loki 在 K3s 上的落地与踩坑》,我们监控栈里见。


本文涉及的命令与配置均实测于华为云 ECS x3e.8u.16g × 4,Ubuntu 24.04.4,K3s v1.37.2+k3s1,2026-11。作者保留所有权利,转载请联系。

相关推荐
时间售卖铺1 小时前
Chrony与SSH实战:精准时间同步与安全远程登录
运维·安全·云原生·ssh
分布式存储与RustFS2 小时前
OpenObserve 的日志别堆本地盘:用 RustFS 当它的对象存储底座
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
阿里云云原生20 小时前
11月14日杭州见丨COSCon’26 第十一届中国开源年会,阿里云四场 Agent 技术分享
云原生
阿里云云原生21 小时前
关于 DeepSeek 的 SuperAgent,以及我们的实践
云原生·agent
mengge.cloud1 天前
prometheus+k8s+弹性伸缩,综合项目
云原生·容器·kubernetes·prometheus
Z21-X1 天前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
那明眸似水1 天前
云原生项目三:Docker秒级启动NextCloud个人网盘存储办公系统
linux·运维·docker·云原生·容器
腾飞开源1 天前
03_Kubernetes 核心概念拆解:从 Spec/Status 收敛到工作负载控制器的设计逻辑
云原生·容器·kubernetes
知已难寻2 天前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器