PipeCD - Kubernetes Multi-Cluster Plugin

Built the kubernetes_multicluster plugin for PipeCD during my LFX Mentorship, across more than 30 merged PRs: canary, primary and baseline rollouts, traffic routing, rollback, plan preview, drift detection and per-cluster deploy status.

What changed

  • Shipped progressive delivery (canary, primary, baseline and traffic routing) across multiple Kubernetes clusters.
  • Added per-target deploy statuses to the plugin SDK, so operators can see which cluster failed.
  • Brought the plugin to release standard with docs and a README.

What I worked on

  • I was the LFX Mentee for the multi-cluster plugin (LFX Mentorship Term 1, 2026).
  • I designed and implemented the stages, fixes and SDK changes in more than 30 merged PRs.
  • I wrote the plugin's announcement post on the PipeCD blog.

I built the kubernetes_multicluster plugin for PipeCD as my LFX Mentorship project. The plugin lets a single PipeCD application deploy to several Kubernetes clusters at once, with the same progressive delivery stages that the single-cluster plugin supports.

Stages

I implemented the core deployment stages one at a time:

  • Canary: rollout and clean (#6583, #6589)
  • Primary: rollout (#6591)
  • Baseline: rollout and clean (#6606, #6607)
  • Traffic routing: splitting traffic between variants, plus log updates (#6629, #6648)

Correctness and operations

  • Fixed rollback variant cleanup and added pruning of orphaned resources on rollback (#6660, #6748)
  • Made strategy selection multi-target aware (#6672)
  • Fixed livestate drift detection and resource filtering (#6673, #6783)
  • Implemented plan preview (#6685)
  • Added config hashing for StatefulSets and DaemonSets, and health status for DaemonSets, ReplicaSets and Pods (#6697, #6807)

Configuration

  • Per-target kustomizeDir, kustomizeVersion and kustomizeOptions (#6718, #6749)
  • Per-stage multiTarget filtering (#6757)
  • Config validation for KubernetesApplicationSpec (#6747)
  • An initializer hook for Helm repo and OCI registry auth (#6723)

Per-cluster deploy status

When a stage deploys to several clusters and one fails, operators used to see only "stage failed". I added a DeployTargetStatus type to the plugin SDK and extended ExecuteStageResponse with per-target statuses, in both PipeCD and the standalone Go SDK. The plugin now reports which cluster failed (#6861, piped-plugin-sdk-go #6, #6812).

Release

I also renamed stages to avoid conflicts with the single-cluster plugin, added tests and cleanup PRs, and wrote the plugin documentation page and README to release standard (#6880, #6878, #6977). I wrote about the project on the PipeCD blog.

Links: LFX issue #6446 • Merged PRs • Repository