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