某M集群单独开启企业空间使用了一阵子,已授权用户;
将该已经开启企业的M集群导入H集群后,进入H集群k’s控制台,看不到M集群创建过的企业空间,重新创建同名空间后,将已经授权的用户在H集群中重新创建,重新授权,发现只能授权一个企业空间;多个只显示第一个;
不知道将H集群,M集群中的企业空间全部删除,重新在H集群中授权会不会恢复?

    xuelangos M 集群托管到 H 集群后, 用户/企业空间都需要在H 集群上进行管理。没明白你描述的问题,可以贴一下截图或者详细描述一下吗?

      hongming M集群单独开了KS-ui,创建了企业空间用了一阵子;这会多企业空间授权都是正常的;然后将该M集群没删企业空间的情况下,导入了H集群;在H集群创建了同名企业空间,看见了原有的项目,然后多企业空间授权时,发现只能授权一个企业空间;

        11 天 后

        xuelangos
        将使用过的Member集群托管到Host集群可以这么操作,

        1. 在Host集群上创建同名的企业空间,注意创建企业空间时要勾选Member集群

        2. 在Host集群上通过kubectl查看资源状态,kubectl get federatedworkspace <workspace name> -o yaml,当status.clusters中看到member cluster,并且 status.conditions 中无异常时, 表示Member集群的企业空间已经纳管到了Host集群

        3. 在Member集群上执行命令清除冗余的数据, kubectl delete workspacetemplate <workspace name>, 注意执行次命令时一定要确保Member集群中企业空间已经托管到了Host集群

        xuelangos 还可以直接删掉数据重建

        1.在Member集群上执行命令,将需要保留的namespace与workspace进行解绑

        kubectl label ns <namespace> kubesphere.io/workspace- && kubectl patch ns <namespace>   -p '{"metadata":{"ownerReferences":[]}}' --type=merge

        2.在Member集群上执行命令清理workspace

        kubectl delete workspacetemplate <workspace>

        3.在Host集群上创建好workspace(并关联Member集群)之后,在Member集群中执行下述命令将ns托管到workspace中

         kuebctl label ns <namespace> kubesphere.io/workspace=<workspace>

          hongming 刚去检查了一下,原来第一次授权时对的,是按第一种方法搞的,是按钮选错了,进去之后默认就有一个企业空间,点击左上角按钮可以选择;这种原理性的,k’s设计相关的细节还是要多多普及啊。这样一说,哦,CRD资源,label关联,挺简单的,不说。。。。这是啥啊。。一脸懵逼

          hongming metadata部分是顶格metadata一直到下一个顶格Spe’c中间所有的内容嘛?有点长啊

            hongming ‘{“metadata”:{"":[]}}’,整个一段全贴进{}中的双引号中,还是双引号中是二级ke’y,[]中二级v’laue
            ;能整个具体例子不,这部分没弄过;字段级别有点多

            23 天 后

            hongming 想问一下就是如果 Host 集群在没配置多集群之前就分配过企业空间,那现在配置成多集群的 Host,也是需要先把之前的 NS 和 workspace 先解绑么 (我这边配成成 多集群的Host 的之前的企业空间里面项目就没有了)

              hjwsxl 单集群模式 -> 多集群模式可以解绑之后重新关联,也可以不解绑,只是要注意一下 集群角色转换之后要在集群可见性里进行授权。

              需要注意的是 member 集群如果要换 host 集群的话, 就必须先在member中解绑ns 和 workspace,再加入到新的host

              hongming

              分享我这边一个操作导致的问题:

              问题过程描述

              我们有两个 K8s 集群,集群 A 和集群 B,两者都安装过 ks 并在没有开启多集群时候分配过企业空间。现在我想把 A 集群作为 Host,B 集群作为 Member。

              • 然后按照官方的文档设置好了,设置完成后我发现 Host 的这个 Kubesphere 上【访问控制】—>【企业空间】内原先分配好的项目都看不到了
              • 不太懂怎么设置,看了这个回复,我就想着原先的项目怎么加进来,我想着就修改这个 federatedworkspace 把 host 集群加进去不就行了么??当时还没等下面的回复就先自己尝试来着(我的修改是:在 spec.placement 里面加上 host)

              现象

              修改完成后,我就看 ks 界面企业空间那里也没出现那个集群的标志,我就想是不是配置没生效,于是又去看了那个资源 kubectl get federatedworkspace <workspace name> -o yaml ,诶?我发现那个设置的集群咋就没了???之后就发现之前那个企业空间有的 NS 全都被删除了……

              思考

              • 个人原因:不应该直接去操作 K8s 资源
              • 建议:
                • ks 的企业空间与里面项目(NS)关系的话,比如解绑的话这个操作我看论坛里面都是用的命令,那界面上貌似没看到解绑操作。
                • 还有企业空间一旦没了里面 NS 也就没了,这个的话有时候不太清楚哪些操作会导致这个问题,或许 ks 可以提供不要这么强制的关系(企业空间没了只会导致关系解绑而不是 NS 都被删了)
                • 期待文档的完善化,感觉这块对于刚开始操作的人来说不太清楚怎么做

                hjwsxl 我们也注意到了这里误操作可能带来的风险, 在不熟悉ks中联邦资源关联方式的情况下直接操作 federatedresource 存在隐患。建立了相关 issue 可以跟进

                https://github.com/kubesphere/kubesphere/issues/3169
                https://github.com/kubesphere/kubesphere/issues/3192
                https://github.com/kubesphere/kubesphere/issues/3028

                有下面一些需要注意的地方:

                1. namespace 关联到 workspace 之后由 ownerReferences 控制级联删除逻辑
                2. 多集群环境中,kubefed-controller 会直接控制member集群中label包含 kubefed.io/managed: "true" 的资源。这也是集群角色转换时可能存在的问题,host 集群中联邦资源的 placement 会直接影响到 member 集群中带有 kubefed.io/managed: "true" 的资源
                3. 综上,集群角色转换时需要移除 ns 的 label 和 ownerReferences, 注意 kubefed.io/managed 给联邦资源带来的影响

                我们会在文档中加上提示,在集群导入、资源创建时增加风险检查

                  1 个月 后

                  hongming 还想请教一下 host 集群变为 member 集群的话,还需要注意什么呢?
                  1)是否也是需要先把 host 集群中的所有项目与企业空间解绑然后设为member,再加入到新的 host 中?
                  2)此外,原先host中的账号如何导入到新的host 中呢

                    hjwsxl

                    集群角色转换时需要移除 ns 的workspace label 和 ownerReferences, 注意 kubefed.io/managed 给联邦资源带来的影响

                      hongming 好的,谢谢,对于第二个问题,原有 host 中的账号该如何导出然后导入到新的 host 中呢?

                        hjwsxl

                        kubectl get users -o yaml 导出再导入到新的集群