Video summary
Building a Kubernetes-native Experience for Your Multi-cluster Fl... Andrea Tosatto & James Munnelly
Main summary
Key takeaways
Goal / Big idea
- Present ongoing research into extending Kubernetes with a thin multicluster API server layer so users get a Kubernetes-native multicluster experience.
- The approach abstracts placement, aggregation, and consistent reads across multiple clusters without forcing users to manage cluster-specific details.
Motivations and platform pain points (scalability + operability)
- API server scalability limits have long impacted platform teams once they expose the Kubernetes API to many clients.
Common mitigations mentioned:
- **Separate high-churn events** into another etcd/cluster.
- Use **binary/protobuf encoding** to reduce memory usage.
- Ensure **strong CRD validation** to avoid serialization/memory issues.
-
Community improvements called out:
- Cyber/serialization work, notably around handling JSON-encoded CRD objects and list responses.
- Consistent reads from the cache, to avoid incorrect load patterns hitting etcd (e.g., misuse of
resourceVersionsemantics). - Fixes around server-side filtering (avoiding filtering after retrieving all objects from etcd).
-
Beyond scaling API servers alone:
- Scaling controllers: more objects → more controller work.
- Operational risk: larger platforms increase blast radius of configuration/outage events.
- Need for platform abstractions that provide:
- Well-defined domain-specific workloads
- Topology information (e.g., spread across maintenance / “four domains”)
- Improved utilization without users constantly tuning requests/limits.
Architecture: “Cluster as a Service” but beyond one cluster
- Traditional model: each team gets its own cluster.
- New model: allow customers to scale beyond a single-cluster boundary while keeping infrastructure details hidden.
Key building blocks:
- Multicluster scheduling (workload placement layer)
- Multicluster API aggregation (API server layer)
- A consistent semantics layer for list/watch, plus proxying for patch/update/delete
Multicluster scheduling using MultiQ
Instead of submitting workloads to a single cluster, users submit to a multicluster API server.
MultiQ receives the workload and:
- Reconciles it into an internal “deployment-like” representation.
- Finds an appropriate cluster that can run it.
- Pushes down spec to the target cluster.
- Syncs up status back to the multicluster API view.
Design intent
- Similar abstraction to Kubernetes Deployments/StatefulSets/Jobs.
- Use MultiQ not just for batch, but as a general multicluster workload framework.
Collaboration / extensibility
- Collaboration with upstream around elastic workloads and supporting flexible scaling semantics for Deployments/jobs.
- MultiQ supports custom/“external” controllers to orchestrate behavior beyond core Kubernetes workloads.
How the scheduler chooses clusters
- MultiQ provides placement behavior (e.g., sequentially trying clusters).
- It can be extended with custom placement logic (e.g., avoid a cluster marked for maintenance via taints).
Reconciliation model
- Spec is pushed down; status is aggregated up, so users perceive a single consistent view.
Multicluster API server aggregation (core contribution)
Requirement: preserve Kubernetes “list/watch” semantics
- Controllers should be able to talk to the multicluster API like they talk to a normal Kubernetes API.
- Main challenge:
resourceVersionsemanticsresourceVersionis a point-in-time reference from etcd; controllers use it to establish watches.- In multicluster, there are multiple etcd instances—so you need a monotonic version across clusters.
Approaches considered (and why they fail)
-
Vector
resourceVersion(per-cluster resourceVersion list)- Hard because many clients assume
resourceVersionis a parseable integer/format and may rely on it. - Breaks ordering complexity when clusters are added/removed.
- Hard because many clients assume
-
Sync all objects to the multicluster layer
- Works but creates scalability problems (e.g., a “gigantic etcd” storing all objects).
- Violates the “thin layer” reliability/scalability goals.
Final approach: “reclocking events” with a Version Marker object
- Instead of syncing all objects, the system focuses on producing a monotonically increasing version number across clusters.
- Introduces a virtual marker (referred to as “version marker object”) stored in etcd to track event ordering/visibility.
Version marker metadata (high-level)
store: which underlying cluster the event originates fromobject: reference to originating object identity and originating clusterresourceVersiontemplate: includes the generated multicluster-wide resource version (the monotonic ordering token)- Optimization mention:
- Supports label selector logic at the multicluster layer.
Two marker types:
- Bookmarks: maintain continuous tracking so watches can resume efficiently even during idle periods.
- Mapping markers per aggregated resource (e.g., per Pod) indicating which cluster/version produced it.
How clients experience the API
- Client issues
get/list/watchto the multicluster API server. - The multicluster server implements the API server storage interface using:
- a “virtual marker store” (instead of storing all real objects),
- a request routing layer that translates multicluster
resourceVersionback into the correct underlying cluster’sresourceVersion.
Other operations: patch/update/delete
- For non-read operations, the multicluster API server proxies requests:
- finds which cluster actually hosts the object (via marker mapping),
- rewrites the multicluster
resourceVersionto the underlying cluster’s real one, - forwards the request.
Logs and exec
- Supports
logsandexecusing the same mapping/proxy methodology. - Demo emphasizes that from the user’s perspective it feels like standard Kubernetes.
Demo highlights (what was shown)
- Two local Kubernetes clusters running with:
- multicluster API server
- etcd
- MultiQ
Showed:
- An API aggregation configuration defining which resources and clusters are aggregated.
- Virtual marker objects demonstrating:
- which cluster a Pod exists in,
- multicluster
resourceVersionmapping, - underlying cluster
resourceVersion.
- Creating a Deployment and Job and observing:
- Pods being scheduled across clusters (via MultiQ).
watch podsreflecting state transitions and Job completion through multicluster streaming.
logsandexecworking through the multicluster API.
Q&A / clarifications (key technical points)
-
Support for custom resources / CRDs
- Yes: aggregation is driven by an API aggregation object that specifies:
- resource kind/scope,
- which underlying cluster(s) to aggregate from.
- Works for core types and CRD types (and can support user-defined abstractions).
- Yes: aggregation is driven by an API aggregation object that specifies:
-
Where aggregation data is stored
- Virtual markers can be stored similarly to events, potentially distributed/sharded across etcd instances; marker storage is separate from storing full objects.
-
How MultiQ reconciliation propagates
- MultiQ pushes spec down and syncs status up.
-
UI/clients (dashboard, kubectl)
- Can run the Kubernetes dashboard against the multicluster API server; kubectl can use a single kubeconfig to interact as if it were one cluster.
-
Component deployment model
- MultiQ consists of:
- Q controller-manager (“Q” piece) and related control components
- Two copies of Q manager/controller:
- one configured to talk to the multicluster API server,
- one running on each underlying cluster to evaluate/admit workload based on local capacity.
- MultiQ consists of:
Main speakers / sources
- Andrea Tosatto (primary speaker)
- James Munnelly (co-speaker referenced; not present for part of the talk)
Referenced project/community components
- MultiQ (mentioned as a community-generated project)
- Kubernetes SIG multicluster (driving multicluster work upstream)
- etcd (CD layer used for
resourceVersionsemantics)
Rate this summary
Your feedback will help improve summaries.
Improve this summary
Reprocess with a stronger model when the summary feels incomplete or inaccurate.
Translate summary in another language
Ask questions to this video
Chat for follow-up questions, clarifications, and source-backed answers.