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
Testing框架实验环境架构 基础设施层 Ubuntu 22.04 / Docker 24.0+ / Kubernetes 1.28+ Testing框架层 Chaos Mesh v2.7(CRD + Controller + Daemon + Dashboard) 实验对象层 微服务Demo应用(Go/Java/Node.js混合部署) 可观测性栈 Prometheus + Grafana + Loki 运维工具链 kubectl / helm / k9s / stern 说明:所有组件均部署在同一Kubernetes集群中,通过Service Mesh(Istio)进行流量管理

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权限未正确配置。