K3s:高可用“云原生”戏台
This content is not available in your language yet.
“只要我的 VIP 还能漂移,这篇关于高可用的博客就没有烂尾。”
欢迎来到赛博工地的“云原生混沌工程(Chaos Engineering)测试区”。
必须澄清一点:这个拥有 3 个 Master 节点的 Kubernetes 集群绝不承载任何家庭核心生产业务(真正的核心服务都安安稳稳地跑在我的另一套 K3s 生产集群里)。这个靶场集群的诞生,纯粹是为了让我体验“全盘接管 eBPF”、“干掉 kube-proxy”的极客快感,以及为我的视频和博客提供最硬核的架构素材。
在这里,节点假死是常规操作,VIP 漂移是保留节目。这是一套为了“被破坏”而精心设计的高可用实验室。
🚧 进场必读:K8s 基础图纸自修指南
Section titled “🚧 进场必读:K8s 基础图纸自修指南”在正式拉起这支“云原生特种部队”之前,我得先交个底。这套架构绝对不是给纯新手准备的保姆级教程。
我们上来就会暴力拆解 K3s 的默认网络组件,直接介入内核态的 eBPF,并强行接管二层 ARP 广播。如果你连 Docker 容器怎么跑都还没搞懂,这篇教程的排错环节大概率会让你当场“道心破碎”。
为了让你在这片“赛博工地”里不至于迷路,强烈建议在往下敲命令之前,先去恶补以下几个 Kubernetes 核心概念(请自行查阅 Kubernetes 官方中英对照文档 或 B 站优质教程):
- 🧱 Pod(容器组):K8s 世界里最小的“砖块”。忘掉传统虚拟机的思维,理解为什么几个容器要挤在一个 Pod 里共享网络和生命周期。
- 🧠 Control Plane & Node(控制平面与工作节点):控制平面是发号施令的“包工头”,Node 是承载业务的“牛马”。本篇的核心,就是打造 3 个不死不灭的“包工头”。
- 💾 etcd 与 Quorum(共识机制):集群的“记忆中枢”。你必须搞懂高可用集群为什么必须是奇数个(3、5、7),以及什么是可怕的“脑裂(Split-Brain)”。
- 🔌 CNI(容器网络接口):本教程的重头戏。你需要知道 K3s 默认的 Flannel 是怎么走 VXLAN 隧道的,才能体会到我们换上 Cilium (eBPF) 进行原生直通路由时那份性能起飞的爽感。
- 🚦 Service (Svc):重点搞懂
ClusterIP、NodePort和LoadBalancer的区别。理解了它,你才会明白本教程后半段,我们为什么要给 Cilium 发放一本“IP 支票簿”。 - 🚪 Ingress(入口网关):与 Service 搞四层不同,它主要管七层(HTTP/HTTPS)的域名路由。这也是我们后续部署独立版 Traefik 的核心。
🎬 演员就位:集群节点与核心组件清单 (Node & Component List)
Section titled “🎬 演员就位:集群节点与核心组件清单 (Node & Component List)”在这个集群里,没有老旧的 iptables 历史包袱。一切网络流量都由 eBPF 在内核态极速转发,而这几台 Ubuntu 虚拟机,就是随时准备被我“拔网线”的赛博演员。
| 节点 / 类型 | 算力配额 (vCPU/RAM) | 角色剧本 (Role & CNI) | 网络寻址 (IP/VIP) | 演艺状态 & 包工头备注 |
|---|---|---|---|---|
kube-vip 🛡️ Virtual IP | ∞ 逻辑存在 | 👑 API 守门员 | 10.0.10.2 TCP 6443 | 🟢 金牌护卫 拥有系统最高调度优先级。只要还有一台 Master 活着,它就死死咬住 6443 端口不撒手。 |
k3s-m1 🖥️ Master 01 | 2 Core 2GB RAM | ☸️ 火种节点 | 10.0.10.10 VLAN 10 | 🟡 首当其冲 集群初始化的奠基人。也是我在进行“节点断电混沌测试”时,最喜欢优先干掉的受害者。 |
k3s-m2 🖥️ Master 02 | 2 Core 2GB RAM | ☸️ 备用主控 | 10.0.10.20 VLAN 10 | 🟢 随时接管 etcd 共识机制的基石之一。平时岁月静好,M1 宕机时瞬间接管 VIP 开始疯狂输出。 |
k3s-m3 🖥️ Master 03 | 2 Core 2GB RAM | ☸️ 备用主控 | 10.0.10.30 VLAN 10 | 🟢 凑数选举 用来满足 etcd 奇数节点选举要求的工具人。没有它,这出高可用的大戏就唱不下去。 |
cilium-pool🐝 eBPF L2 | Kernel Native | 🔀 数据面发牌员 | 10.0.10.50-100 LB IPAM | 🔵 疯狂发牌 彻底干掉了 Klipper 和 kube-proxy。专职负责在二层网络里大声广播:“这个服务的 IP 归我管!” |
💡 破坏驱动型运维 (Destruction-Driven Ops)
Section titled “💡 破坏驱动型运维 (Destruction-Driven Ops)”作为一个合格的“赛博包工头”,建好楼只是第一步,怎么把楼拆得有技术含量才是我的核心诉求。
这套架构最精妙的地方在于它的职责分离:kube-vip 专职护驾控制平面,Cilium 凭借 eBPF 完全接管数据平面的 LoadBalancer。这种原生直连的底层设计,让我可以在这 3 台虚拟机上肆无忌惮地进行混沌工程测试(Chaos Engineering)。
无论是暴力重启 PVE 宿主机的虚拟机进程,还是强行修改系统时间制造 etcd 脑裂,这套集群最终都能在几秒钟的短暂波动后,重新推选出 Leader 并恢复服务。
毕竟,写架构博客最缺的不是代码,而是那些花钱都买不到的真实报错日志和灾备自愈截图。