摘要:一个人加一个 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 是唯一解。
拓扑规划
+-----------------------------------------------------------+
| 华为云 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 台机器,第一件事不是装东西,而是建立免密通道 + 体检:
# 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):
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 节点一条命令:
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 加入:
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?不,实际一次成功:
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):
# 关键片段
resources:
requests: {cpu: 100m, memory: 128Mi}
limits: {cpu: 500m, memory: 256Mi}
# HPA: min 2 / max 6, CPU 60%
kubectl get hpa demo-shop
# TARGETS 从 <unknown>(metrics-server 未就绪)→ 3%/60%
踩坑 4:HPA 刚建时 TARGETS 显示 <unknown>,这是因为 metrics-server 需要 1-2 分钟预热,以及 Pod 必须带 resources.requests 才能被计算。新手常被这个吓到。
第四步:监控栈 —— helm 一把梭的代价与正确姿势
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 矩阵:
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 输出)胜过千言:
$ 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 的角色不是"问答机器人",而是执行者:
- 并行 SSH 编排(4 台机器同时装软件,互不阻塞)
- 失败自诊断(pip 冲突 → 自动加 --ignore-installed 重试)
- 脱管执行(setsid nohup,SSH 断了任务不死)
- 全程留痕(每个 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。作者保留所有权利,转载请联系。