环境准备:Linux基础命令回顾、Docker环境搭建、Kubernetes单机集群部署

做故障注入测试,说白了就是跟系统底层打交道。你连环境都搭不起来,后面那些注入手段根本玩不转。这一章咱们把地基打牢——Linux命令、Docker、K8s单机集群,一步到位。

Linux基础命令回顾

我个人习惯,不管多忙,每周都会在测试机上敲几遍这些命令。肌肉记忆比脑子靠谱。

核心命令清单(故障注入测试高频使用)

  • ps aux | grep <进程名> —— 查目标进程PID,注入前必做
  • kill -<信号编号> <PID> —— 模拟进程崩溃,信号9是强杀,15是优雅退出
  • strace -p <PID> —— 跟踪系统调用,看注入后进程在干啥
  • netstat -tlnp —— 检查端口监听状态,网络故障注入后验证用
  • tc qdisc add dev eth0 root netem loss 10% —— 模拟网络丢包,我常用的招
  • dd if=/dev/zero of=/tmp/test bs=1M count=100 —— 压磁盘IO,测存储故障

我的小习惯:每次执行破坏性命令前,先开一个watch -n 1 'ps aux | grep 目标进程'窗口。这样你能实时看到进程状态变化,心里有底。

Docker环境搭建

Docker是故障注入测试的绝佳沙盒。我在项目中遇到过好几次——直接在生产环境搞注入,结果把隔壁团队的服务也带崩了。从那以后,我坚持先用Docker隔离。

安装Docker(Ubuntu 20.04+)

# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

# 添加官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
sudo docker run hello-world

注意:千万别用root用户跑docker命令。把当前用户加入docker组:sudo usermod -aG docker $USER,然后退出重登。我曾经因为忘了这步,折腾了半小时权限问题。

Docker常用操作速查

操作 命令 故障注入场景
拉取镜像 docker pull nginx:alpine 准备测试目标
运行容器 docker run -d --name web-test -p 8080:80 nginx:alpine 启动被测服务
进入容器 docker exec -it web-test /bin/sh 内部注入故障
查看日志 docker logs -f web-test 观察故障表现
停止容器 docker stop web-test 模拟服务宕机
资源限制 docker run --memory="256m" --cpus="0.5" nginx 模拟资源不足

Kubernetes单机集群部署

你想想看,真正的微服务架构里,故障往往不是单点发生的。K8s集群能让你模拟服务间调用链断裂、Pod驱逐、节点宕机这些复杂场景。单机集群够用了,咱们又不是搞生产环境。

使用Minikube部署单机集群

# 安装Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 安装kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install kubectl /usr/local/bin/kubectl

# 启动Minikube(指定驱动为docker)
minikube start --driver=docker --cpus=2 --memory=4096

# 验证集群状态
kubectl cluster-info
kubectl get nodes

避坑指南:我曾经在内存只有2G的机器上跑Minikube,结果Pod一直Pending。建议至少给4G内存,否则后面做故障注入时,系统自己就先崩了。

部署一个测试应用

# 创建部署
kubectl create deployment nginx-test --image=nginx:alpine --replicas=3

# 暴露服务
kubectl expose deployment nginx-test --port=80 --target-port=80 --type=NodePort

# 查看服务
kubectl get pods -o wide
kubectl get svc

# 访问测试
minikube service nginx-test --url

本章知识体系

下面这张图把环境准备的三个层次串起来了。你照着这个顺序搭,不会乱。

故障注入测试环境准备知识体系 Linux基础命令 Docker环境 K8s单机集群 进程管理 网络工具 系统调用 磁盘IO 镜像管理 容器操作 资源限制 日志查看 Pod管理 Service Deployment 集群信息 搭建顺序与依赖关系 1. 先掌握Linux基础命令(进程、网络、系统调用) 2. 再搭建Docker环境(容器化隔离测试目标) 3. 最后部署K8s单机集群(模拟微服务故障场景) 每一层都是下一层的基础,跳步容易踩坑

验证环境是否就绪

环境搭完别急着走。我建议你跑一遍这个快速验证脚本,确保所有组件都能正常工作。

#!/bin/bash
# 环境验证脚本

echo "=== 1. 检查Docker ==="
docker --version && docker info | grep "Containers:" && echo "Docker OK"

echo "=== 2. 检查Minikube ==="
minikube status | grep "host: Running" && echo "Minikube OK"

echo "=== 3. 检查kubectl ==="
kubectl version --client --short && echo "kubectl OK"

echo "=== 4. 检查集群节点 ==="
kubectl get nodes | grep Ready && echo "集群节点正常"

echo "=== 5. 部署测试Pod ==="
kubectl run test-pod --image=nginx:alpine --restart=Never
sleep 5
kubectl get pod test-pod | grep Running && echo "Pod运行正常"

echo "=== 环境验证通过 ==="

常见问题:

  • Minikube启动卡住?检查虚拟机驱动,minikube start --driver=docker 指定docker驱动
  • Pod一直Pending?资源不够,minikube stop && minikube start --cpus=2 --memory=4096
  • kubectl连不上?kubectl config view 检查配置,minikube update-context 刷新