4. 环境准备:安装 kind、kubectl、clusterctl、Docker,配置本地开发集群

在开始使用 Cluster API 构建多租户控制面之前,必须搭建一套可复现的本地开发环境。本章将指导你完成所有核心工具的安装与验证,并最终启动一个本地 kind 集群作为 Cluster API 的管理集群。

4.1 工具链概览

本地开发环境由四个核心组件构成,它们各自承担不同的职责:

工具 版本要求 核心作用 安装方式
Docker ≥ 24.0 容器运行时,为 kind 提供节点容器 官方脚本 / 包管理器
kind ≥ 0.20 在 Docker 容器中运行本地 Kubernetes 集群 二进制下载 / go install
kubectl 与目标集群版本偏差 ≤ 1 个 minor 与 Kubernetes API 交互的命令行工具 二进制下载 / 包管理器
clusterctl ≥ 1.6 Cluster API 生命周期管理 CLI 二进制下载 / 官方脚本
版本对齐提示: 建议所有工具保持最新稳定版。clusterctl 1.6+ 对多租户特性(如跨命名空间 ClusterClass)有更好的支持。

4.2 安装步骤

4.2.1 Docker

kind 依赖 Docker 来运行节点容器。如果你尚未安装 Docker,请执行以下命令(以 Ubuntu 为例):

# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 设置仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 验证安装
sudo docker run hello-world
权限配置: 如果不想每次使用 Docker 都加 sudo,请将当前用户加入 docker 组:sudo usermod -aG docker $USER,然后重新登录。

4.2.2 kind

kind(Kubernetes IN Docker)是本地集群的核心。推荐使用二进制安装:

# 下载最新版 kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.23.0/kind-linux-amd64

# 赋予执行权限并移动到 PATH
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

# 验证版本
kind version

4.2.3 kubectl

kubectl 用于与集群交互。安装方式如下:

# 下载最新稳定版
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

# 赋予执行权限并移动
chmod +x kubectl
sudo mv kubectl /usr/local/bin/kubectl

# 验证版本
kubectl version --client

4.2.4 clusterctl

clusterctl 是 Cluster API 的官方 CLI。安装命令:

# 使用官方安装脚本
curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.7.3/clusterctl-linux-amd64 -o clusterctl

# 赋予执行权限并移动
chmod +x clusterctl
sudo mv clusterctl /usr/local/bin/clusterctl

# 验证版本
clusterctl version

4.3 配置本地开发集群

所有工具安装完成后,下一步是创建一个 kind 集群,它将作为 Cluster API 的 管理集群(Management Cluster)。

4.3.1 创建 kind 配置文件

为了支持 Cluster API 的多租户场景,建议在创建集群时暴露额外的端口映射,以便后续访问工作负载集群的 API Server。创建 kind-config.yaml:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: capi-mgmt-cluster
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30443
    hostPort: 30443
    protocol: TCP
  - containerPort: 30444
    hostPort: 30444
    protocol: TCP
- role: worker

4.3.2 启动集群

kind create cluster --config kind-config.yaml

# 验证集群状态
kubectl cluster-info --context kind-capi-mgmt-cluster
kubectl get nodes

4.3.3 验证 clusterctl 与集群的连通性

# 检查 clusterctl 能否识别当前集群
clusterctl config repositories

# 如果看到 provider 列表,说明环境准备成功
环境就绪检查清单:
  • docker info — Docker 守护进程运行中
  • kind get clusters — 显示 capi-mgmt-cluster
  • kubectl get nodes — 至少 1 个 Ready 节点
  • clusterctl version — 输出版本号无报错

4.4 环境架构示意

下图展示了本地开发环境中各组件之间的交互关系:

本地开发环境组件交互架构 主机操作系统 Docker 引擎 容器运行时 kind 集群 (capi-mgmt-cluster) 控制面节点 kube-apiserver etcd 工作节点 Cluster API Pods core-provider 端口映射: 30443 → 30443, 30444 → 30444 CLI 工具层 kubectl clusterctl kind docker

4.5 常见问题与避坑

  • Docker 未启动: 执行 kind create cluster 时报错 Cannot connect to the Docker daemon。请先启动 Docker:sudo systemctl start docker。
  • 端口冲突: 如果本地已占用 30443 或 30444 端口,kind 创建会失败。修改 kind-config.yaml 中的 hostPort 为其他值。
  • kubectl 版本偏差: 如果 kubectl 版本与 kind 集群的 Kubernetes 版本偏差超过 1 个 minor 版本,部分 API 调用可能失败。建议保持 kubectl 为最新稳定版。
  • clusterctl 初始化失败: 如果 clusterctl init 报错 failed to get cluster,请确认当前 kubectl context 指向正确的 kind 集群:kubectl config use-context kind-capi-mgmt-cluster。

4.6 环境验证总结

完成上述步骤后,你的本地环境应满足以下条件:

验证项 预期结果 验证命令
Docker 运行中 显示 Docker 版本和运行状态 docker info
kind 集群存在 输出 capi-mgmt-cluster kind get clusters
kubectl 可访问集群 显示 2 个 Ready 节点 kubectl get nodes
clusterctl 可用 输出 provider 仓库列表 clusterctl config repositories