将一个已有的集群A(host集群或者是单集群)作为 member 集群纳管到一个新的 host 集群B下,需要保留原集群A中的 账户、企业空间、权限控制数据,具体操作如下:
1. 创建好新的 host 集群B
https://kubesphere.com.cn/docs/multicluster-management/enable-multicluster/agent-connection/#%E5%87%86%E5%A4%87-host-%E9%9B%86%E7%BE%A4
2. 导出集群A中的数据
导出集群A中的账户数据
kubectl get users -o yaml > users.yaml
按需导出集群A中的企业空间
kubectl get workspacetemplates > workspacetemplates.yaml
导出集群A中的权限控制控制数据
kubectl get globalroles -o yaml > globalroles.yaml
kubectl get globalrolebindings -o yaml > globalrolebindings.yaml
# 以下资源可选择性导出
# 导出指定 workspace 下的权限控制数据 kubectl get workspaceroles -l kubesphere.io/workspace=<workspace>
kubectl get workspaceroles -o yaml > workspaceroles.yaml
kubectl get workspacerolebindings -o yaml > workspacerolebindings.yaml
3. 将集群A纳管至集群B
将集群A中的 namespace 与 workspace 解绑
kubectl label ns <namespace> kubesphere.io/workspace- && kubectl patch ns <namespace> -p '{"metadata":{"ownerReferences":[]}}' --type=merge
删除集群A中的 workspace
风险提示:执行此步骤之前必须将 namespace 与 workspace 进行解绑,否则删除 workspace 时会关联删除掉未解绑的 namespace
kubectl delete workspacetemplate --all
将集群A纳管至集群B
https://kubesphere.com.cn/docs/multicluster-management/enable-multicluster/agent-connection/#%E5%87%86%E5%A4%87-member-%E9%9B%86%E7%BE%A4
4. 向集群B导入数据
复制A集群中导出的数据文件到B集群中
导入账户数据
kubectl apply -f users.yaml
按需导入集群企业空间
kubectl apply -f workspacetemplates.yaml
根据实际情况设置集群可见性
https://kubesphere.com.cn/docs/cluster-administration/cluster-settings/cluster-visibility-and-authorization/
风险提示: 不可随意取消某个集群的授权,请注意相关风险。
通过 host 管理界面将集群A中的项目分配到企业空间中
https://kubesphere.com.cn/docs/faq/access-control/add-kubernetes-namespace-to-kubesphere-workspace/
导入权限控制控制数据
kubectl apply -f globalroles.yaml
kubectl apply -f globalrolebindings.yaml
# 以下资源可选择性导入
kubectl apply -f workspaceroles.yaml
kubectl apply -f workspacerolebindings.yaml