2. 环境准备:Docker 与 Docker Compose 安装,Minikube 或 Kind 集群搭建,kubectl 与 Helm 工具配置

本章将搭建完整的本地云原生实验环境,作为后续 etcd 压测与 Loki 告警分层实战的基础设施。所有工具均采用当前稳定版本,并针对国内网络环境提供镜像加速配置。

2.1 环境总览与版本要求

本课程沙盘所需的核心组件及推荐版本如下表所示。请确保主机满足最低资源要求:4 核 CPU、8 GB 内存、20 GB 可用磁盘空间。

组件 推荐版本 用途 最低版本
Docker Engine 24.0.7 容器运行时 20.10.0
Docker Compose 2.23.0 多容器编排 2.0.0
Kind 0.20.0 本地 Kubernetes 集群 0.17.0
kubectl 1.28.4 Kubernetes 命令行工具 1.24.0
Helm 3.13.2 Kubernetes 包管理 3.10.0
版本选择说明:本课程选用 Kind 而非 Minikube,因为 Kind 集群启动更快、资源占用更低,且原生支持多节点模拟,更适合压测场景下的网络拓扑验证。

2.2 Docker 与 Docker Compose 安装

Docker 是整个沙盘的基石,负责运行 etcd、Loki 等中间件容器。以下步骤基于 Ubuntu 22.04 LTS,其他 Linux 发行版请参照官方文档调整包管理器。

2.2.1 安装 Docker Engine

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

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

# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

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

# 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 启动并验证
sudo systemctl enable docker
sudo systemctl start docker
docker --version

2.2.2 配置镜像加速与用户权限

国内用户建议配置 Docker 镜像加速器,避免拉取镜像超时。同时将当前用户加入 docker 组,避免每次使用 sudo。

# 配置镜像加速(以阿里云为例,请替换为你的加速地址)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://<your-mirror-id>.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
EOF

# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
newgrp docker

# 验证无需 sudo
docker run hello-world

2.2.3 验证 Docker Compose

Docker Compose v2 已作为 Docker CLI 插件集成,直接使用 docker compose 命令即可。

docker compose version
# 预期输出:Docker Compose version v2.23.0
避坑提示:如果系统同时安装了 docker-compose(v1,Python 版),请确保使用 docker compose(v2,Go 版)以避免语法兼容性问题。本课程所有 Compose 文件均基于 v2 格式。

2.3 Kind 集群搭建

Kind(Kubernetes in Docker)通过将每个节点运行在 Docker 容器中,实现轻量级本地集群。我们使用 Kind 创建包含 1 个控制平面 + 2 个工作节点的三节点集群,模拟生产环境的多节点拓扑。

2.3.1 安装 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 version

2.3.2 创建集群配置文件

创建 kind-config.yaml,定义节点角色与端口映射。我们将 etcd 客户端端口 2379 映射到宿主机,方便后续压测工具直接访问。

# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    extraPortMappings:
      - containerPort: 30000
        hostPort: 30000
        protocol: TCP
  - role: worker
  - role: worker

2.3.3 启动集群并验证

# 创建集群
kind create cluster --config kind-config.yaml --name loki-lab

# 验证节点状态
kubectl cluster-info --context kind-loki-lab
kubectl get nodes -o wide

# 预期输出:3 个节点均为 Ready 状态
Kind 三节点集群架构 控制平面 kube-apiserver etcd (单节点) kube-scheduler 工作节点 1 kubelet kube-proxy 容器运行时 工作节点 2 kubelet kube-proxy 容器运行时 Docker 容器运行时(宿主机) 每个 Kind 节点运行在独立的 Docker 容器中 宿主机操作系统(Ubuntu 22.04) CPU: 4核 | 内存: 8GB | 磁盘: 20GB

2.4 kubectl 与 Helm 配置

kubectl 是操作 Kubernetes 集群的核心 CLI,Helm 则用于快速部署 Loki、etcd 等复杂应用。两者均需与集群版本匹配,避免 API 兼容性问题。

2.4.1 安装 kubectl

# 下载 kubectl 二进制
curl -LO "https://dl.k8s.io/release/v1.28.4/bin/linux/amd64/kubectl"

# 验证校验和
curl -LO "https://dl.k8s.io/release/v1.28.4/bin/linux/amd64/kubectl.sha256"
echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check

# 安装并赋予执行权限
chmod +x kubectl
sudo mv kubectl /usr/local/bin/kubectl

# 验证版本
kubectl version --client

2.4.2 配置 kubeconfig

Kind 创建集群后会自动将上下文写入 ~/.kube/config。如果使用多个集群,可通过 kubectl config use-context 切换。

# 查看当前上下文
kubectl config current-context

# 切换到 loki-lab 集群
kubectl config use-context kind-loki-lab

# 验证集群访问
kubectl get nodes

2.4.3 安装 Helm

# 下载 Helm 安装脚本
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# 验证版本
helm version

# 添加常用仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
网络注意事项:如果 Helm 仓库添加失败,请检查代理设置或使用镜像源。例如 Grafana 仓库国内镜像:helm repo add grafana https://grafana.github.io/helm-charts --insecure-skip-tls-verify。生产环境不建议跳过 TLS 验证。

2.5 环境验证清单

完成上述安装后,执行以下命令进行全链路验证,确保所有组件正常工作。

验证项 命令 预期结果
Docker 运行 docker run --rm hello-world 打印 Hello from Docker!
Docker Compose docker compose version Docker Compose version v2.23.0
Kind 集群 kubectl get nodes 3 节点 Ready
kubectl 版本 kubectl version --client Client Version: v1.28.4
Helm 仓库 helm repo list 至少包含 prometheus-community 和 grafana
快速诊断:如果 kubectl get nodes 显示 NotReady,请检查 Docker 是否正常运行:systemctl status docker。如果 Kind 创建集群失败,尝试 kind delete cluster --name loki-lab 后重新创建。

2.6 本章小结

至此,我们完成了以下环境准备工作:

  • 安装并配置了 Docker Engine 24.0.7 与 Docker Compose v2,配置了镜像加速和用户权限。
  • 使用 Kind 0.20.0 创建了 1 控制平面 + 2 工作节点的三节点集群,并映射了端口 30000。
  • 安装了 kubectl 1.28.4 与 Helm 3.13.2,添加了 Prometheus、Grafana、Bitnami 等常用 Helm 仓库。
  • 执行了全链路验证,确保所有组件可正常通信。