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个工作节点的集群。

  1. 安装Kind CLI: 下载并安装Kind二进制文件。
  2. 编写集群配置文件: 定义节点角色与网络参数。
  3. 创建集群: 执行 kind create cluster --config 命令。
  4. 验证节点状态: 使用 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进行应用的生命周期管理。安装步骤如下:

  1. 下载Helm二进制: 从官方GitHub Release获取最新稳定版。
  2. 安装并验证: 将二进制放入PATH,执行 helm version。
  3. 添加官方仓库: 添加稳定仓库以便后续拉取Chart。
  4. 配置自动补全(可选): 提升命令行操作效率。
# 安装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的交互路径:

本地故障域隔离实验环境架构 宿主机(Linux/macOS) Docker 引擎 | Kind CLI / Minikube CLI | Helm CLI | kubectl Kubernetes 集群(Kind/Minikube) 控制平面节点 工作节点-1 工作节点-2 故障域隔离演练应用(Helm Chart部署) Pod副本分布在不同的工作节点上,模拟故障域 说明:Helm CLI通过kubectl与API Server通信,将Chart部署到集群中;Kind/Minikube提供容器化节点环境

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仅监听本地端口,无需额外防火墙配置。