2. 环境准备:Kubernetes 集群搭建(Minikube/Kind)与 kubectl 配置
在开始 etcd 压测与 Istio 访问日志采集之前,首先需要搭建一个本地的 Kubernetes 实验环境。本章将介绍两种主流本地集群方案:Minikube 和 Kind,并完成 kubectl 命令行工具的配置与验证。
选择建议:Minikube 适合需要完整虚拟机隔离、支持多种 CNI 插件的场景;Kind 基于 Docker 容器运行节点,启动速度快、资源占用低,更适合 CI/CD 流水线或快速原型验证。本课程后续实验将基于 Kind 集群进行。
2.1 环境依赖检查
在搭建集群之前,请确保宿主机满足以下最低要求:
| 依赖项 | 最低版本 | 验证命令 |
|---|---|---|
| Docker | 20.10+ | docker --version |
| kubectl | 1.28+ | kubectl version --client |
| 操作系统 | Linux / macOS / Windows (WSL2) | uname -a |
| CPU / 内存 | 2 核 / 4 GB | nproc && free -h |
注意:如果使用 Minikube,建议分配至少 4 GB 内存和 2 个 CPU 核心;Kind 由于直接运行在 Docker 容器中,资源开销相对更低,但同样建议保留 2 GB 以上可用内存。
2.2 方案一:使用 Kind 搭建集群
Kind(Kubernetes in Docker)是云原生社区广泛使用的本地集群工具。以下步骤将创建一个包含 1 个控制平面节点和 2 个工作节点的集群。
2.2.1 安装 Kind
# Linux / macOS (使用 brew)
brew install 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.2.2 创建集群配置文件
创建一个 kind-config.yaml 文件,定义集群拓扑:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30080
hostPort: 30080
protocol: TCP
- role: worker
- role: worker
2.2.3 启动集群
kind create cluster --config kind-config.yaml --name etcd-sandbox
# 等待约 2-3 分钟,输出如下:
# Creating cluster "etcd-sandbox" ...
# ✓ Ensuring node image (kindest/node:v1.28.0) 🖼
# ✓ Preparing nodes 📦 📦 📦
# ✓ Writing configuration 📜
# ✓ Starting control-plane 🕹️
# ✓ Installing CNI 🔌
# ✓ Installing StorageClass 💾
# Set kubectl context to "kind-etcd-sandbox"
2.3 方案二:使用 Minikube 搭建集群
如果偏好虚拟机隔离或需要测试特定 CNI 插件,可以选择 Minikube。
2.3.1 安装 Minikube
# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# macOS
brew install minikube
# 验证
minikube version
2.3.2 启动集群
minikube start \
--cpus=2 \
--memory=4096 \
--kubernetes-version=v1.28.0 \
--driver=docker \
--profile=etcd-sandbox
# 等待镜像拉取和集群初始化完成
两种方案对比:
- Kind:启动快(约 2 分钟),资源占用低,适合 CI/CD 和快速迭代。
- Minikube:提供完整 VM 隔离,支持更多驱动(VirtualBox、HyperKit、KVM),适合需要模拟真实节点行为的场景。
2.4 kubectl 配置与验证
无论使用哪种集群方案,kubectl 都是与集群交互的核心工具。以下步骤确保 kubectl 正确配置并连接到目标集群。
2.4.1 安装 kubectl
# Linux (使用 curl)
curl -LO "https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# macOS
brew install kubectl
# 验证客户端版本
kubectl version --client
2.4.2 配置 kubeconfig
集群创建后,工具会自动更新 kubeconfig 文件(默认路径 ~/.kube/config)。手动检查当前上下文:
# 查看当前上下文
kubectl config current-context
# 列出所有上下文
kubectl config get-contexts
# 切换到指定上下文(如需要)
kubectl config use-context kind-etcd-sandbox
2.4.3 验证集群连通性
# 检查集群节点状态
kubectl get nodes
# 预期输出(Kind 示例):
# NAME STATUS ROLES AGE VERSION
# etcd-sandbox-control-plane Ready control-plane 5m v1.28.0
# etcd-sandbox-worker Ready <none> 5m v1.28.0
# etcd-sandbox-worker2 Ready <none> 5m v1.28.0
# 检查系统 Pod 状态
kubectl get pods -n kube-system
排障提示:如果
1. Docker 服务是否正常运行。
2. 集群是否已启动(
3. kubeconfig 中的 server 地址是否正确(
kubectl get nodes 返回 Unable to connect to the server,请检查:1. Docker 服务是否正常运行。
2. 集群是否已启动(
kind get clusters 或 minikube status)。3. kubeconfig 中的 server 地址是否正确(
kubectl config view)。
2.5 集群拓扑与组件关系
下图展示了 Kind 集群的内部组件关系,以及 kubectl 如何通过 API Server 与集群交互:
2.6 环境验证清单
完成集群搭建后,请逐项确认以下环境就绪状态:
| 检查项 | 验证方法 | 预期结果 |
|---|---|---|
| 集群节点就绪 | kubectl get nodes |
所有节点状态为 Ready |
| kube-system Pod 健康 | kubectl get pods -n kube-system |
所有 Pod 状态为 Running |
| kubectl 版本匹配 | kubectl version |
客户端与服务端版本差异在 ±1 小版本内 |
| 集群内部 DNS 可用 | kubectl run test --image=busybox -- nslookup kubernetes.default.svc.cluster.local |
返回正确的 ClusterIP 地址 |
| 存储类已配置 | kubectl get storageclass |
至少存在一个默认 StorageClass(如 standard) |