Enhancement Description
Context
KEP-2149 lists a cluster joining multiple ClusterSets as an explicit non-goal, and KEP-4322 states that a cluster can only be in one ClusterSet. Real cluster managers don't work that way: OCM's ManagedClusterSet can place one cluster in multiple sets, and the duplicate-cluster problems in cluster-inventory-api#75 partly come from squeezing multi-set membership through a single-membership API.
A cluster can't carry two ClusterProperty resources with the same name (property name = resource name), so multiple memberships have to be encoded in a single clusterset.k8s.io value.
Proposed Change
- KEP-2149: the
clusterset.k8s.io property value becomes a comma-separated list of every ClusterSet the cluster belongs to; move multi-membership from Non-Goals to Goals.
- KEP-4322: ClusterSet membership is expressed by the
clusterset.k8s.io property; drop the requirement to label the inventory namespace with clusterset.multicluster.x-k8s.io; cluster managers SHOULD mirror each membership as a clusterset.multicluster.x-k8s.io/<name>: "true" label so ClusterProfiles stay selectable with standard label selectors (precedent: node-role.kubernetes.io/<role>).
Enhancement Description
k/enhancements) update PR(s): TBDContext
KEP-2149 lists a cluster joining multiple ClusterSets as an explicit non-goal, and KEP-4322 states that a cluster can only be in one ClusterSet. Real cluster managers don't work that way: OCM's ManagedClusterSet can place one cluster in multiple sets, and the duplicate-cluster problems in cluster-inventory-api#75 partly come from squeezing multi-set membership through a single-membership API.
A cluster can't carry two ClusterProperty resources with the same name (property name = resource name), so multiple memberships have to be encoded in a single
clusterset.k8s.iovalue.Proposed Change
clusterset.k8s.ioproperty value becomes a comma-separated list of every ClusterSet the cluster belongs to; move multi-membership from Non-Goals to Goals.clusterset.k8s.ioproperty; drop the requirement to label the inventory namespace withclusterset.multicluster.x-k8s.io; cluster managers SHOULD mirror each membership as aclusterset.multicluster.x-k8s.io/<name>: "true"label so ClusterProfiles stay selectable with standard label selectors (precedent:node-role.kubernetes.io/<role>).