2. 环境准备:Kubernetes集群搭建(Minikube/Kind)、Helm CLI安装与配置、kubectl配置
本章聚焦于搭建一套可用于故障域隔离演练的本地实验环境。我们将依次完成Kubernetes集群的创建、Helm CLI的安装与配置,以及kubectl的本地化设置。所有操作均以可复现、可清理为原则,确保后续演练步骤能在隔离的沙箱中安全执行。
2.1 环境概览与工具选型
本地Kubernetes环境推荐使用Minikube或Kind(Kubernetes in Docker)。两者均支持单节点或多节点集群,且能快速创建/销毁,适合故障注入与恢复测试。下表对比了两种方案的适用场景:
| 特性 | Minikube | Kind |
|---|---|---|
| 底层驱动 | 虚拟机(VirtualBox/HyperKit)或Docker | Docker容器 |
| 启动速度 | 中等(需下载ISO) | 快(秒级) |
| 多节点支持 | 支持(需指定参数) | 原生支持(通过配置文件) |
| 资源占用 | 较高(VM开销) | 较低(容器级) |
| 故障注入友好度 | 可模拟节点故障 | 可模拟Pod/容器故障 |
| 推荐场景 | 需完整VM隔离的演练 | CI/CD流水线、快速迭代 |
选型建议: 本课程后续演练将同时兼容Minikube与Kind。若宿主机内存小于8GB,优先选择Kind以降低资源压力。
2.2 使用Kind搭建多节点集群
Kind通过Docker容器模拟Kubernetes节点,天然支持多节点拓扑,适合模拟故障域隔离场景。以下步骤将创建一个包含1个控制平面节点和2个工作节点的集群。
- 安装Kind CLI: 下载并安装Kind二进制文件。
- 编写集群配置文件: 定义节点角色与网络参数。
- 创建集群: 执行
kind create cluster --config命令。 - 验证节点状态: 使用
kubectl get nodes确认所有节点处于Ready状态。
# 安装Kind(Linux/macOS)
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-config.yaml)
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
# 创建集群
kind create cluster --name fault-domain-lab --config kind-config.yaml
# 验证
kubectl cluster-info --context kind-fault-domain-lab
kubectl get nodes -o wide
关键输出: 执行后应看到三个节点,其中
control-plane 节点状态为 Ready,两个 worker 节点状态也为 Ready。每个节点对应一个Docker容器,可通过 docker ps 查看。
2.3 使用Minikube搭建单节点集群(备选方案)
若选择Minikube,建议启用多节点功能以模拟故障域。以下命令启动一个包含2个节点的集群:
# 安装Minikube(Linux/macOS)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 启动多节点集群
minikube start --nodes 2 --cpus 2 --memory 4096 --driver=docker
# 验证
kubectl get nodes
注意: Minikube多节点模式需要Docker驱动,且每个节点会占用独立的Docker容器资源。若宿主机内存不足,建议使用Kind替代。
2.4 Helm CLI安装与配置
Helm是Kubernetes的包管理工具,用于部署和管理Chart。故障域隔离演练中,我们将使用Helm进行应用的生命周期管理。安装步骤如下:
- 下载Helm二进制: 从官方GitHub Release获取最新稳定版。
- 安装并验证: 将二进制放入PATH,执行
helm version。 - 添加官方仓库: 添加稳定仓库以便后续拉取Chart。
- 配置自动补全(可选): 提升命令行操作效率。
# 安装Helm(Linux/macOS)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 验证安装
helm version --short
# 添加稳定仓库
helm repo add stable https://charts.helm.sh/stable
helm repo update
# 配置bash自动补全(可选)
source <(helm completion bash)
echo "source <(helm completion bash)" >> ~/.bashrc
版本要求: 本课程要求Helm版本 ≥ 3.10.0,以支持OCI注册表和最新的故障注入Chart特性。执行
helm version 确认版本号。
2.5 kubectl配置与上下文管理
kubectl是操作Kubernetes集群的命令行工具。配置的核心是管理多个集群的上下文(context),以便在演练中快速切换环境。
| 配置项 | 说明 | 示例命令 |
|---|---|---|
| 当前上下文 | 当前操作的集群 | kubectl config current-context |
| 查看所有上下文 | 列出所有已配置的集群 | kubectl config get-contexts |
| 切换上下文 | 切换到指定集群 | kubectl config use-context kind-fault-domain-lab |
| 设置默认命名空间 | 避免每次指定命名空间 | kubectl config set-context --current --namespace=chaos |
# 查看当前kubectl配置
kubectl config view
# 设置默认上下文为Kind集群
kubectl config use-context kind-fault-domain-lab
# 验证连接
kubectl cluster-info
# 设置默认命名空间为chaos(后续演练使用)
kubectl config set-context --current --namespace=chaos
配置验证: 执行
kubectl get pods -A 应返回集群中所有命名空间的Pod列表,无报错即表示kubectl与集群通信正常。
2.6 环境准备总览图
下图展示了本地实验环境的整体架构,包括工具链、集群节点关系以及Helm/kubectl的交互路径:
2.7 环境验证清单
完成上述步骤后,请逐项确认以下检查点,确保环境就绪:
- 集群节点:
kubectl get nodes输出至少1个控制平面节点和1个工作节点,状态均为Ready。 - Helm版本:
helm version显示版本号 ≥ 3.10.0。 - 仓库可用:
helm repo list显示已添加的仓库,且helm search repo stable能返回结果。 - kubectl上下文:
kubectl config current-context指向刚创建的集群。 - 命名空间: 默认命名空间已设置为
chaos(或后续演练指定的命名空间)。
快速验证脚本: 将以下命令保存为
check-env.sh,一键验证环境完整性:kubectl get nodes && helm version --short && kubectl config current-context
2.8 常见问题与避坑指南
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Kind创建集群超时 | Docker镜像拉取慢或网络代理未配置 | 配置Docker代理,或使用 kind create cluster --retain 后手动拉取镜像 |
| kubectl无法连接集群 | KUBECONFIG环境变量未指向正确文件 | 执行 export KUBECONFIG=~/.kube/config 或使用 kind export kubeconfig |
| Helm命令报错“no repositories” | 未添加任何Chart仓库 | 执行 helm repo add stable https://charts.helm.sh/stable && helm repo update |
| Minikube启动失败 | Docker驱动未安装或资源不足 | 检查Docker运行状态,增加 --cpus 和 --memory 参数 |
安全提示: 本环境仅用于本地演练,请勿将集群暴露到公网。默认情况下,Kind和Minikube仅监听本地端口,无需额外防火墙配置。