<p>Whenever I run my basic deploy command, everything is redeployed in my environment. Is there any way to tell Helm to only apply things if there were changes made or is this just the way it works?</p>
<p>I'm running:</p>
<pre class="lang-sh prettyprint-override"><code>helm upgrade --atomic MyInstall . -f CustomEnvironmentData.yaml
</code></pre>
<p>I didn't see anything in the <a href="https://helm.sh/docs/helm/helm_upgrade/" rel="nofollow noreferrer">Helm Upgrade documentation</a> that seemed to indicate this capability.</p>
<p>I don't want to bounce my whole evironment unless I have to.</p>

<p>There's no way to tell Helm to do this, but also no need.  If you submit an object to the Kubernetes API server that exactly matches something that's already there, generally nothing will happen.</p>
<p>For example, say you have a Deployment object that specifies <code>image: my/image:{{ .Values.tag }}</code> and <code>replicas: 3</code>.  You submit this once with <code>tag: 20200904.01</code>.  Now you run the <code>helm upgrade</code> command you show, with that <code>tag</code> value unchanged in the <code>CustomEnvironmentData.yaml</code> file.  This will in fact trigger the deployment controller inside Kubernetes.  That sees that it wants 3 pods to exist with the image <code>my/image:20200904.01</code>.  Those 3 pods already exist, so it does nothing.</p>
<p>(This is essentially the same as the &quot;don't use the <code>latest</code> tag&quot; advice: if you try to set <code>image: my/image:latest</code>, and redeploy your Deployment with this tag, since the Deployment spec is unchanged Kubernetes won't do anything, even if the version of the image in the registry has changed.)</p>
