2. 环境准备:Python 3.10+ 环境搭建、Docker与Kubernetes集群部署、Prometheus与Grafana监控栈安装
本章聚焦于搭建混沌工程基线核验所需的完整实验环境。所有后续的故障注入、指标采集与核验脚本都将运行在本章构建的底座之上。环境分为四个层次:运行时语言层(Python 3.10+)、容器编排层(Docker + Kubernetes)、监控观测层(Prometheus + Grafana)。
基线核验前置条件: 混沌工程实验的“基线”指系统在正常状态下的稳态指标(如 P99 延迟、错误率、CPU 使用率)。本章搭建的监控栈将直接用于采集这些基线数据,因此环境版本与配置必须与后续实验保持一致。
2.1 Python 3.10+ 运行环境
推荐使用 pyenv 管理多版本 Python,确保团队环境一致。以下为 Ubuntu 22.04 / macOS 通用安装步骤:
# 安装 pyenv 依赖(Ubuntu)
sudo apt-get update; sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
# 安装 pyenv
curl https://pyenv.run | bash
# 写入 shell 配置(~/.bashrc 或 ~/.zshrc)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
# 安装 Python 3.11.4(稳定版本)
pyenv install 3.11.4
pyenv global 3.11.4
# 验证
python --version # 应输出 Python 3.11.4
依赖清单: 后续混沌实验将使用
chaostoolkit、kubernetes、prometheus-api-client、requests、pyyaml。建议在项目根目录创建 requirements.txt 并一次性安装。
# requirements.txt
chaostoolkit==1.30.0
chaostoolkit-kubernetes==1.18.0
prometheus-api-client==0.5.4
kubernetes==27.2.0
requests==2.31.0
pyyaml==6.0.1
# 安装
pip install -r requirements.txt
2.2 Docker 与 Kubernetes 集群部署
本地开发环境推荐使用 Docker Desktop(macOS/Windows)或 Minikube(Linux)快速启动单节点集群。生产级基线核验建议使用 Kind(Kubernetes in Docker)模拟多节点拓扑。
| 工具 | 适用场景 | 节点数 | 资源开销 | 启动时间 |
|---|---|---|---|---|
| Docker Desktop | 个人开发、快速验证 | 1 | 中 | ~2 min |
| Minikube | Linux 本地测试 | 1 | 低 | ~3 min |
| Kind | CI/CD、多节点模拟 | 1~6 | 中 | ~1 min |
| K3s | 边缘/资源受限环境 | 1~3 | 极低 | ~30 s |
以下为 Kind 部署示例(推荐用于本课程):
# 安装 Kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
# 创建多节点集群配置文件 kind-config.yaml
cat <<EOF > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
EOF
# 启动集群
kind create cluster --config kind-config.yaml --name chaos-baseline
# 验证
kubectl cluster-info --context kind-chaos-baseline
kubectl get nodes
注意: 混沌实验会频繁操作 Pod、NetworkPolicy、资源配额。请确保
kubectl 的 context 始终指向实验集群,避免误操作生产环境。建议为每个实验创建独立的 Kind 集群。
2.3 Prometheus 与 Grafana 监控栈安装
监控栈是基线核验的数据核心。Prometheus 负责采集与存储指标,Grafana 负责可视化与告警。推荐使用 kube-prometheus-stack Helm Chart 一键部署。
2.3.1 安装 Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version
2.3.2 部署 kube-prometheus-stack
# 添加 Helm 仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# 创建命名空间
kubectl create namespace monitoring
# 安装(包含 Prometheus、Grafana、AlertManager、Node Exporter)
helm install kube-prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--set grafana.adminPassword=admin123 \
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
# 等待所有 Pod 就绪
kubectl -n monitoring get pods -w
2.3.3 访问 Grafana
# 端口转发
kubectl -n monitoring port-forward svc/kube-prometheus-grafana 3000:80
# 浏览器打开 http://localhost:3000
# 默认账号:admin / admin123
基线核验关键指标: 在 Grafana 中导入 Kubernetes Cluster Monitoring 仪表盘(ID: 315)。重点关注:
container_cpu_usage_seconds_total、container_memory_working_set_bytes、http_request_duration_seconds_bucket、kube_pod_status_ready。这些指标将作为混沌实验的“基线”与“实验后”对比维度。
2.4 环境验证清单
完成上述安装后,执行以下命令验证环境完整性:
# 1. Python 环境
python --version && pip list | grep -E "chaostoolkit|kubernetes|prometheus"
# 2. Kubernetes 集群
kubectl get nodes -o wide
kubectl -n monitoring get pods
# 3. Prometheus 目标状态
kubectl -n monitoring port-forward svc/kube-prometheus-kube-prome-prometheus 9090:9090 &
curl http://localhost:9090/api/v1/targets | python -m json.tool | grep -E "health|scrapeUrl"
# 4. Grafana 数据源
kubectl -n monitoring port-forward svc/kube-prometheus-grafana 3000:80 &
# 浏览器访问 http://localhost:3000,确认 Prometheus 数据源已配置且状态为 "OK"
基线核验环境就绪标准:
- Python 3.10+ 可执行混沌实验脚本
- Kubernetes 集群至少 1 个控制平面 + 2 个工作节点
- Prometheus 能采集所有目标(Node Exporter、Kube State Metrics、cAdvisor)
- Grafana 已导入 Kubernetes 监控仪表盘,且能查询到最近 5 分钟指标数据