@@ -21,13 +21,13 @@ cluster holds administrational objects. Among them are shard objects.
2121The set of shards in a kcp installation is defined by ` Shard ` objects in
2222` core.kcp.io/v1alpha1 ` .
2323
24- A shard object specifies the network addresses, one for external access (usually
24+ A shard object specifies the network addresses, one for external access (usually
2525some worldwide load balancer) and one for direct access (shard to shard).
2626
2727## Logical Clusters and Workspace Paths
2828
2929Logical clusters are defined through the existence of a ` LogicalCluster ` object
30- "in themselves", similar to a ` . ` directory defining the existence of a directory
30+ "in themselves", similar to a ` . ` directory defining the existence of a directory
3131in Unix.
3232
3333Every logical cluster name ` name ` is a * logical cluster path* . Every logical
@@ -54,8 +54,8 @@ for the parent (`home` in this case) to exist.
5454## Front Proxy
5555
5656A front-proxy is aware of all logical clusters, their shard they live on,
57- their canonical paths and all ` Workspaces ` s. Non canonical paths can be
58- reconstructed from the canonical path prefixes and the worksapce names.
57+ their canonical paths and all ` Workspaces ` s. Non canonical paths can be
58+ reconstructed from the canonical path prefixes and the workspace names.
5959
6060Requests to ` /cluster/<path> ` are forwarded to the shard via inverse proxying.
6161
@@ -70,7 +70,7 @@ or multiple per region or cloud provider.
7070## Consistency Domain
7171
7272Every logical cluster provides a Kubernetes-compatible API root endpoint under
73- ` /cluster/<path> ` including its own discovery endpoint and their own set of
73+ ` /cluster/<path> ` including its own discovery endpoint and their own set of
7474API groups and resources.
7575
7676Resources under such an endpoints satisfy the same consistency properties as with
@@ -84,12 +84,12 @@ i.e. resource versions cannot be compared.
8484
8585The only exception to the upper rule are objects under a "wildcard endpoint"
8686` /clusters/*/apis/<group>/<v>/[namespaces/<ns>]/resource:<identity-hash> ` per
87- shard. It serves the objects of the given resource on that shard across
87+ shard. It serves the objects of the given resource on that shard across
8888logical-clusters. The annotation ` kcp.io/cluster ` tells the consumer which
8989logical cluster each object belongs to.
9090
9191The wildcard endpoint is privileged (requires ` system:masters ` group membership).
92- It is only accessible when talking directly to a shard, not through a
92+ It is only accessible when talking directly to a shard, not through a
9393front-proxy.
9494
9595Note: for unprivileged access, virtual view apiservers can offer a highly
@@ -115,7 +115,7 @@ the shard hosting the `Workspace` object will access another shard to create the
115115` LogicalCluster ` object initially. It does that by choosing a random logical
116116cluster name (optimistically) and choosing a shard that name maps to (through
117117consistent hashing). It then tries to create the ` LogicalCluster ` . On conflict,
118- it can check whether the existing object belong the given ` Workspace ` object or
118+ it can check whether the existing object belong the given ` Workspace ` object or
119119not. If not, another name and shard is chosen, until scheduling succeeds. During
120120initialization the controller on the ` Workspace ` hosting shard will keep watching
121121the logical cluster on the other shard, with some exponential backoff. In other
@@ -125,8 +125,8 @@ the other shard.
125125Another example is API binding, but it is different than workspace scheduling:
126126a binding controller running on the shard hosting the ` APIBinding ` object will
127127be aware of all ` APIExport ` s in the kcp installation through caching replication
128- (see next section). What is special is that this controller has all the
129- information necessary to bind a new API and to keep bound APIs working even if
128+ (see next section). What is special is that this controller has all the
129+ information necessary to bind a new API and to keep bound APIs working even if
130130the shard of the ` APIExport ` is unavailable.
131131
132132Note: usually it a bad idea to create logic dependent on the parent workspace. If
@@ -138,12 +138,12 @@ parent is not accessible.
138138
139139The cache server is a special API server that can hold replicas of objects that
140140must be available globally in an eventual consistent way. E.g. the ` APIExport ` s
141- and ` APIResourceSchemas ` are replicated that way and made available to the
141+ and ` APIResourceSchemas ` are replicated that way and made available to the
142142corresponding controllers via informers.
143143
144144The cache server holds objects by logical clusters, and it can hold objects from
145145many or all shards in a kcp installation, served through wildcard informers.
146- The resource versions of those objects have no meaning beyond driving the cache
146+ The resource versions of those objects have no meaning beyond driving the cache
147147informers running in the shards.
148148
149149Cache servers can be 1:1 with shards, or there can be shared cache servers, e.g.
@@ -155,22 +155,22 @@ Controllers that make use of cached objects, will usually have informers against
155155local objects and against the same objects in the cache server. If the former
156156returns a "NotFound" error, the controllers will look up in the cache informers.
157157
158- The cache server technique is only useful for APIs whose object cardinality
158+ The cache server technique is only useful for APIs whose object cardinality
159159across all shards does not go beyond the cardinality sensibly storable in a
160160kube-based apiserver.
161161
162162Note that objects like ` Workspace ` s and ` LogicalCluster ` s fall not into that
163163category. This means that in particular the logical cluster canonical path
164164cannot be derived from cached ` LogicalCluster ` s. Instead, the cached objects
165165must hold their own ` kcp.io/path ` annotation in order to be indexable by that
166- value. This is crucial to implement cross-logical-cluster references by
166+ value. This is crucial to implement cross-logical-cluster references by
167167canonical path.
168168
169169Note: the ` APIExport ` example assumes that there are never more than e.g. 10,000
170- API exports in a kcp installation. If that is not an acceptable constraint,
170+ API exports in a kcp installation. If that is not an acceptable constraint,
171171other partitioning mechanism would be need to hold the number of ` APIExport `
172172objects per cache server below the critical number. E.g. there could be cache
173- servers per big tenant, and that would hold only public exports and
173+ servers per big tenant, and that would hold only public exports and
174174tenant-internal exports. A more complex caching hierarchy would make sure the
175175right objects are replicated, while the "really public" exports would only be a
176176small number.
@@ -182,9 +182,9 @@ server replication is costly, this set is as minimal as possible. For example,
182182certain RBAC objects are replicated in case they are needed to successfully
183183authorize bindings of an API, or to use a workspace type.
184184
185- By the nature of replication, objects in the cache server can be old and
185+ By the nature of replication, objects in the cache server can be old and
186186incomplete. For instance, the non-existence of an object in the cache server
187- does not mean it does not exist in its respective shard. The replication
187+ does not mean it does not exist in its respective shard. The replication
188188could be just delayed or the object was not identified to be worth to replicate.
189189
190190## Bootstrapping
0 commit comments