Skip to content

Add native support for running karmada-agent components out of cluster for managed platforms #7601

Description

@jabellard

What would you like to be added:
Native support for running karmada-agent components out of cluster for managed platforms.

Why is this needed:
At Bloomberg, we run a fully-managed multi-cluster platform built atop Karmada to support platform teams who want to leverage multi-cluster orchestration to adhere to the firm's high availability and disaster recovery compliance mandates.

Part of the managed service offering is fully automated member cluster registration for managed Karmada instances. To achieve that, as part of each managed Karmada control plane, we run a member cluster registration sub-system as shown below.

Image

In that sub-system, we have three main components:

  • cluster-provider: This component integrates with our cluster inventory API to dynamically sync cluster state for the managed Karmada control plane.
  • cluster-credentials-provider: This component integrates with our token exchange service to provide the credentials needed to access the registered member clusters.
  • cluster-agent-provider: For clusters registered in Pull mode, we also need to dynamically provision karmada-agent instances for each Pull mode member cluster. Those agents need to run along side the other control plane components (e.g., karmada-controler-manager) on the host cluster, not on the member cluster. To make that work, we just provide the agent with two kube configs. One to connect to the Karmada API server, and the other to connect to the member cluster.

At a high level, the flow is as follows:

  1. cluster-provider, using our cluster inventory API as the authoritative data source, registers clusters with the Karmada API server.
  2. cluster-credentials-provider, watching event sources from the Karmada API server and integrated with our token exchange service, provides the credentials needed to connect to the member clusters.
  3. For clusters registered in Pull mode, cluster-agent-provider, also watching event sources from the Karmada API server, will provision a karmada-agent instance for each cluster.

One of the responsibilities of the karmada-agent component is to do all the plumbing required to register a member cluster with the Karmada control plane. Since we have controllers in our cluster registration sub-system doing that work, we need a way (e.g., using a flag) to turn off that functionality to avoid conflicts or weird edge cases that might arise for our use case.

We have a tenant running at very large scale who wants their member clusters registered in Pull mode. At that scale, we have to do all we can to maximize performance. One of the conclusions from the most recently published Karmada scalability test is a better performance profile when member clusters are registered in Pull mode. We plan to also conduct a scalability test for their specific use case using both Push mode and Pull mode registration strategies to gather more data on this.

Metadata

Metadata

Assignees

Labels

kind/featureCategorizes issue or PR as related to a new feature.

Type

No type

Projects

Status
No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions