3. 本地开发环境搭建:安装 Minikube、kubectl、Docker Desktop,验证集群状态,配置本地镜像仓库
本地开发环境是集成测试驱动 Kubernetes 配置的起点。本章将指导你完成 Minikube、kubectl 和 Docker Desktop 的安装与配置,验证集群健康状态,并搭建本地镜像仓库,为后续的集成测试场景提供稳定的基础设施。
3.1 环境概览与工具职责
本地 Kubernetes 开发环境由三个核心组件构成,各自承担明确职责:
| 组件 | 版本建议 | 核心职责 | 端口/资源 |
|---|---|---|---|
| Docker Desktop | ≥ 4.25 | 容器运行时,构建镜像,管理本地容器生命周期 | 2375 (daemon), 4 vCPU / 8 GB RAM 建议 |
| Minikube | ≥ 1.33 | 单节点 Kubernetes 集群,提供 API Server、etcd、kubelet | 8443 (API), 10250 (kubelet) |
| kubectl | 与集群版本偏差 ≤ 1 个小版本 | 与 API Server 交互,管理 Pod、Service、Deployment 等资源 | CLI 工具,无固定端口 |
版本对齐提示:kubectl 版本与 Kubernetes 集群版本的偏差不应超过 1 个小版本。例如,Minikube 启动 Kubernetes v1.29 时,kubectl 应使用 v1.28、v1.29 或 v1.30。使用
kubectl version --client 和 minikube version 确认版本兼容性。
3.2 安装流程与关键步骤
以下安装流程按依赖顺序排列,建议严格遵循:
- 安装 Docker Desktop
- 从 Docker 官网下载对应操作系统安装包(macOS 选择 Apple Silicon 或 Intel 版本)。
- 安装后启动 Docker Desktop,进入 Settings → Resources → Advanced,将 CPU 设置为 4 核,内存设置为 8 GB。
- 在 Settings → Docker Engine 中确认
experimental为true,以启用 containerd 镜像存储。 - 验证:
docker info | grep "Server Version"应返回版本号。
- 安装 Minikube
- macOS 使用 Homebrew:
brew install minikube。 - Linux 使用二进制下载:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && sudo install minikube-linux-amd64 /usr/local/bin/minikube。 - Windows 使用 Chocolatey:
choco install minikube。 - 验证:
minikube version输出应包含minikube version: v1.33.x。
- macOS 使用 Homebrew:
- 安装 kubectl
- macOS:
brew install kubectl。 - Linux:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"。 - Windows:
curl.exe -LO "https://dl.k8s.io/release/v1.29.0/bin/windows/amd64/kubectl.exe"。 - 验证:
kubectl version --client --output=yaml应显示clientVersion信息。
- macOS:
驱动选择:Minikube 默认使用 Docker 驱动。若使用
--driver=docker,Minikube 会复用 Docker Desktop 的容器运行时,无需额外安装 VirtualBox 或 HyperKit。这是最简洁的配置方式。
3.3 启动集群与状态验证
完成安装后,按以下步骤启动并验证集群:
# 启动 Minikube 集群,指定驱动和资源
minikube start --driver=docker --cpus=4 --memory=8192 --kubernetes-version=v1.29.0
# 检查集群状态
minikube status
# 查看节点信息
kubectl get nodes -o wide
# 查看系统 Pod 状态
kubectl get pods -n kube-system
预期输出中,minikube status 应显示 host: Running、kubelet: Running、apiserver: Running。kubectl get nodes 应返回一个 Ready 状态的节点。
常见故障:若
minikube start 失败,检查 Docker Desktop 是否正在运行,以及资源分配是否充足。执行 minikube delete 后重试,或使用 minikube start --alsologtostderr 查看详细日志。
3.4 本地镜像仓库配置
集成测试需要将本地构建的镜像推送到集群可访问的仓库。Minikube 内置了与 Docker daemon 的共享机制,但更推荐配置独立的本地 registry,以模拟生产环境流程。
3.4.1 方案对比
| 方案 | 适用场景 | 镜像拉取方式 | 持久化 |
|---|---|---|---|
| eval $(minikube docker-env) | 快速原型,单机开发 | 直接使用本地 Docker 镜像缓存 | 无,重启后丢失 |
| 本地 Registry (Docker 运行) | 集成测试,多集群共享 | localhost:5000/<image>:<tag> |
可挂载卷持久化 |
| Minikube 内置 Registry Addon | 与 Minikube 深度集成 | registry.kube-system.svc.cluster.local:5000 |
依赖集群存储 |
本课程采用 本地 Registry (Docker 运行) 方案,因为它与 Minikube 解耦,且便于在 CI/CD 流水线中复用。
3.4.2 部署本地 Registry
# 拉取并运行 registry 容器
docker run -d --name local-registry \
-p 5000:5000 \
-v /tmp/registry:/var/lib/registry \
--restart=always \
registry:2
# 验证 registry 是否运行
curl -X GET http://localhost:5000/v2/_catalog
# 构建测试镜像并推送
docker build -t localhost:5000/my-app:test .
docker push localhost:5000/my-app:test
推送成功后,curl http://localhost:5000/v2/_catalog 应返回 {"repositories":["my-app"]}。
3.4.3 配置 Minikube 使用本地 Registry
Minikube 默认无法直接访问宿主机的 localhost:5000。需要将 registry 暴露到 Minikube 网络中:
# 将 registry 暴露为 Minikube 内部服务
kubectl create namespace registry
kubectl run registry-proxy --image=alpine/socat:latest \
--namespace registry \
--port=5000 \
-- sh -c "socat TCP-LISTEN:5000,fork TCP:host.docker.internal:5000"
# 创建 Service 暴露端口
kubectl expose pod registry-proxy --namespace registry \
--port=5000 --target-port=5000 --name=registry-svc
# 验证集群内能否访问
kubectl run test-pod --image=busybox:1.36 -it --rm --restart=Never \
-- wget -qO- http://registry-svc.registry.svc.cluster.local:5000/v2/_catalog
host.docker.internal 说明:在 Docker Desktop 环境中,
host.docker.internal 是宿主机在容器网络中的 DNS 名称。Minikube 节点运行在 Docker 容器内,因此可以通过该地址访问宿主机上运行的 registry 容器。
3.5 环境验证清单
完成所有配置后,执行以下验证步骤,确保环境就绪:
- Docker 运行时:
docker run hello-world输出欢迎信息。 - Minikube 集群:
minikube status全部为 Running。 - kubectl 连通性:
kubectl cluster-info显示 API Server 地址。 - 本地 Registry:
curl localhost:5000/v2/_catalog返回 JSON 列表。 - 集群内拉取:创建 Deployment 使用
registry-svc.registry.svc.cluster.local:5000/my-app:test,Pod 状态为 Running。
集成测试前置条件:后续章节的集成测试将依赖此环境。建议将上述验证步骤写入脚本
verify-local-env.sh,每次开始新测试前执行,确保环境一致性。
3.6 本地开发环境架构图
下图展示了本地开发环境中各组件的交互关系与数据流:
3.7 环境清理与重置
当需要重置环境以进行新的测试时,执行以下清理命令:
# 停止并删除 Minikube 集群
minikube stop
minikube delete
# 停止并删除本地 Registry
docker stop local-registry
docker rm local-registry
# 清理 Docker 缓存(可选)
docker system prune -a --volumes
# 重新启动
minikube start --driver=docker --cpus=4 --memory=8192
docker run -d --name local-registry -p 5000:5000 -v /tmp/registry:/var/lib/registry --restart=always registry:2
数据持久化注意:Registry 的镜像数据存储在
/tmp/registry 目录。若系统重启或清理 /tmp,镜像将丢失。生产级开发环境建议将持久化目录改为 /var/lib/registry 或使用命名卷。