-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Description
What problem are you trying to solve?
The current linkerd-multicluster
chart is intended to be reusable across clusters, but the controller
section in 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.
How should the problem be solved?
Create a dedicated Helm chart, linkerd-multicluster-controller
, by copying the controller templates currently under linkerd-multicluster/templates/controller/*
. Keep common/link resources in linkerd-multicluster
.
-
Backward compatibility: Template duplication is intentional to maintain compatibility. We will release with both charts/templates coexisting so current users aren’t forced to migrate immediately.
-
Migration plan: After a sufficient transition period, eliminate double maintenance by either:
- Removing controller templates from
linkerd-multicluster
, or - Merging (
linkerd-multicluster-controller
templates intolinkerd-multicluster
via a unification mechanism, e.g., library chart or build/post-render merge), to establish a single source of truth.
- Removing controller templates from
-
No functional changes to templates; the split only improves operability and ownership boundaries.
Any alternatives you've considered?
- Single chart with per-cluster values files or Helmfile/Kustomize overlays (doesn’t improve Argo CD diff clarity; still mixes concerns).
- Immediate refactor to a shared library chart without a compatibility window (too disruptive).
- Post-render scripting to manipulate manifests (adds tooling complexity and brittleness).
How would users interact with this feature?
Example workflow:
# Deploy common multicluster components (shared across clusters)
helm upgrade --install linkerd-multicluster ./charts/linkerd-multicluster -n linkerd-multicluster
# Deploy per-cluster controller with cluster-specific values
helm upgrade --install linkerd-multicluster-controller ./charts/linkerd-multicluster-controller \
-n linkerd-multicluster -f values/controller-$CLUSTER.yaml
In Argo CD, manage them as two Applications for clearer diffs and ownership. Backstage/IdP can map ownership to each chart independently.
Minimal usage example (after “Link the clusters”)
- Link the clusters (follow Step 2: Link the clusters):
linkerd --context=east multicluster link-gen --cluster-name east \
| kubectl --context=west apply -f -
- Immediately install the per-cluster controller on the receiving cluster:
# minimal values for the controller that mirrors 'east'
cat > values-controller-east.yaml <<'EOF'
controllers:
- link:
ref:
name: east
EOF
helm upgrade --install linkerd-multicluster-controller ./charts/linkerd-multicluster-controller \
-n linkerd-multicluster --create-namespace \
--kube-context west \
-f values-controller-east.yaml
- Verify (per the same guide):
linkerd multicluster check
Reference: Installing Multi-cluster Components (Linkerd 2.18)
Would you like to work on this feature?
yes