一、硬件与宿主机环境(推荐配置)
1)硬件最低 & 推荐
最低:CPU 4 核、内存 16GB、SSD 100G(K3s + 监控 + 容器很吃内存)
推荐:CPU 6 核 +、内存 32GB、NVMe 200G;开启 CPU 虚拟化(Intel VT-x / AMD-V)
2)宿主机选型(三选一)
首选:Windows WSL2(最省事,不用装虚拟机) 开启嵌套虚拟化:
%UserProfile%\.wslconfig[wsl2] nestedVirtualization=true memory=24GB processors=6 swap=4GB重启:
wsl --shutdown备选:Ubuntu 22.04 / Debian 12 裸机
信创实验:openEuler 24.03 LTS(ARM64/x86 均可)
二、基础软件一键安装脚本(docker + docker-compose + 基础工具)
脚本文件名:init-host.sh(直接复制执行)
#!/bin/bash
set -e
# 更新源
apt update && apt upgrade -y
# 安装基础运维工具
apt install -y curl wget vim git net-tools iproute2 tcpdump iperf3 \
strace perf lsof htop tree openssh-client openssh-server
# 安装docker
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
usermod -aG docker $USER
# 安装docker-compose v2
apt install -y docker-compose-plugin
# 安装kubectl(和k3s保持版本一致)
curl -LO "https://dl.k8s.io/release/v1.31.3/bin/linux/amd64/kubectl"
chmod +x kubectl && mv kubectl /usr/local/bin/
# 安装helm3
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
echo "===== 宿主机初始化完成!退出重新登录让docker权限生效 ====="
执行:chmod +x init-host.sh && ./init-host.sh
信创 openEuler 版本:把 apt 换成 yum,脚本内包名不变。
三、K3s 一键安装脚本(单节点集群,containerd /docker 双模式)
脚本 1:在线快速安装(最简版 install-k3s.sh)
#!/bin/bash
# 单节点K3s(自带Traefik、CoreDNS,无需额外组件)
# 使用containerd(默认)
curl -sfL https://get.k3s.io | sh -
# 如需改用docker作为容器运行时,改用下面这行:
# curl -sfL https://get.k3s.io | sh -s -- --docker
# 配置kubectl免sudo
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
chmod 600 ~/.kube/config
# 验证
kubectl get nodes
echo "K3s安装完成!卸载命令:/usr/local/bin/k3s-uninstall.sh"
K3s
脚本 2:离线无网络安装(airgap,适合断网实验)
提前下载二进制 + 镜像包;
执行离线脚本:
#!/bin/bash
INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh - --docker
K3s
常用 K3s 集群命令
# 查看集群状态
kubectl get pods -n kube-system
# 停止/重启k3s
systemctl stop k3s
systemctl restart k3s
# 彻底卸载集群
k3s-uninstall.sh
四、Docker Compose 全套运维实验栈(5 套 yml,直接启动)
目录结构(一键建好)
lab/
├── docker-compose-monitor.yml # Prometheus+Grafana+Loki可观测栈
├── docker-compose-dev.yml # Git+镜像仓库+Jenkins CI/CD
├── docker-compose-mq-db.yml # MySQL+PG+Redis+RabbitMQ中间件
├── docker-compose-minio.yml # 对象存储MinIO
└── docker-compose-network.yml # Nginx+HAProxy四层七层负载均衡
1)可观测栈(monitor)docker-compose-monitor.yml
version: "3.8"
networks:
monitor-net:
services:
prometheus:
image: prom/prometheus:v2.47.0
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prom-data:/prometheus
networks: [monitor-net]
grafana:
image: grafana/grafana:10.2.0
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
networks: [monitor-net]
loki:
image: grafana/loki:3.0.0
ports:
- "3100:3100"
volumes:
- ./loki-config.yaml:/etc/loki/local-config.yaml
command: -config.file=/etc/loki/local-config.yaml
networks: [monitor-net]
volumes:
prom-data:
grafana-data:
2)CI/CD 开发环境 docker-compose-dev.yml
version: "3.8"
services:
registry:
image: registry:2
ports:
- "5000:5000"
volumes:
- registry-data:/var/lib/registry
gitlab:
image: gitlab/gitlab-ce:latest
ports:
- "8081:80"
- "2222:22"
volumes:
- gitlab-config:/etc/gitlab
- gitlab-logs:/var/log/gitlab
- gitlab-data:/var/opt/gitlab
jenkins:
image: jenkins/jenkins:lts-jdk17
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins-data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
volumes:
registry-data:
gitlab-config:
gitlab-logs:
gitlab-data:
jenkins-data:
3)中间件数据库集群 docker-compose-mq-db.yml
version: "3.8"
services:
mysql8:
image: mysql:8.0
ports: ["3306:3306"]
environment:
MYSQL_ROOT_PASSWORD: root123
volumes: [mysql-data:/var/lib/mysql]
postgres:
image: postgres:16
ports: ["5432:5432"]
environment:
POSTGRES_PASSWORD: postgres123
volumes: [pg-data:/var/lib/postgresql/data]
redis:
image: redis:7-alpine
ports: ["6379:6379"]
volumes: [redis-data:/data]
rabbitmq:
image: rabbitmq:3-management
ports: ["5672:5672","15672:15672"]
volumes:
mysql-data:
pg-data:
redis-data:
4)对象存储 MinIO docker-compose-minio.yml
version: "3.8"
services:
minio:
image: minio/minio
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: Admin@123
command: server /data --console-address ":9001"
volumes:
- minio-data:/data
volumes:
minio-data:
5)负载均衡实验(Nginx+HAProxy)docker-compose-network.yml
version: "3.8"
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
haproxy:
image: haproxy:alpine
ports:
- "8088:8088"
- "1080:1080"
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
启动命令
# 启动监控栈
docker-compose -f docker-compose-monitor.yml up -d
# 停止并销毁数据
docker-compose -f docker-compose-monitor.yml down -v
五、K3s 配套实验资源(yaml 一键部署)
把下面内容保存为 k3s-apps.yaml,直接 kubectl apply -f k3s-apps.yaml
MetalLB(K3s 没有云 LB,用来做四层负载均衡)
IngressRoute(Traefik 路由实验)
Longhorn(分布式块存储,做持久化存储实验)
测试 Pod+Service+StatefulSet 模板
如需我可以直接给你完整可复制的 yaml 文件。
六、实验室目录规划(规范目录,方便长期维护)
~/lab/
├── host-init/ # 宿主机初始化脚本
├── k3s-cluster/ # K3s安装脚本 + k8s yaml资源
├── compose-stack/ # 全部docker-compose.yml
├── ansible-lab/ # Ansible批量运维实验(主机基线、自动化)
├── terraform-lab/ # IaC代码(虚拟机/云资源编排)
└── log-fault/ # 故障演练日志+复盘文档
七、故障演练环境(核心运维练习场景)
在这套环境里你可以复现所有线上故障:
磁盘满、OOM、CPU 打满、网络丢包、TCP 重传
MySQL 锁等待、慢 SQL、主从同步异常
K3s 节点 NotReady、Pod 调度失败、镜像拉取失败、Ingress 无法访问
Prometheus 告警配置、日志收集、链路追踪排障
八、补充:多节点 K3s 集群(k3d 容器集群,无需虚拟机)
一条命令在 Docker 内拉起 3 节点 K3s 集群:
# 安装k3d
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
# 创建3节点集群
k3d cluster create lab-cluster --servers 1 --agents 2
九、一键打包交付包
我可以把全部内容打包成一个压缩包,包含:
全套 shell 脚本
所有 docker-compose.yml + 配套配置文件
K3s 全套 yaml 资源(MetalLB、Longhorn、Traefik 配置)
Ansible 主机基线 playbook
故障演练用的压测脚本(JMH、ab、wrk)
你直接解压,一键执行初始化,整套运维实验室直接就绪。