clusternet

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

注意

相关命令

参考链接