4. 环境准备:Minikube/Kind集群搭建、kubectl配置、必备工具安装
本章聚焦于搭建混沌工程实验所需的底层基础设施。我们将依次完成本地 Kubernetes 集群的创建、kubectl 命令行工具的配置,以及核心工具链(Helm、Chaos Mesh、Litmus)的安装。一个稳定、可复现的实验环境是后续故障注入与 IDP 隔离验证的基石。
4.1 本地集群选型:Minikube vs Kind
对于本地开发和混沌实验,Minikube 和 Kind 是最主流的两种选择。下表从关键维度对比两者的差异,帮助你根据实验场景做出选择。
| 对比维度 | Minikube | Kind (Kubernetes in Docker) |
|---|---|---|
| 底层驱动 | 虚拟机(VirtualBox/HyperKit)或 Docker | Docker 容器作为节点 |
| 集群启动速度 | 较慢(需启动完整 VM) | 极快(秒级启动容器节点) |
| 资源占用 | 较高(VM 开销) | 较低(共享 Docker 守护进程) |
| 多节点支持 | 支持(需指定参数) | 原生支持,配置简单 |
| 持久化存储 | 内置 CSI 驱动,支持 PV | 需额外配置,适合无状态实验 |
| 适用场景 | 模拟真实节点环境、存储测试 | CI/CD 集成、快速原型、多节点拓扑 |
推荐选择: 本课程后续的故障注入实验推荐使用 Kind。其轻量、快速、多节点易配置的特性,能显著缩短环境准备时间,让你更专注于混沌实验本身。若你的实验涉及节点级别的故障(如节点宕机),则 Minikube 的 VM 模式更贴近生产。
4.2 集群搭建与 kubectl 配置
4.2.1 使用 Kind 创建多节点集群
Kind 通过 YAML 配置文件定义集群拓扑。以下配置将创建一个包含 1 个控制平面节点和 3 个工作节点的集群,适合模拟 Deployment 故障隔离场景。
# kind-cluster.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
执行以下命令创建集群并验证节点状态:
# 创建集群
kind create cluster --config kind-cluster.yaml --name chaos-cluster
# 验证节点
kubectl get nodes -o wide
# 预期输出:4 个节点均为 Ready 状态
NAME STATUS ROLES AGE VERSION
chaos-cluster-control-plane Ready control-plane 2m v1.27.3
chaos-cluster-worker Ready <none> 1m v1.27.3
chaos-cluster-worker2 Ready <none> 1m v1.27.3
chaos-cluster-worker3 Ready <none> 1m v1.27.3
4.2.2 kubectl 配置与上下文管理
Kind 创建集群后会自动更新 kubeconfig。建议为不同实验集群设置独立的上下文,避免操作混淆。
# 查看当前上下文
kubectl config current-context
# 设置默认命名空间(后续实验统一使用 chaos-ns)
kubectl config set-context --current --namespace=chaos-ns
# 创建实验命名空间
kubectl create ns chaos-ns
避坑提示: 若同时管理多个集群,务必在执行故障注入前通过
kubectl config use-context 切换到正确的集群。在错误的集群上执行 Chaos Mesh 实验可能导致生产环境意外中断。
4.3 必备工具安装
本节安装的三个工具构成了混沌工程实验的完整工具链:Helm 作为包管理器,Chaos Mesh 作为故障注入引擎,Litmus 作为混沌实验编排平台。
4.3.1 Helm 安装
Helm 用于简化 Kubernetes 应用的部署和管理。我们使用 Helm 3 安装 Chaos Mesh 和 Litmus。
# 下载并安装 Helm(Linux/macOS)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 验证版本
helm version --short
# 添加 Chaos Mesh 和 Litmus 的 Helm 仓库
helm repo add chaos-mesh https://charts.chaos-mesh.org
helm repo add litmus https://litmuschaos.github.io/litmus-helm/
helm repo update
4.3.2 Chaos Mesh 安装
Chaos Mesh 是一个开源的云原生混沌工程平台,支持 Pod 故障、网络延迟、文件系统异常等多种故障类型。
# 安装 Chaos Mesh(指定命名空间)
helm install chaos-mesh chaos-mesh/chaos-mesh \
--namespace=chaos-mesh \
--create-namespace \
--set chaosDaemon.runtime=containerd \
--set chaosDaemon.socketPath=/run/containerd/containerd.sock
# 验证安装
kubectl get pods -n chaos-mesh -l app.kubernetes.io/instance=chaos-mesh
# 预期输出:chaos-controller-manager、chaos-daemon、chaos-dashboard 均为 Running
关键参数说明:
chaosDaemon.runtime 和 chaosDaemon.socketPath 必须与集群的容器运行时一致。Kind 默认使用 containerd,因此上述配置是标准选项。若使用 Docker 作为运行时,需调整为 runtime=docker 和 socketPath=/var/run/docker.sock。
4.3.3 Litmus 安装
Litmus 提供更高级的混沌实验编排能力,支持实验工作流、调度和报告。我们安装 Litmus 的核心组件:
# 安装 Litmus(包含前端、后端和混沌执行器)
helm install litmus litmus/litmus \
--namespace=litmus \
--create-namespace \
--set portal.frontend.service.type=NodePort
# 验证安装
kubectl get pods -n litmus -l app.kubernetes.io/instance=litmus
# 获取 Litmus Portal 访问地址
kubectl get svc -n litmus litmus-frontend-service -o jsonpath='{.spec.ports[0].nodePort}'
4.4 环境验证与工具架构总览
安装完成后,我们通过一张架构图来理解各组件之间的关系,并执行快速验证脚本确保环境就绪。
环境就绪后,执行以下快速验证脚本,确保所有组件正常运行:
#!/bin/bash
# 环境验证脚本
echo "=== 1. 集群节点状态 ==="
kubectl get nodes
echo -e "\n=== 2. Chaos Mesh 组件 ==="
kubectl get pods -n chaos-mesh
echo -e "\n=== 3. Litmus 组件 ==="
kubectl get pods -n litmus
echo -e "\n=== 4. Helm 仓库列表 ==="
helm repo list
echo -e "\n=== 5. 实验命名空间 ==="
kubectl get ns chaos-ns
验证通过标准: 所有节点状态为
Ready,Chaos Mesh 和 Litmus 的 Pod 均为 Running 状态,Helm 仓库列表中包含 chaos-mesh 和 litmus,且 chaos-ns 命名空间已存在。至此,环境准备全部完成,可以进入下一章的故障注入实验。