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 调度,无需额外去除污点。
Kubernetes 集群搭建流程(kubeadm) 前置检查 安装 containerd 安装 kubeadm/kubelet/kubectl kubeadm init 配置 kubectl 安装 CNI 插件 验证集群状态 说明:单节点控制面集群适用于开发与演练环境。生产环境建议部署高可用控制面。

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 显示集群控制面地址
Helm & kubectl 工具链配置关系 Kubernetes API Server kubectl Helm v3 kubectl 用于直接管理集群资源(Pod、Service、Namespace 等) Helm v3 通过 Chart 封装应用定义,调用 Kubernetes API 完成部署与生命周期管理

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 的升级与回滚机制验证故障域隔离效果。

2.7 本章小结