4. Bootstrap集群搭建:使用kind创建管理集群,初始化CAPI Provider

本章是课程实操的起点。我们将使用 kind(Kubernetes in Docker)在本地或CI环境中快速创建一个轻量级管理集群,然后在其上初始化 Cluster API(CAPI)的核心 Provider,为后续的工作负载集群生命周期管理奠定基础。

4.1 架构概览:管理集群与CAPI Provider

在CAPI体系中,管理集群(Management Cluster)是一个承载CAPI Controller和Provider的Kubernetes集群。它不直接运行用户业务,而是负责编排目标集群(工作负载集群)的创建、升级、扩缩容和销毁。本章搭建的kind集群即充当此角色。

核心概念:管理集群通过CRD(Custom Resource Definitions)定义集群状态,CAPI Controller监听这些CRD并调用底层Provider(如AWS、vSphere、Docker)的API来驱动实际基础设施。
CAPI管理集群与Provider架构 CAPI 管理集群与 Provider 架构 管理集群 (kind) CAPI Controller + CRDs Core Provider Infrastructure Provider Bootstrap Provider Provider 职责说明 • Core Provider:提供 Cluster、Machine、MachineSet 等核心 CRD 及控制器。 • Infrastructure Provider:管理底层基础设施(如 Docker、AWS EC2、vSphere VM)。 • Bootstrap Provider:生成节点初始化脚本(如 kubeadm 配置),完成节点加入集群。

4.2 环境准备与工具安装

在开始之前,请确保本地环境满足以下要求:

工具/组件 最低版本 用途
Docker 20.10+ kind 依赖 Docker 运行节点容器
kind v0.20+ 创建本地 Kubernetes 集群
kubectl v1.27+ 与集群交互
clusterctl v1.5+ CAPI 官方 CLI,用于初始化和管理 Provider
版本兼容性提示:clusterctl 版本应与目标 CAPI 版本匹配。建议使用最新稳定版 clusterctl,它内置了兼容性映射表,可自动选择适配的 Provider 版本。

4.3 步骤一:使用kind创建管理集群

kind 通过一个简单的 YAML 配置文件定义集群拓扑。以下配置创建一个单节点控制平面集群,并映射本地端口以便访问。

# kind-cluster.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: capi-management
nodes:
  - role: control-plane
    extraPortMappings:
      - containerPort: 6443
        hostPort: 6443
        protocol: TCP
networking:
  apiServerAddress: "0.0.0.0"
  apiServerPort: 6443

执行创建命令:

kind create cluster --config kind-cluster.yaml

验证集群状态:

kubectl cluster-info --context kind-capi-management
kubectl get nodes
常见问题:如果 kind 创建失败,请检查 Docker 是否运行、端口 6443 是否被占用。在 macOS 上,确保 Docker Desktop 的资源分配(CPU/内存)充足,建议至少 4GB 内存。

4.4 步骤二:初始化CAPI Provider

管理集群就绪后,使用 clusterctl init 命令安装核心 Provider 和基础设施 Provider。本章以 Docker Infrastructure Provider 为例,它允许我们在本地 Docker 环境中创建工作负载集群,非常适合开发和测试。

# 初始化 Core Provider + Docker Infrastructure Provider
clusterctl init --infrastructure docker

该命令会自动执行以下操作:

  1. 下载并应用 Core Provider 的组件(包括 CRD、Controller、Webhook)。
  2. 下载并应用 Docker Infrastructure Provider 的组件。
  3. 等待所有 Pod 进入 Running 状态。

验证初始化结果:

# 查看 Provider 相关的 Pod
kubectl get pods -n capi-system
kubectl get pods -n capi-docker-system

# 查看已安装的 CRD
kubectl get crd | grep cluster.x-k8s.io

4.5 初始化参数与Provider选择

clusterctl init 支持多种参数,用于定制初始化行为:

参数 示例值 说明
--infrastructure docker, aws, vsphere 指定基础设施 Provider,可重复使用以安装多个
--core cluster-api:v1.5.0 指定 Core Provider 版本,默认使用最新稳定版
--bootstrap kubeadm 指定 Bootstrap Provider,默认使用 kubeadm
--config ~/.cluster-api/clusterctl.yaml 指定自定义配置文件,用于覆盖默认 Provider 仓库地址等
生产环境建议:在正式环境中,建议使用 --config 参数指定私有镜像仓库或特定版本,以确保环境一致性和离线部署能力。

4.6 验证管理集群的CAPI就绪状态

初始化完成后,可以通过以下命令全面检查管理集群是否已准备好管理工作负载集群:

# 检查 clusterctl 是否识别到已初始化的 Provider
clusterctl describe management-group

# 列出所有可用的 Infrastructure Provider 模板
clusterctl config repositories

# 查看集群中 CAPI 相关的 API 资源
kubectl api-resources | grep cluster.x-k8s.io

如果一切正常,你将看到类似如下的输出片段:

NAME                              SHORTNAMES   APIVERSION                     NAMESPACED   KIND
clusters                          cluster      cluster.x-k8s.io/v1beta1       true         Cluster
machines                          machine      cluster.x-k8s.io/v1beta1       true         Machine
machinesets                       machineset   cluster.x-k8s.io/v1beta1       true         MachineSet
...

4.7 本章小结与状态确认

至此,我们已经完成了以下关键步骤:

  • 使用 kind 创建了一个名为 capi-management 的本地管理集群。
  • 使用 clusterctl init 安装了 Core Provider 和 Docker Infrastructure Provider。
  • 验证了管理集群中 CAPI 相关的 CRD 和控制器 Pod 正常运行。

这个管理集群现在具备了通过 CAPI 声明式 API 来创建、管理和漂移复测工作负载集群的能力。在下一阶段,我们将基于此管理集群,使用 Docker Infrastructure Provider 创建第一个工作负载集群,并观察其完整的生命周期。