2. 环境准备:Kubernetes 集群搭建、Helm v3 安装与配置、kubectl 工具配置
本章为《Helm 应用交付故障域隔离演练的平台门户看板集成》课程奠定基础运行环境。一个稳定、可复现的 Kubernetes 集群是演练故障域隔离与 Helm 编排的前提。本节将指导你完成从集群搭建到 Helm v3 及 kubectl 工具链的完整配置,确保后续章节的演练操作具备一致的基础设施上下文。
2.1 环境概览与版本依赖
本课程推荐的软件版本组合经过兼容性验证,能够保障 Helm 应用交付与故障域隔离演练的稳定性。请严格按照下表准备环境,避免因版本偏差导致未知错误。
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| Kubernetes | v1.28.x | 支持稳定的 API 版本,与 Helm v3 完全兼容 |
| Helm | v3.14.x | 最新稳定版,移除 Tiller,原生支持 OCI 仓库 |
| kubectl | v1.28.x | 版本与集群版本偏差建议在 ±1 个小版本内 |
| 操作系统 | Ubuntu 22.04 LTS / CentOS 7.9+ | Linux 环境,支持容器运行时 |
| 容器运行时 | containerd 1.7.x | Kubernetes 默认推荐的 CRI 实现 |
版本对齐提示: 若使用其他 Kubernetes 发行版(如 K3s、MicroK8s),请确保其 API 版本与 Helm v3 兼容。本课程所有操作均基于标准 Kubernetes API,不依赖特定发行版扩展。
2.2 Kubernetes 集群搭建(单节点控制面)
为降低资源开销并聚焦于 Helm 应用交付与故障域隔离演练,本课程采用 kubeadm 工具搭建单节点控制面集群。该方案既能模拟生产环境的核心组件,又便于快速重置与调试。
2.2.1 前置条件检查
- 主机至少 2 核 CPU、4 GB 内存、20 GB 可用磁盘空间。
- 关闭 swap:
sudo swapoff -a并注释/etc/fstab中的 swap 条目。 - 加载内核模块:
overlay和br_netfilter。 - 设置 sysctl 参数:
net.bridge.bridge-nf-call-iptables = 1。
2.2.2 安装容器运行时(containerd)
# 安装 containerd
sudo apt-get update && sudo apt-get install -y containerd
# 生成默认配置并启用 SystemdCgroup
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 重启 containerd
sudo systemctl restart containerd
sudo systemctl enable containerd
2.2.3 安装 kubeadm、kubelet、kubectl
# 添加 Kubernetes 官方仓库
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 安装指定版本
sudo apt-get update
sudo apt-get install -y kubelet=1.28.10-* kubeadm=1.28.10-* kubectl=1.28.10-*
sudo apt-mark hold kubelet kubeadm kubectl
2.2.4 初始化集群
# 初始化控制面节点
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 配置 kubectl 访问权限
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 安装 Flannel 网络插件(CNI)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
验证集群状态: 执行
kubectl get nodes,若输出显示 Ready 状态,则集群搭建成功。单节点集群默认会容忍控制面节点上的 Pod 调度,无需额外去除污点。
2.3 Helm v3 安装与配置
Helm v3 移除了 Tiller 组件,采用客户端直接与 Kubernetes API 交互的模式,安全性更高且部署更简洁。本课程所有 Helm 操作均基于 v3 语法。
2.3.1 安装 Helm v3
# 方式一:使用官方安装脚本(推荐)
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 方式二:从 GitHub Release 下载二进制
wget https://get.helm.sh/helm-v3.14.4-linux-amd64.tar.gz
tar -zxvf helm-v3.14.4-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
# 验证安装
helm version --short
2.3.2 配置 Helm 仓库
添加常用的 Chart 仓库,用于后续演练中的应用部署。
# 添加官方稳定仓库
helm repo add stable https://charts.helm.sh/stable
# 添加 Bitnami 仓库(常用应用)
helm repo add bitnami https://charts.bitnami.com/bitnami
# 更新仓库缓存
helm repo update
# 查看已添加的仓库
helm repo list
2.3.3 验证 Helm 与集群的连通性
# 测试 Helm 能否正常访问集群
helm list -A
# 若输出为空(无报错),则说明 Helm 已正确配置
# 若出现 "connection refused" 错误,请检查 kubeconfig 文件路径
常见错误: 若执行
helm list 时提示 Kubernetes cluster unreachable,请确认 KUBECONFIG 环境变量是否指向正确的 kubeconfig 文件,或执行 export KUBECONFIG=$HOME/.kube/config。
2.4 kubectl 工具配置
kubectl 是 Kubernetes 的命令行工具,用于与集群控制面通信。本课程中,kubectl 将用于查看资源状态、调试 Pod 以及验证 Helm 部署结果。
2.4.1 安装 kubectl
若在 2.2.3 节中已通过 kubeadm 安装,则 kubectl 已就绪。若需单独安装:
# 下载指定版本
curl -LO "https://dl.k8s.io/release/v1.28.10/bin/linux/amd64/kubectl"
# 赋予执行权限并移动到 PATH
chmod +x kubectl
sudo mv kubectl /usr/local/bin/kubectl
# 验证版本
kubectl version --client
2.4.2 配置 kubeconfig 与上下文
# 默认 kubeconfig 路径
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查看当前上下文
kubectl config current-context
# 设置默认命名空间(可选)
kubectl config set-context --current --namespace=default
2.4.3 启用 kubectl 自动补全
# Bash 补全
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
# Zsh 补全
source <(kubectl completion zsh)
echo "source <(kubectl completion zsh)" >> ~/.zshrc
2.5 环境验证清单
完成上述步骤后,请执行以下命令进行全链路验证,确保所有组件正常工作。
| 验证项 | 命令 | 预期输出 |
|---|---|---|
| 集群节点状态 | kubectl get nodes |
节点状态为 Ready |
| 核心组件状态 | kubectl get pods -n kube-system |
所有 Pod 处于 Running 或 Completed |
| Helm 版本 | helm version |
输出 v3.x.x 版本号 |
| Helm 仓库连通性 | helm repo list |
显示已添加的仓库列表 |
| kubectl 连通性 | kubectl cluster-info |
显示集群控制面地址 |
2.6 故障域隔离演练的环境预配置
为后续章节的故障域隔离演练做准备,建议在集群中预先创建多个命名空间,模拟不同的故障域(如可用区、机房、节点组)。
# 创建三个故障域命名空间
kubectl create namespace zone-a
kubectl create namespace zone-b
kubectl create namespace zone-c
# 为每个命名空间打上故障域标签
kubectl label namespace zone-a failure-domain=zone-a
kubectl label namespace zone-b failure-domain=zone-b
kubectl label namespace zone-c failure-domain=zone-c
# 验证命名空间与标签
kubectl get namespace --show-labels | grep zone-
演练设计思路: 在后续章节中,我们将通过 Helm Chart 将应用分别部署到
zone-a、zone-b、zone-c 命名空间,模拟跨故障域的应用交付。当某个命名空间内的 Pod 发生故障时,通过 Helm 的升级与回滚机制验证故障域隔离效果。