今天在 GitHub Trending 上看到一个有意思的项目:K8sQuest,它用「闯关打怪」的方式把枯燥的 Kubernetes 排障训练做成了游戏,而且完全跑在本地、零云成本。
一、项目概述
K8sQuest 是一个本地、游戏化的 Kubernetes 学习平台,核心玩法很简单:每一关会故意「搞坏」集群里的某些东西,你的任务就是用 kubectl 把它修好。项目底层依赖 kind(Kubernetes in Docker)在本地拉起一个真实集群,因此你面对的不是模拟题,而是真实的资源对象、真实的状态、真实的报错。
整个学习路径被设计成 5 个世界(World)、共 50 个渐进式挑战,从入门到进阶完整覆盖:
- 🌍 World 1:核心基础(Level 1–10,1000 XP)— CrashLoopBackOff、ImagePullBackOff、Pending Pod、Label/Selector 错配等高频故障
- 🏆 World 2:部署与扩缩容(Level 11–20,1350 XP)— 滚动更新、回滚、HPA、探针、PodDisruptionBudget
- 🌐 World 3:网络与服务(Level 21–30,2100 XP)— ClusterIP/NodePort/LoadBalancer、DNS、Ingress、NetworkPolicy
- 💾 World 4:存储与有状态应用(Level 31–40,2600 XP)— PV/PVC、StatefulSet、ConfigMap/Secret、权限
- 🔐 World 5:安全与生产运维(Level 41–50,3150 XP)— RBAC、SecurityContext、资源配额、节点调度,最终关是「混沌终章」——9 个故障同时爆发
完整旅程合计 50 关 / 10200 XP,从新手一路打到「Kubernetes Master」。
主要特性包括:实时资源监控(check 命令)、渐进式提示(hints,每用一次解锁更多)、新手段落式通关指引、关卡后的**复盘(Debrief)**讲解「为什么这样修有效」并附真实生产事故案例,以及 XP / 进度 / 自动存档系统。
二、技术原理
K8sQuest 本质是一套**「故障注入 + 校验」的引擎**,用 Bash 脚本驱动,Python 负责引擎逻辑与终端 UI(依赖 rich、pyyaml)。
requirements.txt
rich>=13.0.0
pyyaml>=6.0
其工作流程可以理解为三步循环:
- 注入故障(Break):每个关卡在
k8squest命名空间内创建/篡改真实资源(例如把 Deployment 的副本数改成 0、把镜像名写错触发 ImagePullBackOff),并配置环境依赖。 - 玩家排障(Fix):玩家在第二个终端里用
kubectl观察与修复——这正是训练的目的。 - 校验通过(Validate):
validate命令检查集群实际状态是否恢复健康,通过即发放 XP 并触发复盘。
关键设计点:
- 多终端工作流:游戏终端保持运行,玩家另开一个终端用
kubectl操作。这种「边观察边修复」的模式,正是真实生产排障的缩影。 - RBAC 隔离:所有操作被限制在
k8squest命名空间,配合安全护栏(Safety Guards)默认开启——阻止删除kube-system、default等系统命名空间,阻断集群级破坏性操作,执行危险动作前需二次确认。这让新手也很难把环境彻底搞崩。 - 可重置:
engine/reset.py支持单关或全量重置,卡关时随时重来。
三、安装与快速开始
环境要求
- Docker Desktop(需处于运行状态)
kubectl、kind、bash、jq- Python 3.9+
安装步骤(macOS / Linux)
git clone https://github.com/Manoj-engineer/k8squest.git
cd k8squest
./install.sh
Windows 用户需使用 Git Bash(不要 PowerShell/CMD),并按文档装好 Docker Desktop、kubectl、kind、Python 3.9+、jq 等依赖。
最简运行
# 一次性安装
./install.sh
# 开始游戏(保持此终端运行)
./play.sh
四、使用方法与实战
启动后,游戏终端会给出每一关的任务简报(难度、预计耗时、涉及的知识点)。典型流程:
- 运行
./play.sh启动游戏(第一个终端保持运行) - 阅读任务简报,理解「什么坏了」
- ⚠️ 新开一个终端,在第二个终端里用
kubectl调查 Pod、日志、事件 - 用
kubectl应用修复 - 回到游戏终端选择
check/validate/guide验证 - 通过校验后获得 XP 与复盘
游戏内可用命令:
check 实时监控资源状态(watch 变化)
guide 逐步通关指引
hints 渐进式提示(越用解锁越多)
solution 查看 solution.yaml
validate 校验你的修复是否生效
skip 跳过本关(无 XP)
quit 退出(进度自动保存)
实战示例(以 World 1 Level 1 的 CrashLoopBackOff 为例):在游戏终端看到 Pod 反复崩溃后,于第二个终端执行:
kubectl -n k8squest get pods
kubectl -n k8squest logs <pod-name> --previous
kubectl -n k8squest describe pod <pod-name>
根据日志定位崩溃根因(如启动命令错误、依赖缺失、配置缺失),修正 Deployment 的镜像/命令/配置后,validate 即可通关,随后收到复盘讲解。
卡关想重来时:
source venv/bin/activate
python3 engine/reset.py level-1-pods # 重置 World 1 第一关
python3 engine/reset.py all # 重置全部
五、常见问题与解决方案
根据 README 的排障文档,高频问题集中在环境层面:
TypeError: 'type' object is not subscriptable:使用的是 Python 3.8 或更旧版本,K8sQuest 要求 Python 3.9+。macOS 用brew install [email protected],Linux 用sudo apt install python3.11,Windows 装 3.11+。bash: command not found:Windows 下务必使用 Git Bash,而非 PowerShell 或 CMD。docker: command not found:Docker Desktop 未启动或仍在初始化,启动并等待完全就绪。- 脚本出现
^M错误:换行符问题,执行git config core.autocrlf input && git rm --cached -r . && git reset --hard重置。
兼容性方面,项目官方支持 Linux、macOS、Windows(Git Bash / WSL2),其中 WSL2 提供最原生的体验。
六、总结
K8sQuest 把「读文档」变成了「动手修」,用真实集群 + 游戏化机制解决了 Kubernetes 学习里最难的「缺乏练习环境」问题。它的几个亮点尤其值得肯定:完全本地、零成本免去云账号负担;默认安全护栏让新手敢动手;通关复盘把「知其然」延伸到「知其所以然」,还顺带补上了生产事故与面试视角。如果你正想系统补齐 kubectl 排障能力,或者带团队做 K8s 内训,这是个值得 Star 的开源项目。