1. 课程导论与实验环境准备
1.1 Testing框架概述
Testing框架是专为云原生环境设计的故障注入与验证引擎,它允许运维工程师以声明式的方式定义、编排和执行故障场景,从而验证系统在异常条件下的行为是否符合预期。本课程选用 Chaos Mesh 作为核心Testing框架,其基于Kubernetes CRD实现,天然适配容器化环境。
| 特性 | 说明 |
|---|---|
| 声明式API | 通过YAML定义故障场景,与Kubernetes资源模型一致 |
| 故障类型丰富 | 支持Pod故障、网络故障、压力注入、IO延迟等20+种原子故障 |
| 安全控制 | 内置命名空间隔离、实验白名单、自动恢复机制 |
| 可观测集成 | 原生对接Prometheus、Grafana,故障注入期间自动采集指标 |
课程选型依据: Chaos Mesh 在CNCF Landscape中属于成熟度最高的混沌工程项目之一,社区活跃、文档完善,且与Kubernetes生态深度集成,适合作为容器化故障排查的教学平台。
1.2 容器化故障排查的重要性
在微服务和容器化架构下,故障的传播路径更短、影响范围更大、根因定位更困难。传统基于主机的故障排查方法在容器环境中面临三大挑战:
- 瞬态性: Pod随时可能被调度、重启或驱逐,故障现场难以保留
- 复杂性: 服务间调用链长,一个故障可能表现为多个服务的异常
- 环境差异: 开发、测试、生产环境的容器编排配置不一致,导致故障复现困难
Testing框架通过主动注入已知故障,帮助团队在受控环境中建立故障响应SOP,缩短MTTR(平均修复时间)。根据CNCF 2024年调查报告,采用混沌工程实践的组织,其生产故障平均定位时间缩短了47%。
核心认知: 故障排查不是被动响应,而是通过Testing框架主动验证系统韧性边界。本课程所有实验均基于“先注入、再观测、后定位”的三步法展开。
1.3 Docker与Kubernetes环境搭建
实验环境要求:Docker 24.0+、Kubernetes 1.28+、至少2核CPU/4GB内存/20GB磁盘。以下为快速部署脚本(基于Ubuntu 22.04):
# 安装Docker
curl -fsSL https://get.docker.com | bash
sudo usermod -aG docker $USER
# 安装Kubernetes(使用kubeadm)
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# 初始化集群(使用Calico网络插件)
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27/manifests/calico.yaml
环境验证: 执行
kubectl get nodes 确认所有节点状态为 Ready;执行 docker info 确认Docker运行正常。若使用Minikube或Kind,请确保集群版本≥1.28。
1.4 Testing框架安装与配置
本课程使用 Chaos Mesh v2.7,通过Helm Chart一键部署:
# 添加Helm仓库
helm repo add chaos-mesh https://charts.chaos-mesh.org
helm repo update
# 安装Chaos Mesh(命名空间:chaos-testing)
helm install chaos-mesh chaos-mesh/chaos-mesh \
--namespace=chaos-testing \
--create-namespace \
--set chaosDaemon.runtime=docker \
--set chaosDaemon.socketPath=/var/run/docker.sock
# 验证安装
kubectl get pods -n chaos-testing
# 预期输出:chaos-controller-manager、chaos-daemon、chaos-dashboard 均为Running状态
安装完成后,通过Dashboard进行可视化操作:
kubectl port-forward -n chaos-testing svc/chaos-dashboard 2333:2333
# 浏览器访问 http://localhost:2333
配置要点:
chaosDaemon.runtime必须与节点容器运行时一致(docker/containerd)- 若使用containerd,需将
socketPath改为/run/containerd/containerd.sock - 生产环境建议开启
securityMode并配置RBAC
1.5 实验环境验证清单
完成环境搭建后,请逐项确认以下检查点:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| Docker运行状态 | docker info | grep "Server Version" |
Server Version: 24.0.x |
| Kubernetes节点状态 | kubectl get nodes |
所有节点 Ready |
| Chaos Mesh Pod状态 | kubectl get pods -n chaos-testing |
3个Pod均为 Running |
| Dashboard可访问 | curl -s http://localhost:2333 |
返回200状态码 |
| Helm版本 | helm version --short |
v3.14.x |
排障提示: 若Chaos Mesh Pod启动失败,请检查
kubectl describe pod -n chaos-testing <pod-name> 查看Events。常见原因包括:容器运行时socket路径错误、节点资源不足、RBAC权限未正确配置。