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 运行集群节点 官网下载安装
版本兼容性提示: 请确保 kubectl 的次版本号与目标集群版本相差不超过 1。例如,kubectl 1.28 可以管理 1.27 和 1.29 的集群。Helm 3 与所有 Kubernetes 1.16+ 版本兼容。

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 命令都依赖于正确的上下文。建议在终端提示符中显示当前上下文,避免误操作。可以使用 kubectl config set-context --current --namespace=default 重置命名空间。

2.5 多集群上下文管理架构

下图展示了本地多集群环境的整体架构,以及 kubectl 如何通过上下文配置与不同集群的 API Server 进行通信。

多集群上下文管理架构图 开发机 / 工作站 kubectl / Helm / Kustomize ~/.kube/config kubeconfig 上下文 context: prod context: staging context: dev kubectl config Kind 本地集群(Docker 容器) kind-prod API Server :6443 control-plane worker-1 worker-2 kind-staging API Server :6444 control-plane worker-1 kind-dev API Server :6445 操作说明 1. kubectl 读取 ~/.kube/config 2. 根据 context 选择集群 3. 向对应 API Server 发请求 4. 支持快速切换上下文

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 清理无效上下文