2. 环境准备:Kubernetes集群搭建与Helm v3配置

本章节是后续所有故障域隔离演练与Values参数调优的物理基础。我们将采用轻量级Kubernetes发行版(minikube / k3s)快速搭建本地实验环境,安装Helm v3并完成仓库配置,最后按照故障域隔离原则规划演练命名空间。

2.1 环境选型对比:minikube vs k3s

根据实验资源与目标选择最合适的Kubernetes发行版。下表从关键维度对比两种方案:

对比维度 minikube k3s
资源占用 约 2 GB RAM + 2 vCPU 约 512 MB RAM + 1 vCPU
启动速度 中等(需下载ISO/镜像) 快速(单二进制启动)
多节点支持 支持(通过多profile) 原生支持(server + agent)
CNI插件 默认Calico / Flannel 内置Flannel(可替换)
适用场景 本地开发、CI/CD集成 边缘计算、资源受限环境
Helm兼容性 完全兼容 完全兼容
推荐选择:本课程所有演练均基于 k3s 搭建,因其启动快、资源占用低,适合在笔记本上同时运行多个故障域隔离实验。若你使用 minikube,请确保分配至少 4 GB 内存。

2.2 搭建k3s集群(单节点)

以下步骤在 Ubuntu 22.04 / macOS 上已验证通过。Windows用户建议使用 WSL2 环境。

  1. 安装k3s(使用官方快速安装脚本):
curl -sfL https://get.k3s.io | sh -
# 安装完成后检查节点状态
sudo k3s kubectl get nodes
  1. 配置kubeconfig(Helm需要访问集群):
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
export KUBECONFIG=~/.kube/config
# 验证集群可达
kubectl cluster-info
  1. 验证集群组件:
kubectl get pods -n kube-system
# 应看到 coredns、local-path-provisioner、metrics-server 等处于 Running 状态
注意:k3s 默认使用 containerd 作为容器运行时,而非 Docker。若你后续需要构建镜像,请额外安装 nerdctl 或使用 docker + cri-dockerd 桥接。

2.3 Helm v3安装与配置

Helm v3 已移除 Tiller 组件,架构更简洁、安全。安装步骤如下:

  1. 下载Helm二进制:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 验证版本
helm version --short
# 输出示例:v3.16.0+ge0a5e9c
  1. 添加官方稳定仓库:
helm repo add stable https://charts.helm.sh/stable
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
  1. 验证Helm与集群通信:
helm list -A
# 若返回空列表(无报错),则说明Helm已成功连接集群
关键配置:Helm v3 默认使用当前 kubeconfig 的 context。演练前请确认 kubectl config current-context 指向正确的集群,避免误操作生产环境。

2.4 演练命名空间规划

为模拟多租户故障域隔离,我们按照“业务单元 + 故障域”的二维矩阵规划命名空间。每个命名空间代表一个独立的故障隔离单元。

命名空间规划表:

命名空间名称 业务单元 故障域 用途说明
drill-payment-az1 支付服务 可用区1 模拟支付链路在AZ1的部署
drill-payment-az2 支付服务 可用区2 模拟支付链路在AZ2的灾备
drill-order-az1 订单服务 可用区1 订单服务主集群
drill-order-az2 订单服务 可用区2 订单服务灾备集群
drill-shared-mq 消息中间件 共享域 跨故障域的消息队列
drill-monitoring 监控系统 管理域 Prometheus + Grafana 部署

创建命名空间:

kubectl create ns drill-payment-az1
kubectl create ns drill-payment-az2
kubectl create ns drill-order-az1
kubectl create ns drill-order-az2
kubectl create ns drill-shared-mq
kubectl create ns drill-monitoring

# 验证所有命名空间已创建
kubectl get ns | grep drill-
命名规范说明:前缀 drill- 标识演练资源,便于演练结束后一键清理(kubectl delete ns -l 'name in (drill-payment-az1, ...)')。业务单元与故障域之间用连字符分隔,保持可读性。
命名空间故障域隔离架构 可用区1 (AZ1) 可用区2 (AZ2) 支付服务 drill-payment-az1 订单服务 drill-order-az1 支付服务 drill-payment-az2 订单服务 drill-order-az2 共享消息队列 drill-shared-mq 监控系统 drill-monitoring 业务服务 中间件 监控

2.5 环境验证清单

完成上述步骤后,执行以下验证命令确保环境就绪:

# 1. 集群节点状态
kubectl get nodes -o wide

# 2. Helm版本与仓库
helm version
helm repo list

# 3. 命名空间列表
kubectl get ns | grep drill-

# 4. 测试Helm安装(部署一个测试Chart)
helm install test-nginx bitnami/nginx --namespace drill-monitoring --set service.type=ClusterIP
kubectl get pods -n drill-monitoring
helm uninstall test-nginx -n drill-monitoring
环境就绪标志:所有节点处于 Ready 状态,Helm 能成功安装并卸载测试 Chart,6个演练命名空间均存在且无报错。