Skip to content

Cluster API — 声明式集群管理

什么是 Cluster API

Cluster API(CAPI)将 K8s 集群本身作为 K8s 资源来管理,通过声明式 API 创建、升级、删除集群。

核心概念

Management Cluster(管理集群)
    │ 运行 CAPI 控制器

Workload Cluster(工作集群)
    │ 通过 CAPI 创建和管理

Infrastructure Provider(基础设施提供商)
    ├── AWS(CAPA)
    ├── GCP(CAPG)
    ├── Azure(CAPZ)
    ├── vSphere(CAPV)
    └── Docker(CAPD,测试用)

安装

bash
# 安装 clusterctl
curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.6.0/clusterctl-linux-amd64 -o clusterctl
chmod +x clusterctl && mv clusterctl /usr/local/bin/

# 初始化(以 AWS 为例)
export AWS_REGION=us-east-1
export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx

clusterctl init --infrastructure aws

# 查看已安装的 Provider
clusterctl describe providers

创建集群

bash
# 生成集群配置
clusterctl generate cluster my-cluster \
  --kubernetes-version v1.29.0 \
  --control-plane-machine-count=3 \
  --worker-machine-count=3 \
  --infrastructure aws \
  > my-cluster.yaml

# 应用配置
kubectl apply -f my-cluster.yaml

# 查看集群状态
kubectl get cluster my-cluster
kubectl get machines -l cluster.x-k8s.io/cluster-name=my-cluster

# 获取 kubeconfig
clusterctl get kubeconfig my-cluster > my-cluster.kubeconfig
kubectl --kubeconfig=my-cluster.kubeconfig get nodes

集群升级

bash
# 升级控制平面
kubectl patch kubeadmcontrolplane my-cluster-control-plane \
  --type merge \
  -p '{"spec":{"version":"v1.30.0"}}'

# 升级工作节点
kubectl patch machinedeployment my-cluster-md-0 \
  --type merge \
  -p '{"spec":{"template":{"spec":{"version":"v1.30.0"}}}}'

ClusterClass(模板化)

yaml
# 定义集群模板
apiVersion: cluster.x-k8s.io/v1beta1
kind: ClusterClass
metadata:
  name: quick-start
spec:
  controlPlane:
    ref:
      apiVersion: controlplane.cluster.x-k8s.io/v1beta1
      kind: KubeadmControlPlaneTemplate
      name: quick-start-control-plane
  workers:
    machineDeployments:
    - class: default-worker
      template:
        ref:
          apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
          kind: AWSMachineTemplate
          name: quick-start-worker

---
# 使用模板创建集群
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
  name: my-cluster
spec:
  topology:
    class: quick-start
    version: v1.29.0
    controlPlane:
      replicas: 3
    workers:
      machineDeployments:
      - class: default-worker
        name: md-0
        replicas: 5

本站内容由 褚成志 整理编写,仅供学习参考