2. 环境准备:安装 kubectl、helm、kind、kustomize 等工具,配置多集群上下文
在开始多集群版本漂移校准项目之前,需要搭建一套完整的本地开发与测试环境。本章将指导你完成核心命令行工具的安装、本地 Kubernetes 集群的创建,以及多集群上下文的配置。这些工具是后续所有操作的基础,请确保每一步都正确执行。
2.1 核心工具清单与版本要求
下表列出了本课程所需的核心工具及其推荐版本。建议使用包管理器(如 Homebrew、Chocolatey 或 apt)进行安装,以简化版本管理和更新。
| 工具名称 | 推荐版本 | 用途说明 | 安装方式示例 |
|---|---|---|---|
| kubectl | ≥ 1.28 | Kubernetes 集群命令行交互工具 | brew install kubectl |
| Helm | ≥ 3.14 | Kubernetes 包管理器,用于部署复杂应用 | brew install helm |
| Kind | ≥ 0.20 | 本地快速创建多节点 Kubernetes 集群(基于 Docker) | brew install kind |
| Kustomize | ≥ 5.3 | 原生 Kubernetes 配置管理工具,支持 overlay 与 patch | brew install kustomize |
| Docker Desktop | ≥ 4.25 | 容器运行时,Kind 依赖 Docker 运行集群节点 | 官网下载安装 |
2.2 安装步骤详解
2.2.1 安装 kubectl
kubectl 是操作 Kubernetes 集群的核心工具。以下是在 macOS/Linux 环境下的安装命令:
# 下载最新稳定版 kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
# 赋予执行权限并移动到 PATH
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
# 验证安装
kubectl version --client
2.2.2 安装 Helm
Helm 用于管理 Kubernetes 应用的 Chart 包,在版本漂移校准中用于部署校准 Agent 和 Dashboard。
# 使用 Homebrew 安装
brew install helm
# 验证安装
helm version
# 添加常用仓库(后续会用到)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
2.2.3 安装 Kind
Kind(Kubernetes in Docker)可以在本地快速创建多集群环境,非常适合本课程的实验场景。
# 使用 Homebrew 安装
brew install kind
# 验证安装
kind version
# 检查 Docker 是否运行
docker info
2.2.4 安装 Kustomize
Kustomize 已内置于 kubectl 中(kubectl kustomize),但建议安装独立版本以获得更完整的特性支持。
# 使用 Homebrew 安装
brew install kustomize
# 验证安装
kustomize version
2.3 创建本地多集群环境
我们将使用 Kind 创建三个独立的 Kubernetes 集群,分别模拟生产集群、预发集群和开发集群。这是后续演示版本漂移校准的核心实验环境。
2.3.1 集群规划
| 集群名称 | 角色 | API Server 端口 | 节点数量 |
|---|---|---|---|
| kind-prod | 生产集群 | 6443 | 3(1 control-plane + 2 worker) |
| kind-staging | 预发集群 | 6444 | 2(1 control-plane + 1 worker) |
| kind-dev | 开发集群 | 6445 | 1(1 control-plane) |
2.3.2 创建 Kind 配置文件
为每个集群创建独立的配置文件,确保端口不冲突。以下是生产集群的配置示例:
# kind-prod-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: kind-prod
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 6443
hostPort: 6443
- role: worker
- role: worker
2.3.3 批量创建集群
# 创建生产集群
kind create cluster --config kind-prod-config.yaml
# 创建预发集群(使用不同端口)
kind create cluster --name kind-staging --config kind-staging-config.yaml
# 创建开发集群
kind create cluster --name kind-dev --config kind-dev-config.yaml
# 查看所有集群
kind get clusters
kind get clusters 后,应看到如下结果:
kind-dev
kind-prod
kind-staging
2.4 配置多集群上下文
多集群上下文管理是版本漂移校准项目的基础。我们需要为每个集群设置清晰的上下文名称,并能够快速切换。
2.4.1 查看当前上下文
# 查看所有上下文
kubectl config get-contexts
# 查看当前使用的上下文
kubectl config current-context
2.4.2 重命名上下文(推荐)
Kind 默认生成的上下文名称格式为 kind-{cluster-name},建议重命名为更简洁的名称:
# 重命名上下文
kubectl config rename-context kind-kind-prod prod
kubectl config rename-context kind-kind-staging staging
kubectl config rename-context kind-kind-dev dev
# 验证重命名结果
kubectl config get-contexts
2.4.3 设置默认命名空间
为每个上下文设置默认命名空间,避免每次操作都指定 -n 参数:
# 为生产集群设置默认命名空间
kubectl config set-context prod --namespace=production
# 为预发集群设置默认命名空间
kubectl config set-context staging --namespace=staging
# 为开发集群设置默认命名空间
kubectl config set-context dev --namespace=development
2.4.4 快速切换上下文
# 切换到生产集群
kubectl config use-context prod
# 切换到预发集群
kubectl config use-context staging
# 切换到开发集群
kubectl config use-context dev
kubectl config set-context --current --namespace=default 重置命名空间。
2.5 多集群上下文管理架构
下图展示了本地多集群环境的整体架构,以及 kubectl 如何通过上下文配置与不同集群的 API Server 进行通信。
2.6 验证环境就绪
完成上述步骤后,执行以下命令验证整个环境是否准备就绪:
# 1. 验证所有集群节点状态
kubectl --context prod get nodes
kubectl --context staging get nodes
kubectl --context dev get nodes
# 2. 验证 Helm 仓库
helm repo list
# 3. 验证 Kustomize 版本
kustomize version
# 4. 验证上下文切换
kubectl config use-context prod
kubectl config current-context # 应输出 prod
- 每个集群的
get nodes返回的节点状态均为Ready - Helm 仓库列表包含 bitnami 等常用仓库
- Kustomize 版本 ≥ 5.3
- 上下文切换后,
current-context显示正确的集群名称
2.7 常见问题与排错
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
kind create cluster 失败 |
Docker 未运行或资源不足 | 启动 Docker Desktop,检查内存分配(建议 ≥ 4GB) |
kubectl get nodes 连接超时 |
上下文配置错误或 API Server 未启动 | 执行 kubectl config view 检查 server 地址和端口 |
| 端口冲突(6443 被占用) | 已有 Kind 集群或其它服务占用端口 | 修改 Kind 配置中的 hostPort 为其他端口 |
| 上下文名称混乱 | 多次创建集群导致上下文重复 | 使用 kubectl config delete-context 清理无效上下文 |