Clusternet 多集群管理
Clusternet 把多个 Kubernetes 集群注册到一个 parent 集群,通过统一的 API 下发 Deployment、Service、Helm Chart 和自定义资源。它支持按集群、按标签和按权重分发,适合多集群应用发布和联邦管理。
核心概念:parent cluster、child cluster、ClusterRegistrationRequest、ResourceTemplate、Subscription 和 HelmChart。
安装 parent 集群:
helm repo add clusternet https://charts.clusternet.io
helm install clusternet clusternet/clusternet \
--namespace clusternet-system --create-namespace
kubectl -n clusternet-system get pods
在 child 集群安装 agent 并获取 token:
helm install clusternet-agent clusternet/clusternet-agent \
--namespace clusternet-system --create-namespace \
--set parentURL=https://parent.example.com \
--set clusterName=child-a
在 parent 集群批准注册:
kubectl get clusterregistrationrequests
kubectl patch clusterregistrationrequest <name> \
--type merge -p '{"spec":{"clusterName":"child-a"}}'
kubectl get clusters
创建 ResourceTemplate:
kubectl apply -f - <<'EOF'
apiVersion: apps.clusternet.io/v1alpha1
kind: ResourceTemplate
metadata:
name: demo-deploy
spec:
resources:
- apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
namespace: demo
spec:
replicas: 2
selector:
matchLabels: {app: demo}
template:
metadata:
labels: {app: demo}
spec:
containers:
- name: app
image: nginx:1.27
EOF
创建 Subscription 分发到指定集群:
kubectl apply -f - <<'EOF'
apiVersion: apps.clusternet.io/v1alpha1
kind: Subscription
metadata:
name: demo-sub
namespace: demo
spec:
subscribers:
- clusterAffinity:
matchLabels:
clusters.clusternet.io/cluster-id: <CHILD_ID>
feeds:
- apiVersion: apps.clusternet.io/v1alpha1
kind: ResourceTemplate
name: demo-deploy
EOF
查看分发结果:
kubectl get subscriptions -A
kubectl describe subscription demo-sub -n demo
kubectl get deployments -A --context child-a
kubectl get clusters — 查看已注册集群kubectl get subscriptions -A — 查看分发kubectl get resourcetemplates — 查看资源模板kubectl describe clusterregistrationrequest — 查看注册状态helm — 安装 parent/agent