<p>We used to deploy kubernetes resources using the normal kubectl command for services, deployments, configmap...etc. Now we need to start using Helm 3 and integrate it to our pipelines, but when I try to run the helm upgrade command, it's giving the below error:
<code>Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: namespace: default</code></p>

<p>So, these resources were never created with helm as it was created normally with kubcetl apply command. </p>

<p>Just need to know how to used Helm in the pipeline without re-create the k8s resources. As the only workaround I found to get it working was to delete the resources and re-deploy them using Helm.</p>

<p>Below is the command I tried:
<code>helm upgrade --atomic --debug --install --force test .</code></p>

<p>Thanks,
Aly</p>

<p>see this feature of helm3 <a href="https://github.com/helm/helm/pull/7649" rel="nofollow noreferrer">Adopt resources into release with correct instance and managed-by labels</a></p>
<p>Helm will no longer error when attempting to create a resource that already exists in the target cluster if the existing resource has the correct meta.helm.sh/release-name and meta.helm.sh/release-namespace annotations, and matches the label selector app.kubernetes.io/managed-by=Helm. This facilitates zero-downtime migrations to Helm 3 for managing existing deployments, and allows Helm to &quot;adopt&quot; existing resources that it previously created.</p>
<p>In order to allow an existing resource to be adopted by Helm, add release metadata and the managed-by label:</p>
<pre><code>KIND=deployment
NAME=my-app-staging
RELEASE=staging
NAMESPACE=default
kubectl -n $NAMESPACE annotate $KIND $NAME meta.helm.sh/release-name=$RELEASE
kubectl -n $NAMESPACE annotate $KIND $NAME meta.helm.sh/release-namespace=$NAMESPACE
kubectl -n $NAMESPACE label $KIND $NAME app.kubernetes.io/managed-by=Helm
</code></pre>
