karmada-io / karmada

Open, Multi-Cloud, Multi-Cluster Kubernetes Orchestration
https://karmada.io
Apache License 2.0
4.12k stars 807 forks source link

如何在不影响已分发cr的情况下,重命名karmada中的cluster #4579

Closed donkeywon closed 2 weeks ago

donkeywon commented 3 months ago

Please provide an in-depth description of the question you have: 目前使用场景:仅使用karmada的PropagationPolicy分发cr到成员集群 想达成的目的:因为一些历史原因,需要重命名karmada中的cluster name

What do you think about this question?: 查阅了karmada的文档和issue,没有找到相关的解决方法,只有一个issue是类似的目的,但是解决方法不太适合我现在的场景

Environment:

donkeywon commented 3 months ago

使用当前的现状举个例子


当前k8s集群,在karmada中的name=cluster-a

定义的PropagationPolicy

placement:
    clusterAffinity:
      clusterNames:
        - cluster-a

有一个CR,通过上面定义的pp被分发到了cluster-a


目前已经尝试的操作是

  1. 使用cluster-a的kubeconfig另外添加一个集群,命名为cluster-b
  2. 在添加时发现karmada会校验k8s集群kube-system这个namespace的uid,如果有相同的禁止添加,所以暂时把cluster-a的spec.id修改成别的
  3. 添加cluster-b成功
  4. 把PropagationPolicy中的clusterNames修改为cluster-b
  5. 发现成员集群中的cr会先被删掉,然后重新出现

查阅后发现是karmada针对每个cr,会创建一个对应目的cluster的work,只要这个work被删掉,目的cluster中的cr也会被删掉。 在做第4步时,原先cr在cluster-a下的work会被karmada删掉,会增加一个针对cluster-b的work,所以会出现第5步的情况。

问题1:是否可以针对work做一些操作,在work被karmada删掉时不会删掉成员集群中的cr? 问题2:是否有其他的可行思路?

XiShanYongYe-Chang commented 3 months ago

在Karmada中,集群的名称是唯一的,在集群声明周期内,也是不可以修改名称的。因此,我理解要想达到你描述的目的,可能需要使用比较hack的方式。

问题1:是否可以针对work做一些操作,在work被karmada删掉时不会删掉成员集群中的cr?

针对这一点,我觉得你可以通过将集群上的资源的label中,由karmada管理的标签去掉,这样其实就是将该资源脱离了Karmada的控制,当按照你之前的步骤变更集群名称之后,你可以再使用PropagationPoliy中的覆盖策略,将集群上原本的资源交由Karmada控制。

donkeywon commented 3 months ago

在Karmada中,集群的名称是唯一的,在集群声明周期内,也是不可以修改名称的。因此,我理解要想达到你描述的目的,可能需要使用比较hack的方式。

问题1:是否可以针对work做一些操作,在work被karmada删掉时不会删掉成员集群中的cr?

针对这一点,我觉得你可以通过将集群上的资源的label中,由karmada管理的标签去掉,这样其实就是将该资源脱离了Karmada的控制,当按照你之前的步骤变更集群名称之后,你可以再使用PropagationPoliy中的覆盖策略,将集群上原本的资源交由Karmada控制。

你的意思是定义一个OverridePolicy,然后在PropagationPolicy中的dependentOverrides属性中关联OverridePolicy么?

XiShanYongYe-Chang commented 3 months ago

不是的,我是指先将集群中由Karmada分发的、与Karmada相关的标签删除掉,这样集群中的资源将不再受Karmada控制,然后进行集群名称的变更,最后在PropagationPolicy中修改集群名称,并指定覆盖策略.spec.conflictResolution

donkeywon commented 3 months ago

@XiShanYongYe-Chang 半天在crd里找不到这个属性,从1.7版本才有这个字段的,那我先升级下看看

XiShanYongYe-Chang commented 3 months ago

抱歉,忘记版本信息了,可以试着用一下这个字段提供的特性能力。

XiShanYongYe-Chang commented 2 weeks ago

As a lack of activity, let's close this first, feel free to reopen it if you still need it. /close

karmada-bot commented 2 weeks ago

@XiShanYongYe-Chang: Closing this issue.

In response to [this](https://github.com/karmada-io/karmada/issues/4579#issuecomment-2063457378): >As a lack of activity, let's close this first, feel free to reopen it if you still need it. >/close Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md). If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.