Helm "rendered manifests contain a resource that already exists"
Helm wants to create a resource that already exists in the cluster but is not owned by this release. Helm will not adopt a resource it did not create, so the install/upgrade stops.
What this error means
helm install/upgrade --install fails with rendered manifests contain a resource that already exists. Unable to continue with install, naming the existing object and what owns it.
Error: INSTALLATION FAILED: rendered manifests contain a resource that already
exists. Unable to continue with install: ConfigMap "app-config" in namespace
"prod" exists and cannot be imported into the current release: invalid ownership
metadata; ...Common causes
Resource created outside this release
The object was applied with kubectl, by another Helm release, or by a previous failed install, so it lacks this release’s ownership labels/annotations.
Two releases render the same object
Two charts/releases generate a resource with the same name/namespace, and the second collides with the first.
How to fix it
Adopt the existing resource into the release
Label and annotate it so Helm recognizes it as managed by this release, then upgrade.
kubectl label configmap app-config -n prod \
app.kubernetes.io/managed-by=Helm --overwrite
kubectl annotate configmap app-config -n prod \
meta.helm.sh/release-name=<release> \
meta.helm.sh/release-namespace=prod --overwrite
helm upgrade --install <release> ./chart -n prodOr remove the conflicting resource
- Confirm what owns it:
kubectl get <res> <name> -o yaml | grep -A3 ownerReferencesand the managed-by label. - If it is a leftover from a failed install, delete it and re-run.
- If another active release owns it, rename the resource in one chart to avoid the clash.
How to prevent it
- Create cluster resources through Helm, not ad hoc
kubectl apply, when a chart owns them. - Keep resource names unique across releases in the same namespace.
- Use
--atomicso failed installs clean up instead of leaving orphans.