Skip to content

Commit a5fde19

Browse files
committed
kep-4322: add topology illustrations to alternatives section
1 parent da34187 commit a5fde19

11 files changed

+15
-0
lines changed

keps/sig-multicluster/4322-cluster-inventory/README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,21 +1060,31 @@ more straightforward with namespaced resources.
10601060

10611061
#### Global hub cluster for multiple clustersets
10621062

1063+
![illustration of global hub for multiple clustersets topology](./global-hub.svg)
1064+
10631065
In this model, a single global hub cluster is used to manage multiple clustersets (a "Prod" clusterset and "Dev" clusterset in this illustration). For this use case, some means of segmenting the ClusterProfile resources into distinct groups for each clusterset is needed, and ideally should facilitate selecting all ClusterProfiles of a given clusterset. Because of this selection-targeting goal, setting clusterset membership within the `spec` of a ClusterProfile would not be sufficient. While setting a label such as the proposed `clusterset.multicluster.x-k8s.io` on the ClusterProfile resource (instead of a namespace) could be acceptable, managing multiple cluster-scoped ClusterProfile resources for multiple unrelated clustersets on a single global hub could quickly get cluttered. In addition to grouping clarity, namespace scoping could allow RBAC delegation for separate teams to manage resources for their own clustersets in isolation while still using a shared hub. The group of all clusters registered on the hub (potentially including clusters belonging to different clustersets or clusters not belonging to any clusterset) may represent a single "inventory" or multiple inventories, but such a definition is beyond the scope of this document and is permissible to be an undefined implementation detail.
10641066
#### Global hub cluster per clusterset
10651067

1068+
![illustration of global hub per clusterset topology](./global-hub-per-clusterset.svg)
1069+
10661070
In this model, each "inventory" has a 1:1 mapping with a clusterset containing clusters in multiple regions. A cluster-scoped ClusterProfile CRD would be sufficient for this architecture, but it requires a proliferation of hub clusters, which may not be optimal. This model is still implementable with namespace-scoped ClusterProfile CRDs by writing them all to a single namespace, either the `default` namespace or a specific namespace configured in the cluster manager. The risk of placing resources in the wrong namespace would be somewhat minimal if following the suggested pattern of having ClusterProfile resources be written by a "manager" rather than authored by humans.
10671071

10681072
#### Regional hub cluster for multiple clustersets
10691073

1074+
![illustration of regional hub clusters for multiple clustersets topology](./regional-hub-multiple-clustersets.svg)
1075+
10701076
In this model, "hub" clusters are limited to a regional scope (potentially for architectural limitations or performance optimizations) and each hub is used to manage clusters only from the local region, but which may belong to separate clustersets. If, as in the pictured example, clustersets still span multiple regions, some out-of-band synchronization mechanism between the regional hubs would likely be needed. This model has similar segmentation needs to the global hub model, just at a smaller scale.
10711077

10721078
#### Regional hub clusters per clusterset
10731079

1080+
![illustration of regional hub clusters per clusterset topology](./regional-hub-per-clusterset.svg)
1081+
10741082
This is creeping pretty far towards excessive cluster proliferation (and cross-region coordination overhead) purely for management needs (as opposed to actually running workloads), and would be more likely to be a reference or testing implementation than an architecture suitable for production scale.
10751083

10761084
#### Self-assembling clustersets
10771085

1086+
![illustration of self-assembling clusterset topology](./self-assembling-clustersets.svg)
1087+
10781088
This is the model most suited to a cluster-scoped ClusterProfile resource. In contrast to the prior models discussed, in this approach the ClusterProfile CRD would be written directly to each "member" cluster. ClusterSet membership would either be established through peer-to-peer relationships, or managed by an external control plane. For ClusterSet security and integrity, a two-way handshake of some sort would be needed between the local cluster and each peer or the external control plane to ensure it is properly authorized to serve endpoints for exported services or import services from other clusters. While these approaches could be implemented with a namespace-scoped ClusterProfile CRD in the `default` or a designated namespace, misuse is most likely in this model, because the resource would be more likely to be authored by a human if using the peer-to-peer model. Due to the complexity and fragility concerns of managing clusterset membership in a peer-to-peer topology, an external control plane would likely be preferable. Assuming the external control plane does not support Kubernetes APIs (if it did, any of the "hub" models could be applied instead), it could still be possible to implement this model with a namespace-scoped ClusterProfile resource, but it is _not_ recommended.
10791089

10801090
#### Workload placement across multiple clusters _without_ cross-cluster service networking
63.3 KB
Loading

keps/sig-multicluster/4322-cluster-inventory/global-hub-per-clusterset.svg

Lines changed: 1 addition & 0 deletions
Loading
60.7 KB
Loading

keps/sig-multicluster/4322-cluster-inventory/global-hub.svg

Lines changed: 1 addition & 0 deletions
Loading
52 KB
Loading

keps/sig-multicluster/4322-cluster-inventory/regional-hub-multiple-clustersets.svg

Lines changed: 1 addition & 0 deletions
Loading
58.9 KB
Loading

keps/sig-multicluster/4322-cluster-inventory/regional-hub-per-clusterset.svg

Lines changed: 1 addition & 0 deletions
Loading
39.9 KB
Loading

0 commit comments

Comments
 (0)