-
Notifications
You must be signed in to change notification settings - Fork 1.3k
feat(helm): add linkerd-multicluster-controller #14386
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
feat(helm): add linkerd-multicluster-controller #14386
Conversation
Split controller templates from linkerd-multicluster to allow per-cluster controller values. Copied templates/controller (intentional duplication; no functional changes). Signed-off-by: kahirokunn <[email protected]>
Hi @kahirokunn, thanks for submitting this! Unfortunately, I think we are unlikely to merge this. Our plans are to merge the multicluster controller into the core control plane chart. |
Signed-off-by: kahirokunn <[email protected]>
Signed-off-by: kahirokunn <[email protected]>
985e5e3
to
7561569
Compare
Hi @olix0r — thanks for your time! 😊 If you're open to it, may I ask a couple of questions to better understand the intended lifecycle for the multicluster service-mirror controller? 🤔 I may be misunderstanding some fundamentals, so any pointers would be appreciated. 🙏 My current intuition is that the controller behaves like a “link-scoped worker”: useful when a ---
apiVersion: lib.projectsveltos.io/v1beta1
kind: EventSource
metadata:
name: install-linkerd-controller-by-link
spec:
collectResources: true
resourceSelectors:
- group: multicluster.linkerd.io
version: v1alpha3
kind: Link
---
apiVersion: lib.projectsveltos.io/v1beta1
kind: EventTrigger
metadata:
name: install-linkerd-controller-by-link
spec:
sourceClusterSelector:
matchLabels:
installation.appthrust.com/linkerd: enabled
eventSourceName: install-linkerd-controller-by-link
oneForEvent: true
helmCharts:
- repositoryURL: oci://quay.io/appthrust/linkerd
repositoryName: linkerd-multicluster-controller
chartName: linkerd-multicluster-controller
chartVersion: "0.1.0"
releaseName: "linkerd-mc-{{ .Resource.metadata.name }}"
releaseNamespace: "{{ .Resource.metadata.namespace }}"
helmChartAction: Install
values: |
controllers:
- link:
ref:
name: "{{ .Resource.metadata.name }}" sequenceDiagram
autonumber
participant U as User/Automation
participant K as Kubernetes API
participant S as Sveltos (EventSource/Trigger)
participant H as Helm
U->>K: Create Link (multicluster.linkerd.io/v1alpha3)
K-->>S: Event: Link created
S->>H: Trigger Helm install (values: link.ref.name)
H->>K: helm install linkerd-mc-<linkname> -n <namespace>
With this, the controller is installed when a
If there are docs, design notes, or prior discussions I should read, I’d be grateful for pointers. Thank you again for the guidance and for maintaining Linkerd. Best regards |
Hi @kahirokunn , To expand on the previous reply, Linkerd multicluster so far has been designed as an extension. So only if you'd be interested in that, you'd install the controller that would then handle any Links you'd like to manage. This follows the typical controller/operator pattern. However we're planning on stepping back from this extension model and include it into core linkerd, mainly because the pervasiveness of multicluster setups and the simplicity this would offer. This would keep things in line with the operator model, but the packaging will change: there would no longer be need to install an additional helm chart to gain multicluster capabilities and the only config that users would need to provide would be the Link manifests. |
Hi @alpeb! Thanks for the clear explanation! Just to confirm my understanding: without installing the controller that manages Thanks again to you and the team for the continued focus on simplicity and UX! |
Problem
The
linkerd-multicluster
chart is intended to be reusable across clusters, but itscontroller
values must be customized per cluster. This couples cluster-specific controller config with common components, making Argo CD diffs noisy, parameter management cumbersome, and IdP integrations (e.g., Backstage) harder when ownership boundaries are mixed.Solution
Introduce a new chart,
linkerd-multicluster-controller
, that contains the controller templates split fromlinkerd-multicluster
. The templates are intentionally duplicated (no functional changes) to preserve backward compatibility. We will release with both charts/templates coexisting; after a sufficient migration window, we’ll remove the duplication by either deleting the controller templates fromlinkerd-multicluster
or merging the controller back via a single source of truth (e.g., library chart/unification step).This split allows:
Validation
Minimal workflow aligned with the docs’ “Link the clusters” step:
linkerd --context=east multicluster link-gen --cluster-name east \ | kubectl --context=west apply -f -
(See Step 2: Link the clusters)
west
)Operational checks:
Fixes
Fixes #14385
DCO Sign off
Signed-off-by: kahirokunn [email protected]