小易说IT 小易说IT

本地运维实验室完整清单(WSL2 / Ubuntu /openEuler 通用)

一、硬件与宿主机环境(推荐配置)

1)硬件最低 & 推荐

  • 最低:CPU 4 核、内存 16GB、SSD 100G(K3s + 监控 + 容器很吃内存)

  • 推荐:CPU 6 核 +、内存 32GB、NVMe 200G;开启 CPU 虚拟化(Intel VT-x / AMD-V)

2)宿主机选型(三选一)

  1. 首选:Windows WSL2(最省事,不用装虚拟机) 开启嵌套虚拟化:%UserProfile%\.wslconfig

    [wsl2]
    nestedVirtualization=true
    memory=24GB
    processors=6
    swap=4GB
    

    重启:wsl --shutdown

  2. 备选:Ubuntu 22.04 / Debian 12 裸机

  3. 信创实验: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,适合断网实验)

  1. 提前下载二进制 + 镜像包;

  2. 执行离线脚本:

#!/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

  1. MetalLB(K3s 没有云 LB,用来做四层负载均衡)

  2. IngressRoute(Traefik 路由实验)

  3. Longhorn(分布式块存储,做持久化存储实验)

  4. 测试 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/        # 故障演练日志+复盘文档

七、故障演练环境(核心运维练习场景)

在这套环境里你可以复现所有线上故障:

  1. 磁盘满、OOM、CPU 打满、网络丢包、TCP 重传

  2. MySQL 锁等待、慢 SQL、主从同步异常

  3. K3s 节点 NotReady、Pod 调度失败、镜像拉取失败、Ingress 无法访问

  4. 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

九、一键打包交付包

我可以把全部内容打包成一个压缩包,包含:

  1. 全套 shell 脚本

  2. 所有 docker-compose.yml + 配套配置文件

  3. K3s 全套 yaml 资源(MetalLB、Longhorn、Traefik 配置)

  4. Ansible 主机基线 playbook

  5. 故障演练用的压测脚本(JMH、ab、wrk)

你直接解压,一键执行初始化,整套运维实验室直接就绪。