01 · Who owns this?
Ownership is decided per object, not per namespace.
The assistant sorts every workload by its own metadata. The groups are: reconciled by a Flux v2 HelmRelease or Kustomization; still on a legacy Flux v1 release; installed by Helm 3 by hand; installed by Tiller; owned by an operator; or applied with kubectl and forgotten.
Helm 3, Tiller and kubectl-applied objects are adoption candidates. Objects owned by an
operator get an informational issue instead, because a raw copy would fight the operator for ownership.
02 · Read the release record
A Tiller release still remembers what it installed.
Helm 2 kept each release as a ConfigMap in the Tiller namespace. Helm 3 keeps a Secret for each revision. The assistant decodes the latest deployed revision. It reads the chart name, the chart version and the values used at install.
Here: shop/orders-api, chart
[email protected], deployed five years ago. Its controller is gone, so the workload is frozen at its last apply.
03 · Or read the live object
For hand-applied manifests, the cluster is the source.
A Deployment applied with kubectl has no release record. So the assistant rebuilds the declaration from the live object itself. It strips the fields that the API server writes (status,
managedFields, uid,
resourceVersion, timestamps, the last-applied annotation). What remains is what someone asked for.
04 · A home Flux actually reads
A file in git is not the same as a file Flux applies.
The assistant puts the new file in a directory that one of your Flux
Kustomizations reconciles. If that directory's
kustomization.yaml lists resources explicitly, the assistant adds the new file to the list.
Sometimes the only covering Kustomization turns out to reconcile a different repository. Then the assistant holds the whole proposal for review. A manifest that nobody applies is worse than none, because it looks done.
05 · No second copy
Adopting must not mean installing twice.
Before it proposes anything, the assistant renders the chart with helm template. It compares the result with what already runs elsewhere in the cluster. The checks cover the names of CRDs (custom resource definitions), cluster-wide RBAC on the same resources, webhook
configurations and the services they call.
On any collision, the assistant drops the diff. It turns the finding into an issue with the conflict report instead. This check exists because two copies of one operator that fight over the same CRDs can cause a real outage.
06 · Can Flux fetch it?
The chart source must resolve, and the version must not go backwards.
The HelmRelease's sourceRef must point at a
HelmRepository, GitRepository or OCIRepository that exists in git (or the same MR creates it, once). The pinned version must be published. It must not be older than what runs live. A provable
dead end blocks the MR.
The assistant moves credential-shaped values from the old release into an ExternalSecret. It does not commit them.
07 · Prove the first reconcile is a no-op In development
Compare the proposal with what is running, field by field.
A release record can drift from the cluster. Someone may scale a replica count by hand, or patch a memory limit up during an incident. Adopting
the stored values would quietly undo those fixes.
A detector compares the adoption's values with the live workloads
(replicas, resources, images) and lists every divergence. It is built, but it ships switched off and only reports. The next steps are to turn it on, then to make it a gate.
08 · Safe to hand over
The HelmRelease must not be able to uninstall what it adopts.
On an adoption, Flux's default install remediation (retry, then
uninstall on failure) would delete the running workload after a slow rollout. The assistant flags proposals that combine install retries with a default timeout over multi-replica workloads. It also marks as divergent any remediation that would delete live objects.
Roadmap The assistant will write the Helm 3 ownership annotations into the MR as numbered pre-merge steps. Tiller-era objects need these annotations before Flux can take them over.