<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Flux – Helm Controller</title><link>https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/</link><description>Recent content in Helm Controller on Flux</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/index.xml" rel="self" type="application/rss+xml"/><item><title>Flux: Controller Options</title><link>https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/options/</guid><description>
&lt;p>To customise the controller options at install time,
please see the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/installation/configuration/bootstrap-customization/">bootstrap customization guide&lt;/a>.&lt;/p>
&lt;h2 id="flags">Flags&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>--concurrent&lt;/code>&lt;/td>
&lt;td>int&lt;/td>
&lt;td>The number of concurrent HelmRelease reconciles. (default 4)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--default-kubeconfig-service-account&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Default service account used for kubeconfig.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--default-service-account&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Default service account used for impersonation.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--enable-leader-election&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Enable leader election for controller manager. Enabling this will ensure there is only one active controller manager.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--events-addr&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The address of the events receiver.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--graceful-shutdown-timeout&lt;/code>&lt;/td>
&lt;td>int&lt;/td>
&lt;td>The duration given to the reconciler to finish before forcibly stopping. (default 600s)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--health-addr&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The address the health endpoint binds to. (default &amp;ldquo;:9440&amp;rdquo;)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--http-retry&lt;/code>&lt;/td>
&lt;td>int&lt;/td>
&lt;td>The maximum number of retries when failing to fetch artifacts over HTTP. (default 9)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--insecure-kubeconfig-exec&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Allow use of the user.exec section in kubeconfigs provided for remote apply.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--insecure-kubeconfig-tls&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Allow that kubeconfigs provided for remote apply can disable TLS verification.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--interval-jitter-percentage&lt;/code>&lt;/td>
&lt;td>uint8&lt;/td>
&lt;td>Percentage of jitter to apply to interval durations. A value of 10 will apply a jitter of +/-10% to the interval duration. It cannot be negative, and must be less than 100. (default 5)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--leader-election-lease-duration&lt;/code>&lt;/td>
&lt;td>duration&lt;/td>
&lt;td>Interval at which non-leader candidates will wait to force acquire leadership (duration string). (default 35s)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--leader-election-release-on-cancel&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Defines if the leader should step down voluntarily on controller manager shutdown. (default true)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--leader-election-renew-deadline&lt;/code>&lt;/td>
&lt;td>duration&lt;/td>
&lt;td>Duration that the leading controller manager will retry refreshing leadership before giving up (duration string). (default 30s)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--leader-election-retry-period&lt;/code>&lt;/td>
&lt;td>duration&lt;/td>
&lt;td>Duration the LeaderElector clients should wait between tries of actions (duration string). (default 5s)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--log-encoding&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Log encoding format. Can be &amp;lsquo;json&amp;rsquo; or &amp;lsquo;console&amp;rsquo;. (default &amp;ldquo;json&amp;rdquo;)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--log-level&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Log verbosity level. Can be one of &amp;rsquo;trace&amp;rsquo;, &amp;lsquo;debug&amp;rsquo;, &amp;lsquo;info&amp;rsquo;, &amp;rsquo;error&amp;rsquo;. (default &amp;ldquo;info&amp;rdquo;)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--max-retry-delay&lt;/code>&lt;/td>
&lt;td>duration&lt;/td>
&lt;td>The maximum amount of time for which an object being reconciled will have to wait before a retry. (default 15m0s)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--metrics-addr&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The address the metric endpoint binds to. (default &amp;ldquo;:8080&amp;rdquo;)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--min-retry-delay&lt;/code>&lt;/td>
&lt;td>duration&lt;/td>
&lt;td>The minimum amount of time for which an object being reconciled will have to wait before a retry. (default 750ms)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--no-cross-namespace-refs&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>When set to true, references between custom resources are allowed only if the reference and the referee are in the same namespace.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--oom-watch-interval&lt;/code>&lt;/td>
&lt;td>duration&lt;/td>
&lt;td>The interval at which the OOM watcher will check for memory usage. Requires feature gate &amp;lsquo;OOMWatch&amp;rsquo; to be enabled. (default 500ms)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--oom-watch-memory-threshold&lt;/code>&lt;/td>
&lt;td>unit8&lt;/td>
&lt;td>The memory threshold in percentage at which the OOM watcher will trigger a graceful shutdown. Requires feature gate &amp;lsquo;OOMWatch&amp;rsquo; to be enabled. (default 95)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--oom-watch-max-memory-path&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The path to the cgroup memory limit file. Requires feature gate &amp;lsquo;OOMWatch&amp;rsquo; to be enabled. If not set, the path will be automatically detected.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--oom-watch-current-memory-path&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The path to the cgroup current memory usage file. Requires feature gate &amp;lsquo;OOMWatch&amp;rsquo; to be enabled. If not set, the path will be automatically detected.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--override-manager&lt;/code>&lt;/td>
&lt;td>stringArray&lt;/td>
&lt;td>List of field managers to override during drift detection e.g. &amp;lsquo;&amp;ndash;override-manager=kubectl-edit &amp;ndash;override-manager=kubectl-patch&amp;rsquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--requeue-dependency&lt;/code>&lt;/td>
&lt;td>duration&lt;/td>
&lt;td>The interval at which failing dependencies are reevaluated. (default 30s)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--snapshot-digest-algo&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The algorithm to use to calculate the digest of Helm release storage snapshots. (default &amp;ldquo;sha256&amp;rdquo;)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--token-cache-max-size&lt;/code>&lt;/td>
&lt;td>int&lt;/td>
&lt;td>The maximum amount of entries in the LRU cache used for tokens. (default 100, enabled)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--token-cache-max-duration&lt;/code>&lt;/td>
&lt;td>duration&lt;/td>
&lt;td>The maximum duration for which a token would be considered unexpired. This is capped at 1h. (default 1h)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--watch-all-namespaces&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Watch for custom resources in all namespaces, if set to false it will only watch the runtime namespace. (default true)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--watch-configs-label-selector&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Watch for ConfigMaps and Secrets with matching labels (default &amp;lsquo;reconcile.fluxcd.io/watch=Enabled&amp;rsquo;).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--watch-label-selector&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Watch for resources with matching labels e.g. &amp;lsquo;sharding.fluxcd.io/key=shard1&amp;rsquo;.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>--feature-gates&lt;/code>&lt;/td>
&lt;td>mapStringBool&lt;/td>
&lt;td>A comma separated list of key=value pairs defining the state of experimental features.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="feature-gates">Feature Gates&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Default Value&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>AdditiveCELDependencyCheck&lt;/code>&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>Run both the built-in health checks and the CEL expression &lt;code>readyExpr&lt;/code> when &lt;code>readyExpr&lt;/code> is configured on a HelmRelease.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>AdoptLegacyReleases&lt;/code>&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;td>Enables the adoption of the historical Helm release based on the status fields from a v2beta1 HelmRelease object. This is enabled by default to support an upgrade path from v2beta1 to v2beta2 without the need to upgrade the Helm release.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>AllowDNSLookups&lt;/code>&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>Allows the controller to perform DNS lookups when rendering Helm templates. This is disabled by default, as it can be a security risk.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>CacheSecretsAndConfigMaps&lt;/code>&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>Configures the caching of Secrets and ConfigMaps by the controller-runtime client. When enabled, it will cache both object types, resulting in increased memory usage and cluster-wide RBAC permissions (list and watch).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>DisableChartDigestTracking&lt;/code>&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>Disables the tracking of digest changes for Helm OCI charts. When set to &lt;code>true&lt;/code>, the controller will not append the OCI digest to the chart version in &lt;code>Chart.yaml&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>DisableConfigWatchers&lt;/code>&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>Disables the watchers for ConfigMaps and Secrets.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>ExternalArtifact&lt;/code>&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;td>Enables support for the
&lt;a href="https://github.com/fluxcd/source-controller/blob/main/docs/spec/v1/externalartifacts.md" target="_blank">ExternalArtifact&lt;/a> source type.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>ObjectLevelWorkloadIdentity&lt;/code>&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>Enables the use of object-level workload identity for the controller.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>OOMWatch&lt;/code>&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>Enables the OOM watcher, which will gracefully shut down the controller when the memory usage exceeds the configured limit. This is disabled by default.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Flux: Helm Releases</title><link>https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/helmreleases/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/helmreleases/</guid><description>
&lt;p>The &lt;code>HelmRelease&lt;/code> API allows for controller-driven reconciliation of Helm
releases via Helm actions such as install, upgrade, test, uninstall, and
rollback. In addition to this, it detects and corrects cluster state drift
from the desired release state.&lt;/p>
&lt;h2 id="example">Example&lt;/h2>
&lt;p>The following is an example of a HelmRelease which installs the
&lt;a href="https://github.com/stefanprodan/podinfo/tree/master/charts/podinfo" target="_blank">podinfo Helm chart&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>https://stefanprodan.github.io/podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">timeout&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#39;6.5.*&amp;#39;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">releaseName&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">install&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">remediation&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">retries&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">3&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">upgrade&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">remediation&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">retries&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">3&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">test&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">enable&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">driftDetection&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">mode&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>enabled&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ignore&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">paths&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#4070a0">&amp;#34;/spec/replicas&amp;#34;&lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">target&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Deployment&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">replicaCount&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">2&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In the above example:&lt;/p>
&lt;ul>
&lt;li>A
&lt;a href="https://fluxcd.io/flux/components/source/helmrepositories/" target="_blank">HelmRepository&lt;/a>
named &lt;code>podinfo&lt;/code> is created, pointing to the Helm repository from which the
podinfo chart can be installed.&lt;/li>
&lt;li>A HelmRelease named &lt;code>podinfo&lt;/code> is created, that will create a
&lt;a href="https://fluxcd.io/flux/components/source/helmcharts/" target="_blank">HelmChart&lt;/a> object
from
&lt;a href="#chart-template">the &lt;code>.spec.chart&lt;/code>&lt;/a> and watch it for Artifact changes.&lt;/li>
&lt;li>The controller will fetch the chart from the HelmChart&amp;rsquo;s Artifact and use it
together with the &lt;code>.spec.releaseName&lt;/code> and &lt;code>.spec.values&lt;/code> to confirm if the
Helm release exists and is up-to-date.&lt;/li>
&lt;li>If the Helm release does not exist, is not up-to-date, or has not observed to
be made by the controller based on
&lt;a href="#history">the HelmRelease&amp;rsquo;s history&lt;/a>, then
the controller will install or upgrade the release. If this fails, it is
allowed to retry the operation a number of times while requeueing between
attempts, as defined by the respective
&lt;a href="#configuring-failure-handling">remediation configurations&lt;/a>.&lt;/li>
&lt;li>If the
&lt;a href="#test-configuration">Helm tests&lt;/a> for the release have not been run
before for this release, the HelmRelease will run them.&lt;/li>
&lt;li>When the Helm release in storage is up-to-date, the controller will check if
the release in the cluster has drifted from the desired state, as defined by
the
&lt;a href="#drift-detection">drift detection configuration&lt;/a>. If it has, the
controller will
&lt;a href="#drift-correction">correct the drift&lt;/a> by re-applying the
desired state.&lt;/li>
&lt;li>The controller will repeat the above steps at the interval defined by
&lt;code>.spec.interval&lt;/code>, or when the configuration changes in a way that affects the
desired state of the Helm release (e.g. a new chart version or values).&lt;/li>
&lt;/ul>
&lt;p>You can run this example by saving the manifest into &lt;code>podinfo.yaml&lt;/code>.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Apply the resource on the cluster:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>kubectl apply -f podinfo.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Run &lt;code>kubectl get helmrelease&lt;/code> to see the HelmRelease:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-console" data-lang="console">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">NAME AGE READY STATUS
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">podinfo 15s True Helm test succeeded for release default/podinfo.v1 with chart podinfo@6.5.3: 3 test hooks completed successfully
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Run &lt;code>kubectl describe helmrelease podinfo&lt;/code> to see the
&lt;a href="#conditions">Conditions&lt;/a>
and
&lt;a href="#history">History&lt;/a> in the HelmRelease&amp;rsquo;s Status:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-console" data-lang="console">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">Status:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Conditions:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Transition Time: 2023-12-04T14:17:47Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Message: Helm test succeeded for release default/podinfo.v1 with chart podinfo@6.5.3: 3 test hooks completed successfully
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Observed Generation: 1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Reason: TestSucceeded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Status: True
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Type: Ready
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Transition Time: 2023-12-04T14:17:39Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Message: Helm install succeeded for release default/podinfo.v1 with chart podinfo@6.5.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Observed Generation: 1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Reason: InstallSucceeded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Status: True
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Type: Released
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Transition Time: 2023-12-04T14:17:47Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Message: Helm test succeeded for release default/podinfo.v1 with chart podinfo@6.5.3: 3 test hooks completed successfully
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Observed Generation: 1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Reason: TestSucceeded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Status: True
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Type: TestSuccess
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Helm Chart: default/default-podinfo
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> History:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Chart Name: podinfo
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Chart Version: 6.5.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Config Digest: sha256:e15c415d62760896bd8bec192a44c5716dc224db9e0fc609b9ac14718f8f9e56
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Digest: sha256:e59aeb8b854f42e44756c2ef552a073051f1fc4f90e68aacbae7f824139580bc
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> First Deployed: 2023-12-04T14:17:35Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Deployed: 2023-12-04T14:17:35Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Name: podinfo
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Namespace: default
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Status: deployed
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Test Hooks:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Podinfo - Grpc - Test - Scyhk:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Completed: 2023-12-04T14:17:42Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Started: 2023-12-04T14:17:39Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Phase: Succeeded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Podinfo - Jwt - Test - Scddu:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Completed: 2023-12-04T14:17:45Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Started: 2023-12-04T14:17:42Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Phase: Succeeded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Podinfo - Service - Test - Uibss:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Completed: 2023-12-04T14:17:47Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Started: 2023-12-04T14:17:45Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Phase: Succeeded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Version: 1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Applied Revision: 6.5.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Attempted Config Digest: sha256:e15c415d62760896bd8bec192a44c5716dc224db9e0fc609b9ac14718f8f9e56
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Attempted Generation: 1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Attempted Release Action: install
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Attempted Revision: 6.5.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Observed Generation: 1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Storage Namespace: default
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">Events:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Type Reason Age From Message
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> ---- ------ ---- ---- -------
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal HelmChartCreated 23s helm-controller Created HelmChart/default/default-podinfo with SourceRef &amp;#39;HelmRepository/default/podinfo&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal HelmChartInSync 22s helm-controller HelmChart/default/default-podinfo with SourceRef &amp;#39;HelmRepository/default/podinfo&amp;#39; is in-sync
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal InstallSucceeded 18s helm-controller Helm install succeeded for release default/podinfo.v1 with chart podinfo@6.5.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal TestSucceeded 10s helm-controller Helm test succeeded for release default/podinfo.v1 with chart podinfo@6.5.3: 3 test hooks completed successfully
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="writing-a-helmrelease-spec">Writing a HelmRelease spec&lt;/h2>
&lt;p>As with all other Kubernetes config, a HelmRelease needs &lt;code>apiVersion&lt;/code>,
&lt;code>kind&lt;/code>, and &lt;code>metadata&lt;/code> fields. The name of a HelmRelease object must be a
valid
&lt;a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/names#dns-subdomain-names" target="_blank">DNS subdomain name&lt;/a>.&lt;/p>
&lt;p>A HelmRelease also needs a
&lt;a href="https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status" target="_blank">&lt;code>.spec&lt;/code> section&lt;/a>.&lt;/p>
&lt;h3 id="chart-template">Chart template&lt;/h3>
&lt;p>&lt;code>.spec.chart&lt;/code> is an optional field used by the helm-controller as a template to
create a new
&lt;a href="https://fluxcd.io/flux/components/source/helmcharts/" target="_blank">HelmChart resource&lt;/a>.&lt;/p>
&lt;p>The spec for the HelmChart is provided via &lt;code>.spec.chart.spec&lt;/code>, refer to
&lt;a href="https://fluxcd.io/flux/components/source/helmcharts/#writing-a-helmchart-spec" target="_blank">writing a HelmChart spec&lt;/a>
for in-depth information.&lt;/p>
&lt;p>Annotations and labels can be added by configuring the respective
&lt;code>.spec.chart.metadata&lt;/code> fields.&lt;/p>
&lt;p>The HelmChart is created in the same namespace as the &lt;code>.sourceRef&lt;/code>, with a name
matching the HelmRelease&amp;rsquo;s &lt;code>&amp;lt;.metadata.namespace&amp;gt;-&amp;lt;.metadata.name&amp;gt;&lt;/code>, and will
be reported in &lt;code>.status.helmChart&lt;/code>.&lt;/p>
&lt;p>The chart version of the last release attempt is reported in
&lt;code>.status.lastAttemptedRevision&lt;/code>. The controller will automatically perform a
Helm release when the HelmChart produces a new chart (version).&lt;/p>
&lt;p>&lt;strong>Warning:&lt;/strong> Changing the &lt;code>.spec.chart&lt;/code> to a Helm chart with a different name
(as specified in the chart&amp;rsquo;s &lt;code>Chart.yaml&lt;/code>) will cause the controller to
uninstall any previous release before installing the new one.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> On multi-tenant clusters, platform admins can disable cross-namespace
references with the &lt;code>--no-cross-namespace-refs=true&lt;/code> flag. When this flag is
set, the HelmRelease can only refer to Sources in the same namespace as the
HelmRelease object.&lt;/p>
&lt;h3 id="chart-reference">Chart reference&lt;/h3>
&lt;p>&lt;code>.spec.chartRef&lt;/code> is an optional field used to refer to the Source object which has an
Artifact containing the Helm chart. It has two required fields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>kind&lt;/code>: The Kind of the referred Source object. Supported Source types:
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/" target="_blank">OCIRepository&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/source/helmcharts/" target="_blank">HelmChart&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/source/externalartifacts/" target="_blank">ExternalArtifact&lt;/a> (requires &lt;code>--feature-gates=ExternalArtifact=true&lt;/code> flag)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>name&lt;/code>: The Name of the referred Source object.&lt;/li>
&lt;/ul>
&lt;p>For a referenced resource of kind &lt;code>OCIRepository&lt;/code>, the chart version of the last
release attempt is reported in &lt;code>.status.lastAttemptedRevision&lt;/code>. The version is in
the format &lt;code>&amp;lt;version&amp;gt;+&amp;lt;digest[0:12]&amp;gt;&lt;/code>. The digest of the OCI artifact is appended
to the version to ensure that a change in the artifact content triggers a new release.
The controller will automatically perform a Helm upgrade when the &lt;code>OCIRepository&lt;/code>
detects a new digest in the OCI artifact stored in registry, even if the version
inside &lt;code>Chart.yaml&lt;/code> is unchanged.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> Disabling the appending of the digest to the chart version can be done
with the &lt;code>--feature-gates=DisableChartDigestTracking=true&lt;/code> controller flag.&lt;/p>
&lt;p>&lt;strong>Warning:&lt;/strong> One of &lt;code>.spec.chart&lt;/code> or &lt;code>.spec.chartRef&lt;/code> must be set, but not both.
When switching from &lt;code>.spec.chart&lt;/code> to &lt;code>.spec.chartRef&lt;/code>, the controller will perform
an Helm upgrade and will garbage collect the old HelmChart object.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> On multi-tenant clusters, platform admins can disable cross-namespace
references with the &lt;code>--no-cross-namespace-refs=true&lt;/code> controller flag. When this flag is
set, the HelmRelease can only refer to OCIRepositories in the same namespace as the
HelmRelease object.&lt;/p>
&lt;h4 id="ocirepository-reference-example">OCIRepository reference example&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>10m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">layerSelector&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">mediaType&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;application/vnd.cncf.helm.chart.content.v1.tar+gzip&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">operation&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>copy&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>oci://ghcr.io/stefanprodan/charts/podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">semver&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;&amp;gt;= 6.0.0&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>10m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chartRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">replicaCount&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">2&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="helmchart-reference-example">HelmChart reference example&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmChart&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>10m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;6.x&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">valuesFiles&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- values-prod.yaml&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>10m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chartRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmChart&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">replicaCount&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">2&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="release-name">Release name&lt;/h3>
&lt;p>&lt;code>.spec.releaseName&lt;/code> is an optional field used to specify the name of the Helm
release. It defaults to a composition of &lt;code>[&amp;lt;target namespace&amp;gt;-]&amp;lt;name&amp;gt;&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Warning:&lt;/strong> Changing the release name of a HelmRelease which has already been
installed will not rename the release. Instead, the existing release will be
uninstalled before installing a new release with the new name.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> When the composition exceeds the maximum length of 53 characters, the
name is shortened by hashing the release name with SHA-256. The resulting name
is then composed of the first 40 characters of the release name, followed by a
dash (&lt;code>-&lt;/code>), followed by the first 12 characters of the hash. For example,
&lt;code>a-very-lengthy-target-namespace-with-a-nice-object-name&lt;/code> becomes
&lt;code>a-very-lengthy-target-namespace-with-a-nic-97af5d7f41f3&lt;/code>.&lt;/p>
&lt;h3 id="target-namespace">Target namespace&lt;/h3>
&lt;p>&lt;code>.spec.targetNamespace&lt;/code> is an optional field used to specify the namespace to
which the Helm release is made. It defaults to the namespace of the
HelmRelease.&lt;/p>
&lt;p>&lt;strong>Warning:&lt;/strong> Changing the target namespace of a HelmRelease which has already
been installed will not move the release to the new namespace. Instead, the
existing release will be uninstalled before installing a new release in the new
target namespace.&lt;/p>
&lt;h3 id="storage-namespace">Storage namespace&lt;/h3>
&lt;p>&lt;code>.spec.storageNamespace&lt;/code> is an optional field used to specify the namespace
in which Helm stores release information. It defaults to the namespace of the
HelmRelease.&lt;/p>
&lt;p>&lt;strong>Warning:&lt;/strong> Changing the storage namespace of a HelmRelease which has already
been installed will not move the release to the new namespace. Instead, the
existing release will be uninstalled before installing a new release in the new
storage namespace.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> When making use of the Helm CLI and attempting to make use of
&lt;code>helm get&lt;/code> commands to inspect a release, the &lt;code>-n&lt;/code> flag should target the
storage namespace of the HelmRelease.&lt;/p>
&lt;h3 id="service-account-reference">Service Account reference&lt;/h3>
&lt;p>&lt;code>.spec.serviceAccountName&lt;/code> is an optional field used to specify the
Service Account to be impersonated while reconciling the HelmRelease.
For more information, refer to
&lt;a href="#role-based-access-control">Role-based access control&lt;/a>.&lt;/p>
&lt;h3 id="persistent-client">Persistent client&lt;/h3>
&lt;p>&lt;code>.spec.persistentClient&lt;/code> is an optional field to instruct the controller to use
a persistent Kubernetes client for this release. If specified, the client will
be reused for the duration of the reconciliation, instead of being created and
destroyed for each (step of a) Helm action. If not set, it defaults to &lt;code>true.&lt;/code>&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> This method generally boosts performance but could potentially cause
complications with specific Helm charts. For instance, charts creating Custom
Resource Definitions outside Helm&amp;rsquo;s CRD lifecycle hooks during installation
might face issues where these resources are not recognized as available,
especially by post-install hooks.&lt;/p>
&lt;h3 id="max-history">Max history&lt;/h3>
&lt;p>&lt;code>.spec.maxHistory&lt;/code> is an optional field to configure the number of release
revisions saved by Helm. If not set, it defaults to &lt;code>5&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> Although setting this to &lt;code>0&lt;/code> for an unlimited number of revisions is
permissible, it is advised against due to performance reasons.&lt;/p>
&lt;h3 id="dependencies">Dependencies&lt;/h3>
&lt;p>&lt;code>.spec.dependsOn&lt;/code> is an optional list to refer to other HelmRelease objects
which the HelmRelease depends on. If specified, the HelmRelease is only allowed
to proceed after the referred HelmReleases are ready, i.e. have the &lt;code>Ready&lt;/code>
condition marked as &lt;code>True&lt;/code>.&lt;/p>
&lt;p>This is helpful when there is a need to make sure other resources exist before
the workloads defined in a HelmRelease are released. For example, before
installing objects of a certain Custom Resource kind, the Custom Resource
Defintions and the related controller must exist in the cluster.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>backend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># ...omitted for brevity &lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>frontend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># ...omitted for brevity&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">dependsOn&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>backend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> Circular dependencies between HelmRelease resources must be avoided,
otherwise the interdependent HelmRelease resources will never be reconciled.&lt;/p>
&lt;h4 id="dependency-ready-expression">Dependency Ready Expression&lt;/h4>
&lt;p>&lt;code>.spec.dependsOn[].readyExpr&lt;/code> is an optional field that can be used to define a CEL expression
to determine the readiness of a HelmRelease dependency.&lt;/p>
&lt;p>This is helpful for when custom logic is needed to determine if a dependency is ready.
For example, when performing a lockstep upgrade, the &lt;code>readyExpr&lt;/code> can be used to
verify that a dependency has a matching version in values before proceeding with the
reconciliation of the dependent HelmRelease.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>backend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># ...omitted for brevity&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">app&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>v1.2.3&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>frontend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># ...omitted for brevity&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">app&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>v1.2.3&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">dependsOn&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>backend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">readyExpr&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&amp;gt;&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> dep.spec.values.app.version == self.spec.values.app.version &amp;amp;&amp;amp;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> dep.status.conditions.filter(e, e.type == &amp;#39;Ready&amp;#39;).all(e, e.status == &amp;#39;True&amp;#39;) &amp;amp;&amp;amp;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> dep.metadata.generation == dep.status.observedGeneration&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The CEL expression contains the following variables:&lt;/p>
&lt;ul>
&lt;li>&lt;code>dep&lt;/code>: The dependency HelmRelease object being evaluated.&lt;/li>
&lt;li>&lt;code>self&lt;/code>: The HelmRelease object being reconciled.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Note:&lt;/strong> When &lt;code>readyExpr&lt;/code> is specified, the built-in readiness check is replaced by the logic
defined in the CEL expression. You can configure the controller to run both the CEL expression
evaluation and the built-in readiness check, with the &lt;code>AdditiveCELDependencyCheck&lt;/code>
&lt;a href="https://fluxcd.io/flux/components/helm/options/#feature-gates" target="_blank">feature gate&lt;/a>.&lt;/p>
&lt;h3 id="values">Values&lt;/h3>
&lt;p>The values for the Helm release can be specified in two ways:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="#values-references">Values references&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#inline-values">Inline values&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Changes to the combined values will trigger a new Helm release.&lt;/p>
&lt;h4 id="values-references">Values references&lt;/h4>
&lt;p>&lt;code>.spec.valuesFrom&lt;/code> is an optional list to refer to ConfigMap and Secret
resources from which to take values. The values are merged in the order given,
with the later values overwriting earlier, and then
&lt;a href="#inline-values">inline values&lt;/a>
overwriting those. When &lt;code>targetPath&lt;/code> is set, it will overwrite everything before,
including inline values.&lt;/p>
&lt;p>An item on the list offers the following subkeys:&lt;/p>
&lt;ul>
&lt;li>&lt;code>kind&lt;/code>: Kind of the values referent, supported values are &lt;code>ConfigMap&lt;/code> and
&lt;code>Secret&lt;/code>.&lt;/li>
&lt;li>&lt;code>name&lt;/code>: The &lt;code>.metadata.name&lt;/code> of the values referent, in the same namespace as
the HelmRelease.&lt;/li>
&lt;li>&lt;code>valuesKey&lt;/code> (Optional): The &lt;code>.data&lt;/code> key where the values.yaml or a specific
value can be found. Defaults to &lt;code>values.yaml&lt;/code> when omitted.&lt;/li>
&lt;li>&lt;code>targetPath&lt;/code> (Optional): The YAML dot notation path at which the value should
be merged. When set, the valuesKey is expected to be a single flat value.
Defaults to empty when omitted, which results in the values getting merged at
the root.&lt;/li>
&lt;li>&lt;code>optional&lt;/code> (Optional): Whether this values reference is optional. When
&lt;code>true&lt;/code>, a not found error for the values reference is ignored, but any
&lt;code>valuesKey&lt;/code>, &lt;code>targetPath&lt;/code> or transient error will still result in a
reconciliation failure. Defaults to &lt;code>false&lt;/code> when omitted.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">valuesFrom&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ConfigMap&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>prod-env-values&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">valuesKey&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>values-prod.yaml&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Secret&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>prod-tls-values&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">valuesKey&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>crt&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">targetPath&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>tls.crt&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">optional&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> The &lt;code>targetPath&lt;/code> supports the same formatting as you would supply as
an argument to the &lt;code>helm&lt;/code> binary using &lt;code>--set [path]=[value]&lt;/code>. In addition to
this, the referred value can contain the same value formats (e.g. &lt;code>{a,b,c}&lt;/code> for
a list). You can read more about the available formats and limitations in the
&lt;a href="https://helm.sh/docs/intro/using_helm/#the-format-and-limitations-of---set" target="_blank">Helm documentation&lt;/a>.&lt;/p>
&lt;p>For JSON strings, the
&lt;a href="https://github.com/helm/helm/issues/5618" target="_blank">limitations are the same as while using &lt;code>helm&lt;/code>&lt;/a>
and require you to escape the full JSON string (including &lt;code>=&lt;/code>, &lt;code>[&lt;/code>, &lt;code>,&lt;/code>, &lt;code>.&lt;/code>).&lt;/p>
&lt;p>To make a HelmRelease react immediately to changes in the referenced Secret
or ConfigMap see
&lt;a href="#reacting-immediately-to-configuration-dependencies">this&lt;/a>
section.&lt;/p>
&lt;h4 id="inline-values">Inline values&lt;/h4>
&lt;p>&lt;code>.spec.values&lt;/code> is an optional field to inline values within a HelmRelease. When
&lt;a href="#values-references">values references&lt;/a> are defined, inline values are merged
with the values from these references, overwriting any existing ones.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">replicaCount&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">2&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="install-configuration">Install configuration&lt;/h3>
&lt;p>&lt;code>.spec.install&lt;/code> is an optional field to specify the configuration for the
controller to use when running a
&lt;a href="https://helm.sh/docs/helm/helm_install/" target="_blank">Helm install action&lt;/a>.&lt;/p>
&lt;p>The field offers the following subfields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.timeout&lt;/code> (Optional): The time to wait for any individual Kubernetes
operation (like Jobs for hooks) during the installation of the chart.
Defaults to the
&lt;a href="#timeout">global timeout value&lt;/a>.&lt;/li>
&lt;li>&lt;code>.crds&lt;/code> (Optional): The Custom Resource Definition install policy to use.
Valid values are &lt;code>Skip&lt;/code>, &lt;code>Create&lt;/code> and &lt;code>CreateReplace&lt;/code>. Default is &lt;code>Create&lt;/code>,
which will create Custom Resource Definitions when they do not exist. Refer
to
&lt;a href="#controlling-the-lifecycle-of-custom-resource-definitions">Custom Resource Definition lifecycle&lt;/a>
for more information.&lt;/li>
&lt;li>&lt;code>.replace&lt;/code> (Optional): Instructs Helm to re-use the
&lt;a href="#release-name">release name&lt;/a>,
but only if that name is a deleted release which remains in the history.
Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.createNamespace&lt;/code> (Optional): Instructs Helm to create the
&lt;a href="#target-namespace">target namespace&lt;/a>
if it does not exist. On uninstall, the created namespace will not be garbage
collected. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableHooks&lt;/code> (Optional): Prevents
&lt;a href="https://helm.sh/docs/topics/charts_hooks/" target="_blank">chart hooks&lt;/a>
from running during the installation of the chart. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableOpenAPIValidation&lt;/code> (Optional): Prevents Helm from validating the
rendered templates against the Kubernetes OpenAPI Schema. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableSchemaValidation&lt;/code> (Optional): Prevents Helm from validating the
values against the JSON Schema. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableTakeOwnership&lt;/code> (Optional): Disables taking ownership of existing resources
during the Helm install action. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableWait&lt;/code> (Optional): Disables waiting for resources to be ready after
the installation of the chart. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableWaitForJobs&lt;/code> (Optional): Disables waiting for any Jobs to complete
after the installation of the chart. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h4 id="install-strategy">Install strategy&lt;/h4>
&lt;p>&lt;code>.spec.install.strategy&lt;/code> is an optional field to specify the strategy
to use when running a Helm install action.&lt;/p>
&lt;p>The field offers the following subfields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.name&lt;/code> (Required): The name of the install strategy to use. One of
&lt;code>RemediateOnFailure&lt;/code> or &lt;code>RetryOnFailure&lt;/code>.
If the &lt;code>.spec.install.strategy&lt;/code> field is not specified, the HelmRelease
reconciliation behaves as if &lt;code>.spec.install.strategy.name&lt;/code> was set to
&lt;code>RemediateOnFailure&lt;/code>.&lt;/li>
&lt;li>&lt;code>.retryInterval&lt;/code> (Optional): The time to wait between retries of failed
releases when the install strategy is set to &lt;code>RetryOnFailure&lt;/code>. Defaults
to &lt;code>5m&lt;/code>. Cannot be used with &lt;code>RemediateOnFailure&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>The default &lt;code>RemediateOnFailure&lt;/code> strategy applies the rules defined by the
&lt;code>.spec.install.remediation&lt;/code> field to the install action, i.e. the same
behavior of the controller prior to the introduction of the &lt;code>RetryOnFailure&lt;/code>
strategy.&lt;/p>
&lt;p>The &lt;code>RetryOnFailure&lt;/code> strategy will retry a failed install with an upgrade
after the interval defined by the &lt;code>.spec.install.strategy.retryInterval&lt;/code>
field.&lt;/p>
&lt;h4 id="install-remediation">Install remediation&lt;/h4>
&lt;p>&lt;code>.spec.install.remediation&lt;/code> is an optional field to configure the remediation
strategy to use when the installation of a Helm chart fails.&lt;/p>
&lt;p>The field offers the following subfields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.retries&lt;/code> (Optional): The number of retries that should be attempted on
failures before bailing. Remediation, using an
&lt;a href="#uninstall-configuration">uninstall&lt;/a>,
is performed between each attempt. Defaults to &lt;code>0&lt;/code>, a negative integer equals
to an infinite number of retries.&lt;/li>
&lt;li>&lt;code>.ignoreTestFailures&lt;/code> (Optional): Instructs the controller to not remediate
when a
&lt;a href="#test-configuration">Helm test&lt;/a> failure occurs. Defaults to
&lt;code>.spec.test.ignoreFailures&lt;/code>.&lt;/li>
&lt;li>&lt;code>.remediateLastFailure&lt;/code> (Optional): Instructs the controller to remediate the
last failure when no retries remain. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h3 id="upgrade-configuration">Upgrade configuration&lt;/h3>
&lt;p>&lt;code>.spec.upgrade&lt;/code> is an optional field to specify the configuration for the
controller to use when running a
&lt;a href="https://helm.sh/docs/helm/helm_upgrade/" target="_blank">Helm upgrade action&lt;/a>.&lt;/p>
&lt;p>The field offers the following subfields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.timeout&lt;/code> (Optional): The time to wait for any individual Kubernetes
operation (like Jobs for hooks) during the upgrade of the release.
Defaults to the
&lt;a href="#timeout">global timeout value&lt;/a>.&lt;/li>
&lt;li>&lt;code>.crds&lt;/code> (Optional): The Custom Resource Definition upgrade policy to use.
Valid values are &lt;code>Skip&lt;/code>, &lt;code>Create&lt;/code> and &lt;code>CreateReplace&lt;/code>. Default is &lt;code>Skip&lt;/code>.
Refer to
&lt;a href="#controlling-the-lifecycle-of-custom-resource-definitions">Custom Resource Definition lifecycle&lt;/a>
for more information.&lt;/li>
&lt;li>&lt;code>.cleanupOnFail&lt;/code> (Optional): Allows deletion of new resources created during
the upgrade of the release when it fails. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableHooks&lt;/code> (Optional): Prevents
&lt;a href="https://helm.sh/docs/topics/charts_hooks/" target="_blank">chart hooks&lt;/a>
from running during the upgrade of the release. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableOpenAPIValidation&lt;/code> (Optional): Prevents Helm from validating the
rendered templates against the Kubernetes OpenAPI Schema. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableSchemaValidation&lt;/code> (Optional): Prevents Helm from validating the
values against the JSON Schema. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableTakeOwnership&lt;/code> (Optional): Disables taking ownership of existing resources
during the Helm upgrade action. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableWait&lt;/code> (Optional): Disables waiting for resources to be ready after
upgrading the release. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableWaitForJobs&lt;/code> (Optional): Disables waiting for any Jobs to complete
after upgrading the release. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.force&lt;/code> (Optional): Forces resource updates through a replacement strategy.
Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.preserveValues&lt;/code> (Optional): Instructs Helm to re-use the values from the
last release while merging in overrides from
&lt;a href="#values">values&lt;/a>. Setting
this flag makes the HelmRelease non-declarative. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h4 id="upgrade-strategy">Upgrade strategy&lt;/h4>
&lt;p>&lt;code>.spec.upgrade.strategy&lt;/code> is an optional field to specify the strategy
to use when running a Helm upgrade action.&lt;/p>
&lt;p>The field offers the following subfields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.name&lt;/code> (Required): The name of the upgrade strategy to use. One of
&lt;code>RemediateOnFailure&lt;/code> or &lt;code>RetryOnFailure&lt;/code>. If the &lt;code>.spec.upgrade.strategy&lt;/code>
field is not specified, the HelmRelease reconciliation behaves as if
&lt;code>.spec.upgrade.strategy.name&lt;/code> was set to &lt;code>RemediateOnFailure&lt;/code>.&lt;/li>
&lt;li>&lt;code>.retryInterval&lt;/code> (Optional): The time to wait between retries of failed
releases when the upgrade strategy is set to &lt;code>RetryOnFailure&lt;/code>. Defaults
to &lt;code>5m&lt;/code>. Cannot be used with &lt;code>RemediateOnFailure&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>The default &lt;code>RemediateOnFailure&lt;/code> strategy applies the rules defined by the
&lt;code>.spec.upgrade.remediation&lt;/code> field to the upgrade action, i.e. the same
behavior of the controller prior to the introduction of the &lt;code>RetryOnFailure&lt;/code>
strategy.&lt;/p>
&lt;p>The &lt;code>RetryOnFailure&lt;/code> strategy will retry failed upgrades in a regular
interval defined by the &lt;code>.spec.upgrade.strategy.retryInterval&lt;/code> field,
without applying any remediation.&lt;/p>
&lt;h4 id="upgrade-remediation">Upgrade remediation&lt;/h4>
&lt;p>&lt;code>.spec.upgrade.remediation&lt;/code> is an optional field to configure the remediation
strategy to use when the upgrade of a Helm release fails.&lt;/p>
&lt;p>The field offers the following subfields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.retries&lt;/code> (Optional): The number of retries that should be attempted on
failures before bailing. Remediation, using the &lt;code>.strategy&lt;/code>, is performed
between each attempt. Defaults to &lt;code>0&lt;/code>, a negative integer equals to an
infinite number of retries.&lt;/li>
&lt;li>&lt;code>.strategy&lt;/code> (Optional): The remediation strategy to use when a Helm upgrade
fails. Valid values are &lt;code>rollback&lt;/code> and &lt;code>uninstall&lt;/code>. Defaults to &lt;code>rollback&lt;/code>.&lt;/li>
&lt;li>&lt;code>.ignoreTestFailures&lt;/code> (Optional): Instructs the controller to not remediate
when a
&lt;a href="#test-configuration">Helm test&lt;/a> failure occurs. Defaults to
&lt;code>.spec.test.ignoreFailures&lt;/code>.&lt;/li>
&lt;li>&lt;code>.remediateLastFailure&lt;/code> (Optional): Instructs the controller to remediate the
last failure when no retries remain. Defaults to &lt;code>false&lt;/code> unless &lt;code>.retries&lt;/code> is
greater than &lt;code>0&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h3 id="test-configuration">Test configuration&lt;/h3>
&lt;p>&lt;code>.spec.test&lt;/code> is an optional field to specify the configuration values for the
&lt;a href="https://helm.sh/docs/helm/helm_test/" target="_blank">Helm test action&lt;/a>.&lt;/p>
&lt;p>To make the controller run the
&lt;a href="https://helm.sh/docs/topics/chart_tests/" target="_blank">Helm tests available for the chart&lt;/a>
after a successful Helm install or upgrade, &lt;code>.spec.test.enable&lt;/code> can be set to
&lt;code>true&lt;/code>. When enabled, the test results will be available in the
&lt;a href="#history">&lt;code>.status.history&lt;/code>&lt;/a> field and emitted as a Kubernetes Event.&lt;/p>
&lt;p>By default, when tests are enabled, failures in tests are considered release
failures, and thus are subject to the triggering Helm action&amp;rsquo;s remediation
configuration. However, test failures can be ignored by setting
&lt;code>.spec.test.ignoreFailures&lt;/code> to &lt;code>true&lt;/code>. In this case, no remediation action
will be taken, and the test failure will not affect the &lt;code>Ready&lt;/code> status
condition. This can be overridden per Helm action by setting the respective
&lt;a href="#install-configuration">install&lt;/a> or
&lt;a href="#upgrade-configuration">upgrade&lt;/a>
configuration option.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">test&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">enable&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ignoreFailures&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="filtering-tests">Filtering tests&lt;/h4>
&lt;p>&lt;code>.spec.test.filters&lt;/code> is an optional list to include or exclude specific tests
from being run.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">test&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">enable&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">filters&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-release-test-connection&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">exclude&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">false&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-release-test-migration&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">exclude&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="rollback-configuration">Rollback configuration&lt;/h3>
&lt;p>&lt;code>.spec.rollback&lt;/code> is an optional field to specify the configuration values for
a
&lt;a href="https://helm.sh/docs/helm/helm_rollback/" target="_blank">Helm rollback action&lt;/a>. This
configuration applies when the
&lt;a href="#upgrade-remediation">upgrade remediation strategy&lt;/a>
is set to &lt;code>rollback&lt;/code>.&lt;/p>
&lt;p>The field offers the following subfields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.timeout&lt;/code> (Optional): The time to wait for any individual Kubernetes
operation (like Jobs for hooks) during the rollback of the release.
Defaults to the
&lt;a href="#timeout">global timeout value&lt;/a>.&lt;/li>
&lt;li>&lt;code>.cleanupOnFail&lt;/code> (Optional): Allows deletion of new resources created during
the rollback of the release when it fails. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableHooks&lt;/code> (Optional): Prevents
&lt;a href="https://helm.sh/docs/topics/charts_hooks/" target="_blank">chart hooks&lt;/a>
from running during the rollback of the release. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableWait&lt;/code> (Optional): Disables waiting for resources to be ready after
rolling back the release. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableWaitForJobs&lt;/code> (Optional): Disables waiting for any Jobs to complete
after rolling back the release. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.force&lt;/code> (Optional): Forces resource updates through a replacement strategy.
Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.recreate&lt;/code> (Optional): Performs Pod restarts if applicable. Defaults to
&lt;code>false&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h3 id="uninstall-configuration">Uninstall configuration&lt;/h3>
&lt;p>&lt;code>.spec.uninstall&lt;/code> is an optional field to specify the configuration values for
a
&lt;a href="https://helm.sh/docs/helm/helm_uninstall/" target="_blank">Helm uninstall action&lt;/a>. This
configuration applies to the
&lt;a href="#install-remediation">install remediation&lt;/a>, and
when the
&lt;a href="#upgrade-remediation">upgrade remediation strategy&lt;/a> is set to
&lt;code>uninstall&lt;/code>.&lt;/p>
&lt;p>The field offers the following subfields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.timeout&lt;/code> (Optional): The time to wait for any individual Kubernetes
operation (like Jobs for hooks) during the uninstalltion of the release.
Defaults to the
&lt;a href="#timeout">global timeout value&lt;/a>.&lt;/li>
&lt;li>&lt;code>.deletionPropagation&lt;/code> (Optional): The
&lt;a href="https://kubernetes.io/docs/tasks/administer-cluster/use-cascading-deletion/" target="_blank">deletion propagation policy&lt;/a>
when a Helm uninstall is performed. Valid values are &lt;code>background&lt;/code>,
&lt;code>foreground&lt;/code> and &lt;code>orphan&lt;/code>. Defaults to &lt;code>background&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableHooks&lt;/code> (Optional): Prevents
&lt;a href="https://helm.sh/docs/topics/charts_hooks/" target="_blank">chart hooks&lt;/a>
from running during the uninstallation of the release. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.disableWait&lt;/code> (Optional): Disables waiting for resources to be deleted after
uninstalling the release. Defaults to &lt;code>false&lt;/code>.&lt;/li>
&lt;li>&lt;code>.keepHistory&lt;/code> (Optional): Instructs Helm to remove all associated resources
and mark the release as deleted, but to retain the release history. Defaults
to &lt;code>false&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h3 id="drift-detection">Drift detection&lt;/h3>
&lt;p>&lt;code>.spec.driftDetection&lt;/code> is an optional field to enable the detection (and
correction) of cluster-state drift compared to the manifest from the Helm
storage.&lt;/p>
&lt;p>When &lt;code>.spec.driftDetection.mode&lt;/code> is set to &lt;code>warn&lt;/code> or &lt;code>enabled&lt;/code>, and the
desired state of the HelmRelease is in-sync with the Helm release object in
the storage, the controller will compare the manifest from the Helm storage
with the current state of the cluster using a
&lt;a href="https://kubernetes.io/docs/reference/using-api/server-side-apply/" target="_blank">server-side dry-run apply&lt;/a>.&lt;/p>
&lt;p>If this comparison detects a drift (either due to a resource being created
or modified during the dry-run), the controller will emit a Kubernetes Event
with a short summary of the detected changes. In addition, a more extensive
&lt;a href="https://datatracker.ietf.org/doc/html/rfc6902" target="_blank">JSON Patch&lt;/a> summary is logged
to the controller logs (with &lt;code>--log-level=debug&lt;/code>).&lt;/p>
&lt;h4 id="drift-correction">Drift correction&lt;/h4>
&lt;p>Furthermore, when &lt;code>.spec.driftDetection.mode&lt;/code> is set to &lt;code>enabled&lt;/code>, the
controller will attempt to correct the drift by creating and patching the
resources based on the server-side dry-run apply result.&lt;/p>
&lt;p>At the end of the correction attempt, it will emit a Kubernetes Event with a
summary of the changes it made and any failures it encountered. In case of a
failure, it will continue to detect and correct drift until the desired state
has been reached, or a new Helm action is triggered (due to e.g. a change to
the spec).&lt;/p>
&lt;h4 id="ignore-rules">Ignore rules&lt;/h4>
&lt;p>&lt;code>.spec.driftDetection.ignore&lt;/code> is an optional field to provide
&lt;a href="https://datatracker.ietf.org/doc/html/rfc6901" target="_blank">JSON Pointers&lt;/a> to ignore while
detecting and correcting drift. This can for example be useful when Horizontal
Pod Autoscaling is enabled for a Deployment, or when a Helm chart has hooks
which mutate a resource.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">driftDetection&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">mode&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>enabled&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ignore&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">paths&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#4070a0">&amp;#34;/spec/replicas&amp;#34;&lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> It is possible to achieve a likewise behavior as using
&lt;a href="#ignore-annotation">ignore annotations&lt;/a> by configuring a JSON Pointer
targeting a whole document (&lt;code>&amp;quot;&amp;quot;&lt;/code>).&lt;/p>
&lt;p>To ignore &lt;code>.paths&lt;/code> in a specific target resource, a &lt;code>.target&lt;/code> selector can be
applied to the ignored paths.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">driftDetection&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ignore&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">paths&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#4070a0">&amp;#34;/spec/replicas&amp;#34;&lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">target&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Deployment&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The following &lt;code>.target&lt;/code> selectors are available, defining multiple fields
causes the selector to be more specific:&lt;/p>
&lt;ul>
&lt;li>&lt;code>group&lt;/code> (Optional): Matches the &lt;code>.apiVersion&lt;/code> group of resources while
offering support for regular expressions. For example, &lt;code>apps&lt;/code>,
&lt;code>helm.toolkit.fluxcd.io&lt;/code> or &lt;code>.*.toolkit.fluxcd.io&lt;/code>.&lt;/li>
&lt;li>&lt;code>version&lt;/code> (Optional): Matches the &lt;code>.apiVersion&lt;/code> version of resources while
offering support for regular expressions. For example, &lt;code>v1&lt;/code>, &lt;code>v2beta2&lt;/code> or
&lt;code>v2beta[\d]&lt;/code>.&lt;/li>
&lt;li>&lt;code>kind&lt;/code> (Optional): Matches the &lt;code>.kind&lt;/code> of resources while offering support
for regular expressions. For example, &lt;code>Deployment&lt;/code>, &lt;code>HelmRelelease&lt;/code> or
&lt;code>(HelmRelease|HelmChart)&lt;/code>.&lt;/li>
&lt;li>&lt;code>name&lt;/code> (Optional): Matches the &lt;code>.metadata.name&lt;/code> of resources while offering
support for regular expressions. For example, &lt;code>podinfo&lt;/code> or &lt;code>podinfo.*&lt;/code>.&lt;/li>
&lt;li>&lt;code>namespace&lt;/code> (Optional): Matches the &lt;code>.metadata.namespace&lt;/code> of resources while
offering support for regular expressions. For example, &lt;code>my-release-ns&lt;/code> or
&lt;code>.*-system&lt;/code>.&lt;/li>
&lt;li>&lt;code>annotationSelector&lt;/code> (Optional): Matches the &lt;code>.metadata.annotations&lt;/code> of
resources using a
&lt;a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors" target="_blank">label selector expression&lt;/a>.
For example, &lt;code>environment = production&lt;/code> or &lt;code>environment notin (staging)&lt;/code>.&lt;/li>
&lt;li>&lt;code>labelSelector&lt;/code> (Optional): Matches the &lt;code>.metadata.labels&lt;/code> of resources
using a
&lt;a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors" target="_blank">label selector expression&lt;/a>.
For example, &lt;code>environment = production&lt;/code> or &lt;code>environment notin (staging)&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h4 id="ignore-annotation">Ignore annotation&lt;/h4>
&lt;p>To exclude certain resources from the comparison, they can be labeled or
annotated with &lt;code>helm.toolkit.fluxcd.io/driftDetection: disabled&lt;/code>. Using
&lt;a href="#post-renderers">post-renderers&lt;/a>, this can be applied to any resource
rendered by Helm.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">postRenderers&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">kustomize&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">patches&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">target&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Deployment&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">patch&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> - op: add
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> path: /metadata/annotations/helm.toolkit.fluxcd.io~1driftDetection
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> value: disabled&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> In many cases, it may be better (and easier) to configure an
&lt;a href="#ignore-rules">ignore
rule&lt;/a> to ignore (a portion of) a resource.&lt;/p>
&lt;h3 id="common-metadata">Common metadata&lt;/h3>
&lt;p>&lt;code>.spec.commonMetadata&lt;/code> is an optional field used to specify any metadata that
should be applied to all the Helm Chart&amp;rsquo;s resources via kustomize post renderer. It has two optional fields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>labels&lt;/code>: A map used for setting
&lt;a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/" target="_blank">labels&lt;/a>
on an object. Any existing label will be overridden if it matches with a key in
this map.&lt;/li>
&lt;li>&lt;code>annotations&lt;/code>: A map used for setting
&lt;a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/" target="_blank">annotations&lt;/a>
on an object. Any existing annotation will be overridden if it matches with a key
in this map.&lt;/li>
&lt;/ul>
&lt;h3 id="post-renderers">Post renderers&lt;/h3>
&lt;p>&lt;code>.spec.postRenderers&lt;/code> is an optional list to provide
&lt;a href="https://helm.sh/docs/topics/advanced/#post-rendering" target="_blank">post rendering&lt;/a>
capabilities using the following built-in Kustomize directives:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patches/" target="_blank">patches&lt;/a> (&lt;code>kustomize.patches&lt;/code>)&lt;/li>
&lt;li>
&lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/images/" target="_blank">images&lt;/a> (&lt;code>kustomize.images&lt;/code>)&lt;/li>
&lt;/ul>
&lt;p>Post renderers are applied in the order given, and persisted by Helm to the
manifest for the release in the storage.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong>
&lt;a href="https://github.com/helm/helm/issues/7891" target="_blank">Helm has a limitation at present&lt;/a>,
which prevents post renderers from being applied to chart hooks.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">postRenderers&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">kustomize&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">patches&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">target&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Deployment&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>metrics-server&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">patch&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> - op: add
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> path: /metadata/labels/environment
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> value: production&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">images&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>docker.io/bitnami/metrics-server&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">newName&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>docker.io/bitnami/metrics-server&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">newTag&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">0.4.1&lt;/span>-debian-10-r54&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="kubeconfig-remote-clusters">KubeConfig (Remote clusters)&lt;/h3>
&lt;p>With the &lt;code>.spec.kubeConfig&lt;/code> field a HelmRelease
can apply and manage resources on a remote cluster.&lt;/p>
&lt;p>Two authentication alternatives are available:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.spec.kubeConfig.secretRef&lt;/code>: Secret-based authentication using a
static kubeconfig stored in a Kubernetes Secret in the same namespace
as the HelmRelease.&lt;/li>
&lt;li>&lt;code>.spec.kubeConfig.configMapRef&lt;/code> (Recommended): Secret-less authentication
building a kubeconfig dynamically with parameters stored in a Kubernetes
ConfigMap in the same namespace as the HelmRelease via workload identity.&lt;/li>
&lt;/ul>
&lt;p>To make a HelmRelease react immediately to changes in the referenced Secret
or ConfigMap see
&lt;a href="#reacting-immediately-to-configuration-dependencies">this&lt;/a>
section.&lt;/p>
&lt;p>When both &lt;code>.spec.kubeConfig&lt;/code> and
&lt;a href="#service-account-reference">&lt;code>.spec.serviceAccountName&lt;/code>&lt;/a> are specified,
the controller will impersonate the ServiceAccount on the target cluster,
i.e. a ServiceAccount with name &lt;code>.spec.serviceAccountName&lt;/code> must exist in
the target cluster inside a namespace with the same name as the namespace
of the HelmRelease. For example, if the HelmRelease is in the namespace
&lt;code>apps&lt;/code> of the cluster where Flux is running, then the ServiceAccount
must be in the &lt;code>apps&lt;/code> namespace of the target remote cluster, and have the
name &lt;code>.spec.serviceAccountName&lt;/code>. In other words, the namespace of the
HelmRelease must exist both in the cluster where Flux is running
and in the target remote cluster where Flux will apply resources.&lt;/p>
&lt;p>The Helm storage is stored on the remote cluster in a namespace that equals to
the namespace of the HelmRelease, or the
&lt;a href="#storage-namespace">configured storage namespace&lt;/a>.
The release itself is made in a namespace that equals to the namespace of the
HelmRelease, or the
&lt;a href="#target-namespace">configured target namespace&lt;/a>. The
namespaces are expected to exist, with the exception that the target namespace
can be created on demand by Helm when namespace creation is
&lt;a href="#install-configuration">configured during
install&lt;/a>.&lt;/p>
&lt;p>Other references to Kubernetes resources in the HelmRelease, like
&lt;a href="#values-references">values references&lt;/a>, are expected to exist on
the cluster where Flux is running.&lt;/p>
&lt;h4 id="secret-based-authentication">Secret-based authentication&lt;/h4>
&lt;p>&lt;code>.spec.kubeConfig.secretRef.name&lt;/code> is an optional field to specify the name of
a Secret containing a KubeConfig. If specified, the Helm operations will be
targeted at the default cluster specified in this KubeConfig instead of using
the in-cluster Service Account.&lt;/p>
&lt;p>The Secret defined in the &lt;code>.secretRef&lt;/code> must exist in the same namespace as the
HelmRelease. On every reconciliation, the KubeConfig bytes will be loaded from
the &lt;code>.secretRef.key&lt;/code> (default: &lt;code>value&lt;/code> or &lt;code>value.yaml&lt;/code>) of the Secret&amp;rsquo;s data,
and the Secret can thus be regularly updated if cluster access tokens have to
rotate due to expiration.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Secret&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>prod-kubeconfig&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Opaque&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">stringData&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">value.yaml&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> apiVersion: v1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> kind: Config
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> # ...omitted for brevity &lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> The KubeConfig should be self-contained and not rely on binaries, the
environment, or credential files from the helm-controller Pod. This matches the
constraints of KubeConfigs from current Cluster API providers. KubeConfigs with
&lt;code>cmd-path&lt;/code> in them likely won&amp;rsquo;t work without a custom, per-provider installation
of helm-controller. For more information, see
&lt;a href="#remote-cluster-api-clusters">remote clusters/Cluster-API&lt;/a>.&lt;/p>
&lt;h4 id="secret-less-authentication">Secret-less authentication&lt;/h4>
&lt;p>The field &lt;code>.spec.kubeConfig.configMapRef.name&lt;/code> can be used to specify the
name of a ConfigMap in the same namespace as the HelmRelease containing
parameters for secret-less authentication via workload identity. The
supported keys inside the &lt;code>.data&lt;/code> field of the ConfigMap are:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.data.provider&lt;/code>: The provider to use. One of &lt;code>aws&lt;/code>, &lt;code>azure&lt;/code>, &lt;code>gcp&lt;/code>,
or &lt;code>generic&lt;/code>. Required. The &lt;code>aws&lt;/code> provider is used for connecting to
remote EKS clusters, &lt;code>azure&lt;/code> for AKS, &lt;code>gcp&lt;/code> for GKE, and &lt;code>generic&lt;/code>
for Kubernetes OIDC authentication between clusters. For the
&lt;code>generic&lt;/code> provider, the remote cluster must be configured to trust
the OIDC issuer of the cluster where Flux is running.&lt;/li>
&lt;li>&lt;code>.data.cluster&lt;/code>: The fully qualified resource name of the Kubernetes
cluster in the cloud provider API. Not used by the &lt;code>generic&lt;/code>
provider. Required when one of &lt;code>.data.address&lt;/code> or &lt;code>.data[&amp;quot;ca.crt&amp;quot;]&lt;/code> is
not set, or if the provider is &lt;code>aws&lt;/code> (required for defining a region).&lt;/li>
&lt;li>&lt;code>.data.address&lt;/code>: The address of the Kubernetes API server. Required
for &lt;code>generic&lt;/code>. For the other providers, if not specified, the
first address in the cluster resource will be used, and if
specified, it must match one of the addresses in the cluster
resource.
If &lt;code>audiences&lt;/code> is not set, will be used as the audience for the
&lt;code>generic&lt;/code> provider.&lt;/li>
&lt;li>&lt;code>.data[&amp;quot;ca.crt&amp;quot;]&lt;/code>: The optional PEM-encoded CA certificate for the
Kubernetes API server. If not set, the controller will use the
CA certificate from the cluster resource.&lt;/li>
&lt;li>&lt;code>.data.audiences&lt;/code>: The optional audiences as a list of
line-break-separated strings for the Kubernetes ServiceAccount token.
Defaults to the address for the &lt;code>generic&lt;/code> provider, or to specific
values for the other providers depending on the provider.&lt;/li>
&lt;li>&lt;code>.data.serviceAccountName&lt;/code>: The optional name of the Kubernetes
ServiceAccount in the same namespace that should be used
for authentication. If not specified, the controller
ServiceAccount will be used. Not confuse with the ServiceAccount
used for impersonation, which is specified with
&lt;a href="#service-account-reference">&lt;code>.spec.serviceAccountName&lt;/code>&lt;/a> directly
in the HelmRelease spec and must exist in the target remote cluster.&lt;/li>
&lt;/ul>
&lt;p>The &lt;code>.data.cluster&lt;/code> field, when specified, must have the following formats:&lt;/p>
&lt;ul>
&lt;li>&lt;code>aws&lt;/code>: &lt;code>arn:&amp;lt;partition&amp;gt;:eks:&amp;lt;region&amp;gt;:&amp;lt;account-id&amp;gt;:cluster/&amp;lt;cluster-name&amp;gt;&lt;/code>&lt;/li>
&lt;li>&lt;code>azure&lt;/code>: &lt;code>/subscriptions/&amp;lt;subscription-id&amp;gt;/resourceGroups/&amp;lt;resource-group&amp;gt;/providers/Microsoft.ContainerService/managedClusters/&amp;lt;cluster-name&amp;gt;&lt;/code>&lt;/li>
&lt;li>&lt;code>gcp&lt;/code>: &lt;code>projects/&amp;lt;project-id&amp;gt;/locations/&amp;lt;location&amp;gt;/clusters/&amp;lt;cluster-name&amp;gt;&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>For complete guides on workload identity and setting up permissions for
this feature, see the following docs:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/integrations/aws/#for-amazon-elastic-kubernetes-service">EKS&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/integrations/azure/#for-azure-kubernetes-service">AKS&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/integrations/gcp/#for-google-kubernetes-engine">GKE&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://kubernetes.io/docs/reference/access-authn-authz/authentication/#configuring-the-api-server" target="_blank">Generic&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Example for an EKS cluster:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>backend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>...&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># other fields omitted for brevity&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kubeConfig&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">configMapRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kubeconfig&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">serviceAccountName&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps-sa&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># optional. must exist in the target cluster. user for impersonation&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ConfigMap&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kubeconfig&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">data&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">provider&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>aws&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">cluster&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>arn:aws:eks:eu-central-1:123456789012:cluster/my-cluster&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">serviceAccountName&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps-iam-role&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># optional. maps to an AWS IAM Role. used for authentication&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="interval">Interval&lt;/h3>
&lt;p>&lt;code>.spec.interval&lt;/code> is a required field that specifies the interval at which the
HelmRelease is reconciled, i.e. the controller ensures the current Helm release
matches the desired state.&lt;/p>
&lt;p>After successfully reconciling the object, the controller requeues it for
inspection at the specified interval. The value must be in a
&lt;a href="https://pkg.go.dev/time#ParseDuration" target="_blank">Go recognized
duration string format&lt;/a>, e.g. &lt;code>15m0s&lt;/code>
to reconcile the object every fifteen minutes.&lt;/p>
&lt;p>If the &lt;code>.metadata.generation&lt;/code> of a resource changes (due to e.g. a change to
the spec) or the HelmChart revision changes (which generates a Kubernetes
Event), or a ConfigMap/Secret referenced in &lt;code>valuesFrom&lt;/code> changes,
this is handled instantly outside the interval window.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> The controller can be configured to apply a jitter to the interval in
order to distribute the load more evenly when multiple HelmRelease objects are
set up with the same interval. For more information, please refer to the
&lt;a href="https://fluxcd.io/flux/components/helm/options/" target="_blank">helm-controller configuration options&lt;/a>.&lt;/p>
&lt;h3 id="timeout">Timeout&lt;/h3>
&lt;p>&lt;code>.spec.timeout&lt;/code> is an optional field to specify a timeout for a Helm action like
install, upgrade or rollback. The value must be in a
&lt;a href="https://pkg.go.dev/time#ParseDuration" target="_blank">Go recognized duration string format&lt;/a>,
e.g. &lt;code>5m30s&lt;/code> for a timeout of five minutes and thirty seconds. The default
value is &lt;code>5m0s&lt;/code>.&lt;/p>
&lt;h3 id="suspend">Suspend&lt;/h3>
&lt;p>&lt;code>.spec.suspend&lt;/code> is an optional field to suspend the reconciliation of a
HelmRelease. When set to &lt;code>true&lt;/code>, the controller will stop reconciling the
HelmRelease, and changes to the resource or the Helm chart will not result in
a new Helm release. When the field is set to &lt;code>false&lt;/code> or removed, it will
resume.&lt;/p>
&lt;h2 id="working-with-helmreleases">Working with HelmReleases&lt;/h2>
&lt;h3 id="recommended-settings">Recommended settings&lt;/h3>
&lt;p>When deploying applications to production environments, it is recommended
to use OCI-based Helm charts with OCIRepository as &lt;code>chartRef&lt;/code>, and
to configure the following fields, while adjusting them to your desires for
responsiveness:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp-chart&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># check for new versions every 5 minutes and trigger an upgrade&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>oci://ghcr.io/org/charts/webapp&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">secretRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>registry-auth&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># Image pull secret with read-only access&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">layerSelector&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># select the Helm chart layer&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">mediaType&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;application/vnd.cncf.helm.chart.content.v1.tar+gzip&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">operation&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>copy&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">semver&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;*&amp;#34;&lt;/span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># track the latest stable version&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">releaseName&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chartRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp-chart&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>30m&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># run drift detection every 30 minutes&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">driftDetection&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">mode&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>enabled&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># undo kubectl edits and other unintended changes&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">install&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">strategy&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>RetryOnFailure&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># retry failed installations instead of uninstalling&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">retryInterval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># retry failed installations every five minutes&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">upgrade&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">crds&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>CreateReplace&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># update CRDs when upgrading&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">strategy&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>RetryOnFailure&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># retry failed upgrades instead of rollback&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">retryInterval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># retry failed upgrades every five minutes&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># All ConfigMaps and Secrets referenced in valuesFrom should&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># be labelled with `reconcile.fluxcd.io/watch: Enabled`&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">valuesFrom&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ConfigMap&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp-values&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Secret&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp-secret-values&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that the &lt;code>RetryOnFailure&lt;/code> strategy is suitable for statefulsets
and other workloads that cannot tolerate rollbacks and have a high rollout duration
susceptible to health check timeouts and transient capacity errors.&lt;/p>
&lt;p>For stateless workloads and applications that can tolerate rollbacks, the
&lt;code>RemediateOnFailure&lt;/code> strategy may be more suitable, as it will ensure that
the last known good state is restored in case of a failure.&lt;/p>
&lt;h3 id="configuring-failure-handling">Configuring failure handling&lt;/h3>
&lt;p>From time to time, a Helm installation, upgrade, or accompanying
&lt;a href="#test-configuration">Helm test&lt;/a>
may fail. When this happens, by default no action is taken, and the release is
left in a failed state. However, several automatic failure remediation options
can be set via
&lt;a href="#install-remediation">&lt;code>.spec.install.remediation&lt;/code>&lt;/a> and
&lt;a href="#upgrade-remediation">&lt;code>.spec.upgrade.remediation&lt;/code>&lt;/a>.&lt;/p>
&lt;p>By configuring the &lt;code>.retries&lt;/code> field for the respective action, the controller
will first remediate the failure by performing a Helm rollback or uninstall, and
then reattempt the action. It will repeat this process until the &lt;code>.retries&lt;/code>
are exhausted, or the action succeeds.&lt;/p>
&lt;p>Once the &lt;code>.retries&lt;/code> are exhausted, the controller will stop attempting to
remediate the failure, and the Helm release will be left in a failed state.
To ensure the Helm release is brought back to the last known good state or
uninstalled, &lt;code>.remediateLastFailure&lt;/code> can be set to &lt;code>true&lt;/code>.
For Helm upgrades, this defaults to &lt;code>true&lt;/code> if at least one retry is configured.&lt;/p>
&lt;p>When a new release configuration or Helm chart is detected, the controller will
reset the failure counters and attempt to install or upgrade the release again.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> In addition to the automatic failure remediation options, the
controller can be instructed to
&lt;a href="#forcing-a-release">force a Helm release&lt;/a> or
to
&lt;a href="#resetting-remediation-retries">retry a failed Helm release&lt;/a>&lt;/p>
&lt;h3 id="controlling-the-lifecycle-of-custom-resource-definitions">Controlling the lifecycle of Custom Resource Definitions&lt;/h3>
&lt;p>Helm does support
&lt;a href="https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#method-1-let-helm-do-it-for-you" target="_blank">the installation of Custom Resource Definitions&lt;/a>
(CRDs) as part of a chart. However, it has no native support for
&lt;a href="https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations" target="_blank">upgrading CRDs&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>There is no support at this time for upgrading or deleting CRDs using Helm.
This was an explicit decision after much community discussion due to the
danger for unintentional data loss. Furthermore, there is currently no
community consensus around how to handle CRDs and their lifecycle. As this
evolves, Helm will add support for those use cases.&lt;/p>
&lt;/blockquote>
&lt;p>If you write your own Helm charts, you can work around this limitation by
putting your CRDs into the templates instead of the &lt;code>crds/&lt;/code> directory, or by
factoring them out into a separate Helm chart as suggested by the
&lt;a href="https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#method-2-separate-charts" target="_blank">official Helm
documentation&lt;/a>.&lt;/p>
&lt;p>However, if you use a third-party Helm chart that installs CRDs, not being able
to upgrade the CRDs via HelmRelease objects might become a cumbersome limitation
within your GitOps workflow. Therefore, Flux allows you to opt in to upgrading
CRDs by setting the &lt;code>.crds&lt;/code> policy in the
&lt;a href="#install-configuration">&lt;code>.spec.install&lt;/code>&lt;/a>
and
&lt;a href="#upgrade-configuration">&lt;code>.spec.upgrade&lt;/code>&lt;/a> configurations.&lt;/p>
&lt;p>The following policy values are supported:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Skip&lt;/code>: Skip the installation or upgrade of CRDs. This is the default value
for &lt;code>.spec.upgrade.crds&lt;/code>.&lt;/li>
&lt;li>&lt;code>Create&lt;/code>: Create CRDs if they do not exist, but do not upgrade or delete them.
This is the default value for &lt;code>.spec.install.crds&lt;/code>.&lt;/li>
&lt;li>&lt;code>CreateReplace&lt;/code>: Create new CRDs, update (replace) existing ones, but &lt;strong>do
not&lt;/strong> delete CRDs which no longer exist in the current Helm chart.&lt;/li>
&lt;/ul>
&lt;p>For example, if you want to update CRDs when installing and upgrading a Helm
chart, you can set the &lt;code>.spec.install.crds&lt;/code> and &lt;code>.spec.upgrade.crds&lt;/code> policies to
&lt;code>CreateReplace&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-operator&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-operator&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;1.0.1&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-operator-repo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">install&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">crds&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>CreateReplace&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">upgrade&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">crds&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>CreateReplace&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="role-based-access-control">Role-based access control&lt;/h3>
&lt;p>By default, a HelmRelease runs under the cluster admin account and can create,
modify, and delete cluster level objects (ClusterRoles, ClusterRoleBindings,
CustomResourceDefinitions, etc.) and namespaced objects (Deployments, Ingresses,
etc.)&lt;/p>
&lt;p>For certain HelmReleases, a cluster administrator may wish to restrict the
permissions of the HelmRelease to a specific namespace or to a specific set of
namespaced objects. To restrict a HelmRelease, one can assign a Service Account
under which the reconciliation is performed using
&lt;a href="#service-account-reference">&lt;code>.spec.serviceAccountName&lt;/code>&lt;/a>.&lt;/p>
&lt;p>Assuming you want to restrict a group of HelmReleases to a single namespace,
you can create a Service Account with a RoleBinding that grants access only to
that namespace.&lt;/p>
&lt;p>For example, the following Service Account and RoleBinding restricts the
HelmRelease to the &lt;code>webapp&lt;/code> namespace:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Namespace&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ServiceAccount&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp-reconciler&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>rbac.authorization.k8s.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Role&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp-reconciler&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">rules&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">apiGroups&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#4070a0">&amp;#34;*&amp;#34;&lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">resources&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#4070a0">&amp;#34;*&amp;#34;&lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">verbs&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#4070a0">&amp;#34;*&amp;#34;&lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>rbac.authorization.k8s.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>RoleBinding&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp-reconciler&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">roleRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">apiGroup&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>rbac.authorization.k8s.io&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Role&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp-reconciler&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">subjects&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ServiceAccount&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp-reconciler&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> The above resources are not created by the helm-controller, but should
be created by a cluster administrator and preferably be managed by a
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomizations/" target="_blank">Kustomization&lt;/a>.&lt;/p>
&lt;p>The Service Account can then be referenced in the HelmRelease:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">serviceAccountName&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>webapp-reconciler&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When the controller reconciles the &lt;code>podinfo&lt;/code> HelmRelease, it will impersonate
the &lt;code>webapp-reconciler&lt;/code> Service Account. If the chart contains cluster level
objects like CustomResourceDefinitions, the reconciliation will fail since the
account it runs under has no permissions to alter objects outside the
&lt;code>webapp&lt;/code> namespace.&lt;/p>
&lt;h4 id="enforcing-impersonation">Enforcing impersonation&lt;/h4>
&lt;p>On multi-tenant clusters, platform admins can enforce impersonation with the
&lt;code>--default-service-account&lt;/code> flag.&lt;/p>
&lt;p>When the flag is set, HelmReleases which do not have a &lt;code>.spec.serviceAccountName&lt;/code>
specified will use the Service Account name provided by
&lt;code>--default-service-account=&amp;lt;name&amp;gt;&lt;/code> in the namespace of the HelmRelease object.&lt;/p>
&lt;p>For further best practices on securing helm-controller, see our
&lt;a href="https://fluxcd.io/flux/security/best-practices" target="_blank">best practices guide&lt;/a>.&lt;/p>
&lt;h3 id="remote-cluster-api-clusters">Remote Cluster API clusters&lt;/h3>
&lt;p>Using a
&lt;a href="#kubeconfig-remote-clusters">&lt;code>.spec.kubeConfig&lt;/code> reference&lt;/a>, it is possible
to manage the full lifecycle of Helm releases on remote clusters.
This composes well with Cluster-API bootstrap providers such as CAPBK (kubeadm),
CAPA (AWS), and others.&lt;/p>
&lt;p>To reconcile a HelmRelease to a CAPI controlled cluster, put the HelmRelease in
the same namespace as your Cluster object, and set the
&lt;code>.spec.kubeConfig.secretRef.name&lt;/code> to &lt;code>&amp;lt;cluster-name&amp;gt;-kubeconfig&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>cluster.x-k8s.io/v1alpha3&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Cluster&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>stage&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># the kubeconfig Secret will contain the Cluster name&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>capi-stage&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">clusterNetwork&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">pods&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">cidrBlocks&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#40a070">10.100.0.0&lt;/span>/16&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">serviceDomain&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>stage-cluster.local&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">services&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">cidrBlocks&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#40a070">10.200.0.0&lt;/span>/12&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">controlPlaneRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>controlplane.cluster.x-k8s.io/v1alpha3&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>KubeadmControlPlane&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>stage-control-plane&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>capi-stage&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">infrastructureRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>infrastructure.cluster.x-k8s.io/v1alpha3&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>DockerCluster&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>stage&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>capi-stage&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># ... unrelated Cluster API objects omitted for brevity ...&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kube-prometheus-stack&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>capi-stage&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kubeConfig&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">secretRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>stage-kubeconfig&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># Cluster API creates this for the matching Cluster&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>prometheus&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;&amp;gt;=4.0.0 &amp;lt;5.0.0&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>prometheus-community&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">install&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">remediation&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">retries&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>-&lt;span style="color:#40a070">1&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The Cluster and HelmRelease can be created at the same time as long as the
&lt;a href="#install-remediation">install remediation configuration&lt;/a> is set to a
forgiving number of &lt;code>.retries&lt;/code>. The HelmRelease will then eventually succeed
in installing the Helm chart once the cluster is available.&lt;/p>
&lt;p>If you want to target clusters created by other means than Cluster-API, you can
create a Service Account with the necessary permissions on the target cluster,
generate a KubeConfig for that account, and then create a Secret on the cluster
where helm-controller is running. For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kubectl -n default create secret generic prod-kubeconfig &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --from-file&lt;span style="color:#666">=&lt;/span>value.yaml&lt;span style="color:#666">=&lt;/span>./kubeconfig
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="triggering-a-reconcile">Triggering a reconcile&lt;/h3>
&lt;p>To manually tell the helm-controller to reconcile a HelmRelease outside the
&lt;a href="#interval">specified interval window&lt;/a>, it can be annotated with
&lt;code>reconcile.fluxcd.io/requestedAt: &amp;lt;arbitrary value&amp;gt;&lt;/code>.&lt;/p>
&lt;p>Annotating the resource queues the HelmRelease for reconciliation if the
&lt;code>&amp;lt;arbitrary-value&amp;gt;&lt;/code> differs from the last value the controller acted on, as
reported in &lt;code>.status.lastHandledReconcileAt&lt;/code>.&lt;/p>
&lt;p>Using &lt;code>kubectl&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>kubectl annotate --field-manager&lt;span style="color:#666">=&lt;/span>flux-client-side-apply --overwrite helmrelease/&amp;lt;helmrelease-name&amp;gt; reconcile.fluxcd.io/requestedAt&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>&lt;span style="color:#007020;font-weight:bold">$(&lt;/span>date +%s&lt;span style="color:#007020;font-weight:bold">)&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Using &lt;code>flux&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>flux reconcile helmrelease &amp;lt;helmrelease-name&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="forcing-a-release">Forcing a release&lt;/h3>
&lt;p>To instruct the helm-controller to forcefully perform a Helm install or
upgrade without making changes to the spec, it can be annotated with
&lt;code>reconcile.fluxcd.io/forceAt: &amp;lt;arbitrary value&amp;gt;&lt;/code> while simultaneously
&lt;a href="#triggering-a-reconcile">triggering a reconcile&lt;/a> with the same value.&lt;/p>
&lt;p>Annotating the resource forces a one-off Helm install or upgrade if the
&lt;code>&amp;lt;arbitrary-value&amp;gt;&lt;/code> differs from the last value the controller acted on, as
reported in &lt;code>.status.lastHandledForceAt&lt;/code> and &lt;code>.status.lastHandledReconcileAt&lt;/code>.&lt;/p>
&lt;p>Using &lt;code>kubectl&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bb60d5">TOKEN&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>&lt;span style="color:#007020;font-weight:bold">$(&lt;/span>date +%s&lt;span style="color:#007020;font-weight:bold">)&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>; &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span>kubectl annotate --field-manager&lt;span style="color:#666">=&lt;/span>flux-client-side-apply --overwrite helmrelease/&amp;lt;helmrelease-name&amp;gt; &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span>&lt;span style="color:#4070a0">&amp;#34;reconcile.fluxcd.io/requestedAt=&lt;/span>&lt;span style="color:#bb60d5">$TOKEN&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span>&lt;span style="color:#4070a0">&amp;#34;reconcile.fluxcd.io/forceAt=&lt;/span>&lt;span style="color:#bb60d5">$TOKEN&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Using &lt;code>flux&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>flux reconcile helmrelease &amp;lt;helmrelease-name&amp;gt; --force
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="resetting-remediation-retries">Resetting remediation retries&lt;/h3>
&lt;p>To instruct the helm-controller to reset the number of retries while
attempting to perform a Helm release, it can be annotated with
&lt;code>reconcile.fluxcd.io/resetAt: &amp;lt;arbitrary value&amp;gt;&lt;/code> while simultaneously
&lt;a href="#triggering-a-reconcile">triggering a reconcile&lt;/a> with the same value.&lt;/p>
&lt;p>Annotating the resource resets the failure counts on the object if the
&lt;code>&amp;lt;arbitrary-value&amp;gt;&lt;/code> differs from the last value the controller acted on, as
reported in &lt;code>.status.lastHandledResetAt&lt;/code> and &lt;code>.status.lastHandledReconcileAt&lt;/code>.
This effectively allows it to continue to attempt to perform a Helm release
based on the
&lt;a href="#install-remediation">install&lt;/a> or
&lt;a href="#upgrade-remediation">upgrade&lt;/a>
remediation configuration.&lt;/p>
&lt;p>Using &lt;code>kubectl&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bb60d5">TOKEN&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>&lt;span style="color:#007020;font-weight:bold">$(&lt;/span>date +%s&lt;span style="color:#007020;font-weight:bold">)&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>; &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span>kubectl annotate --field-manager&lt;span style="color:#666">=&lt;/span>flux-client-side-apply --overwrite helmrelease/&amp;lt;helmrelease-name&amp;gt; &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span>&lt;span style="color:#4070a0">&amp;#34;reconcile.fluxcd.io/requestedAt=&lt;/span>&lt;span style="color:#bb60d5">$TOKEN&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span>&lt;span style="color:#4070a0">&amp;#34;reconcile.fluxcd.io/resetAt=&lt;/span>&lt;span style="color:#bb60d5">$TOKEN&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Using &lt;code>flux&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>flux reconcile helmrelease &amp;lt;helmrelease-name&amp;gt; --reset
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="handling-failed-uninstall">Handling failed uninstall&lt;/h3>
&lt;p>At times, a Helm uninstall may fail due to the resource deletion taking a long
time, resources getting stuck in deleting phase due to some resource delete
policy in the cluster or some failing delete hooks. Depending on the scenario,
this can be handled in a few different ways.&lt;/p>
&lt;p>For resources that take long to delete but are certain to get deleted without
any intervention, failed uninstall will be retried until they succeeds. The
HelmRelease object will remain in a failed state until the uninstall succeeds.
Once uninstall is successful, the HelmRelease object will get deleted.&lt;/p>
&lt;p>If resources get stuck at deletion due to some dependency on some other
resource or policy, the controller will keep retrying to delete the resources.
The HelmRelease object will remain in a failed state. Once the cause of resource
deletion issue is resolved by intervention, HelmRelease uninstallation will
succeed and the HelmRelease object will get deleted. In case the cause of the
deletion issue can&amp;rsquo;t be resolved, the HelmRelease can be force deleted by
manually deleting the
&lt;a href="https://helm.sh/docs/topics/advanced/#storage-backends" target="_blank">Helm storage
secret&lt;/a> from the
respective release namespace. When the controller retries uninstall and cannot
find the release, it assumes that the release has been deleted, Helm uninstall
succeeds and the HelmRelease object gets deleted. This leaves behind all the
release resources. They have to be manually deleted.&lt;/p>
&lt;p>If a chart with pre-delete hooks fail, the controller will re-run the hooks
until they succeed and unblock the uninstallation. The Helm uninstall error
will be present in the status of HelmRelease. This can be used to identify which
hook is failing. If the hook failure persists, to run uninstall without the
hooks, equivalent of running &lt;code>helm uninstall --no-hooks&lt;/code>, update the HelmRelease
to set &lt;code>.spec.uninstall.disableHooks&lt;/code> to &lt;code>true&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">...&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>...&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">uninstall&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">disableHooks&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In the next reconciliation, the controller will run Helm uninstall without the
hooks. On success, the HelmRelease will get deleted. Otherwise, check the status
of the HelmRelease for other failure that may be blocking the uninstall.&lt;/p>
&lt;p>In case of charts with post-delete hooks, since the hook runs after the deletion
of the resources and the Helm storage, the hook failure will result in an
initial uninstall failure. In the subsequent reconciliation to retry uninstall,
since the Helm storage for the release got deleted, uninstall will succeed and
the HelmRelease object will get deleted.&lt;/p>
&lt;p>Any leftover pre or post-delete hook resources have to be manually deleted.&lt;/p>
&lt;h3 id="waiting-for-ready">Waiting for &lt;code>Ready&lt;/code>&lt;/h3>
&lt;p>When a change is applied, it is possible to wait for the HelmRelease to reach a
&lt;code>Ready&lt;/code> state using &lt;code>kubectl&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>kubectl &lt;span style="color:#007020">wait&lt;/span> helmrelease/&amp;lt;helmrelease-name&amp;gt; --for&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#bb60d5">condition&lt;/span>&lt;span style="color:#666">=&lt;/span>ready --timeout&lt;span style="color:#666">=&lt;/span>5m
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="suspending-and-resuming">Suspending and resuming&lt;/h3>
&lt;p>When you find yourself in a situation where you temporarily want to pause the
reconciliation of a HelmRelease, you can suspend it using the
&lt;a href="#suspend">&lt;code>.spec.suspend&lt;/code> field&lt;/a>.&lt;/p>
&lt;h4 id="suspend-a-helmrelease">Suspend a HelmRelease&lt;/h4>
&lt;p>In your YAML declaration:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&amp;lt;helmrelease-name&amp;gt;&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">suspend&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Using &lt;code>kubectl&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>kubectl patch helmrelease &amp;lt;helmrelease-name&amp;gt; --field-manager&lt;span style="color:#666">=&lt;/span>flux-client-side-apply -p &lt;span style="color:#4070a0">&amp;#39;{\&amp;#34;spec\&amp;#34;: {\&amp;#34;suspend\&amp;#34; : true }}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Using &lt;code>flux&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>flux &lt;span style="color:#007020">suspend&lt;/span> helmrelease &amp;lt;helmrelease-name&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h5 id="resume-a-helmrelease">Resume a HelmRelease&lt;/h5>
&lt;p>In your YAML declaration, comment out (or remove) the field:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&amp;lt;helmrelease-name&amp;gt;&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># suspend: true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> Setting the field value to &lt;code>false&lt;/code> has the same effect as removing
it, but does not allow for &amp;ldquo;hot patching&amp;rdquo; using e.g. &lt;code>kubectl&lt;/code> while practicing
GitOps; as the manually applied patch would be overwritten by the declared
state in Git.&lt;/p>
&lt;p>Using &lt;code>kubectl&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>kubectl patch helmrelease &amp;lt;helmrelease-name&amp;gt; --field-manager&lt;span style="color:#666">=&lt;/span>flux-client-side-apply -p &lt;span style="color:#4070a0">&amp;#39;{\&amp;#34;spec\&amp;#34; : {\&amp;#34;suspend\&amp;#34; : false }}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Using &lt;code>flux&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>flux resume helmrelease &amp;lt;helmrelease-name&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="debugging-a-helmrelease">Debugging a HelmRelease&lt;/h3>
&lt;p>There are several ways to gather information about a HelmRelease for debugging
purposes.&lt;/p>
&lt;h4 id="describe-the-helmrelease">Describe the HelmRelease&lt;/h4>
&lt;p>Describing a HelmRelease using &lt;code>kubectl describe helmrelease &amp;lt;release-name&amp;gt;&lt;/code>
displays the latest recorded information for the resource in the Status and
Events sections:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-console" data-lang="console">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">Status:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Conditions:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Transition Time: 2023-12-06T18:23:21Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Message: Failed to install after 1 attempt(s)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Observed Generation: 1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Reason: RetriesExceeded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Status: True
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Type: Stalled
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Transition Time: 2023-12-06T18:23:21Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Message: Helm test failed for release podinfo/podinfo.v1 with chart podinfo@6.5.3: 1 error occurred:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> * pod podinfo-fault-test-a0tew failed
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Observed Generation: 1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Reason: TestFailed
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Status: False
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Type: Ready
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Transition Time: 2023-12-06T18:23:16Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Message: Helm install succeeded for release podinfo/podinfo.v1 with chart podinfo@6.5.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Observed Generation: 1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Reason: InstallSucceeded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Status: True
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Type: Released
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Transition Time: 2023-12-06T18:23:21Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Message: Helm test failed for release podinfo/podinfo.v1 with chart podinfo@6.5.3: 1 error occurred:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> * pod podinfo-fault-test-a0tew failed
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Observed Generation: 1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Reason: TestFailed
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Status: False
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Type: TestSuccess
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> History:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Chart Name: podinfo
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Chart Version: 6.5.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Config Digest: sha256:2598fd0e8c65bae746c6686a61c2b2709f47ba8ed5c36450ae1c30aea9c88e9f
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Digest: sha256:24f31c6f2f3da97b217a794b5fb9234818296c971ff9f849144bf07438976e4d
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> First Deployed: 2023-12-06T18:23:12Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Deployed: 2023-12-06T18:23:12Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Name: podinfo
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Namespace: default
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Status: deployed
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Test Hooks:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> podinfo-fault-test-a0tew:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Completed: 2023-12-06T18:23:21Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Last Started: 2023-12-06T18:23:16Z
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Phase: Failed
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> podinfo-grpc-test-rzg5v:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> podinfo-jwt-test-7k1hv:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Podinfo - Service - Test - Bgoeg:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Version: 1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">Events:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Type Reason Age From Message
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> ---- ------ ---- ---- -------
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal HelmChartCreated 88s helm-controller Created HelmChart/podinfo/podinfo-podinfo with SourceRef &amp;#39;HelmRepository/podinfo/podinfo&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal HelmChartInSync 88s helm-controller HelmChart/podinfo/podinfo-podinfo with SourceRef &amp;#39;HelmRepository/podinfo/podinfo&amp;#39; is in-sync
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal InstallSucceeded 83s helm-controller Helm install succeeded for release podinfo/podinfo.v1 with chart podinfo@6.5.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Warning TestFailed 78s helm-controller Helm test failed for release podinfo/podinfo.v1 with chart podinfo@6.5.3: 1 error occurred:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> * pod podinfo-fault-test-a0tew failed
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="trace-emitted-events">Trace emitted Events&lt;/h4>
&lt;p>To view events for specific HelmRelease(s), &lt;code>kubectl events&lt;/code> can be used in
combination with &lt;code>--for&lt;/code> to list the Events for specific objects. For example,
running&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kubectl events --for HelmRelease/&amp;lt;release-name&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>lists&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>LAST SEEN TYPE REASON OBJECT MESSAGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>88s Normal HelmChartCreated HelmRelease/podinfo Created HelmChart/podinfo/podinfo-podinfo with SourceRef &lt;span style="color:#4070a0">&amp;#39;HelmRepository/podinfo/podinfo&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>88s Normal HelmChartInSync HelmRelease/podinfo HelmChart/podinfo/podinfo-podinfo with SourceRef &lt;span style="color:#4070a0">&amp;#39;HelmRepository/podinfo/podinfo&amp;#39;&lt;/span> is in-sync
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>83s Normal InstallSucceeded HelmRelease/podinfo Helm install succeeded &lt;span style="color:#007020;font-weight:bold">for&lt;/span> release podinfo/podinfo.v1 with chart podinfo@6.5.3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>78s Warning TestFailed HelmRelease/podinfo Helm &lt;span style="color:#007020">test&lt;/span> failed &lt;span style="color:#007020;font-weight:bold">for&lt;/span> release podinfo/podinfo.v1 with chart podinfo@6.5.3: &lt;span style="color:#40a070">1&lt;/span> error occurred:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * pod podinfo-fault-test-a0tew failed
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Besides being reported in Events, the controller may also log reconciliation
errors. The Flux CLI offers commands for filtering the logs for a specific
HelmRelease, e.g. &lt;code>flux logs --level=error --kind=HelmRelease --name=&amp;lt;release-name&amp;gt;.&lt;/code>&lt;/p>
&lt;h4 id="rendering-the-final-values-locally">Rendering the final Values locally&lt;/h4>
&lt;p>When using multiple
&lt;a href="#values-references">values references&lt;/a> in a
HelmRelease, it can be useful to inspect the final values computed from the various sources.
This can be done by pointing the Flux CLI to the in-cluster HelmRelease object:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux debug hr &amp;lt;release-name&amp;gt; -n &amp;lt;namespace&amp;gt; --show-values
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command will output the final values by merging the in-line values from the HelmRelease
with the values from the referenced ConfigMaps and/or Secrets.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> The debug command will print sensitive information if Kubernetes Secrets
are referenced in the HelmRelease &lt;code>.spec.valuesFrom&lt;/code> field, so exercise caution
when using this command.&lt;/p>
&lt;h3 id="reacting-immediately-to-configuration-dependencies">Reacting immediately to configuration dependencies&lt;/h3>
&lt;p>To trigger a Helm release upgrade when changes occur in referenced
Secrets or ConfigMaps, you can set the following label on the
Secret or ConfigMap:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">labels&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">reconcile.fluxcd.io/watch&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Enabled&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>An alternative to labeling every Secret or ConfigMap is
setting the &lt;code>--watch-configs-label-selector=owner!=helm&lt;/code>
&lt;a href="https://fluxcd.io/flux/components/helm/options/#flags" target="_blank">flag&lt;/a>
in helm-controller, which allows watching all Secrets and
ConfigMaps except for Helm storage Secrets.&lt;/p>
&lt;p>&lt;strong>Note&lt;/strong>: An upgrade will be triggered for an event on a referenced
Secret/ConfigMap even if it&amp;rsquo;s marked as optional in the &lt;code>.spec.valuesFrom&lt;/code>
field, including deletion events.&lt;/p>
&lt;h2 id="helmrelease-status">HelmRelease Status&lt;/h2>
&lt;h3 id="events">Events&lt;/h3>
&lt;p>The controller emits Kubernetes Events to report the result of each Helm action
performed for a HelmRelease. These events can be used to monitor the progress
of the HelmRelease and can be forwarded to external systems using
&lt;a href="https://fluxcd.io/flux/monitoring/alerts/" target="_blank">notification-controller alerts&lt;/a>.&lt;/p>
&lt;p>The controller annotates the events with the Helm chart version, app version,
and with the chart OCI digest if available.&lt;/p>
&lt;h4 id="event-example">Event example&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Event&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">annotations&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">helm.toolkit.fluxcd.io/app-version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">6.6.1&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">helm.toolkit.fluxcd.io/revision&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">6.6.1&lt;/span>+0cc9a8446c95&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">helm.toolkit.fluxcd.io/oci-digest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>sha256:0cc9a8446c95009ef382f5eade883a67c257f77d50f84e78ecef2aac9428d1e5&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">creationTimestamp&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2024-05-07T05:02:34Z&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo.17cd1c4e15d474bb&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">firstTimestamp&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2024-05-07T05:02:34Z&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">involvedObject&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">lastTimestamp&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2024-05-07T05:02:34Z&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">message&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">&amp;#39;Helm test succeeded for release podinfo/podinfo.v2 with chart podinfo@6.6.1+0cc9a8446c95&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">3&lt;/span>&lt;span style="color:#bbb"> &lt;/span>test hooks completed successfully&amp;#39;&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">reason&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>TestSucceeded&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">source&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">component&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Normal&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="history">History&lt;/h3>
&lt;p>The HelmRelease shows the history of Helm releases it has performed up to the
previous successful release as a list in the &lt;code>.status.history&lt;/code> of the resource.
The history is ordered by the time of the release, with the most recent release
first.&lt;/p>
&lt;p>When
&lt;a href="#test-configuration">Helm tests&lt;/a> are enabled, the history will also
include the status of the tests which were run for each release.&lt;/p>
&lt;h4 id="history-example">History example&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&amp;lt;release-name&amp;gt;&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">status&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">history&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">appVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">6.6.1&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chartName&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chartVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">6.6.1&lt;/span>+0cc9a8446c95&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">configDigest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>sha256:e15c415d62760896bd8bec192a44c5716dc224db9e0fc609b9ac14718f8f9e56&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">digest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>sha256:e59349a6d8cf01d625de9fe73efd94b5e2a8cc8453d1b893ec367cfa2105bae9&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">firstDeployed&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2024-05-07T04:54:21Z&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">lastDeployed&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2024-05-07T04:54:55Z&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ociDigest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>sha256:0cc9a8446c95009ef382f5eade883a67c257f77d50f84e78ecef2aac9428d1e5&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">status&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>deployed&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">testHooks&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">podinfo-grpc-test-goyey&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">lastCompleted&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2024-05-07T04:55:11Z&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">lastStarted&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2024-05-07T04:55:09Z&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">phase&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Succeeded&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">2&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">appVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">6.6.0&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chartName&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chartVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">6.6.0&lt;/span>+cdd538a0167e&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">configDigest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>sha256:e15c415d62760896bd8bec192a44c5716dc224db9e0fc609b9ac14718f8f9e56&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">digest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>sha256:9be0d34ced6b890a72026749bc0f1f9e3c1a89673e17921bbcc0f27774f31c3a&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">firstDeployed&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2024-05-07T04:54:21Z&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">lastDeployed&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2024-05-07T04:54:21Z&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ociDigest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>sha256:cdd538a0167e4b51152b71a477e51eb6737553510ce8797dbcc537e1342311bb&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">status&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>superseded&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">testHooks&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">podinfo-grpc-test-q0ucx&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">lastCompleted&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2024-05-07T04:54:25Z&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">lastStarted&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2024-05-07T04:54:23Z&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">phase&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Succeeded&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">1&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="conditions">Conditions&lt;/h3>
&lt;p>A HelmRelease enters various states during its lifecycle, reflected as
&lt;a href="https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties" target="_blank">Kubernetes Conditions&lt;/a>.
It can be
&lt;a href="#reconciling-helmrelease">reconciling&lt;/a> when it is being processed by
the controller, it can be
&lt;a href="#ready-helmrelease">ready&lt;/a> when the Helm release is
installed and up-to-date, or it can
&lt;a href="#failed-helmrelease">fail&lt;/a> during
reconciliation.&lt;/p>
&lt;p>The HelmRelease API is compatible with the
&lt;a href="https://github.com/kubernetes-sigs/cli-utils/tree/master/pkg/kstatus" target="_blank">kstatus specification&lt;/a>,
and reports &lt;code>Reconciling&lt;/code> and &lt;code>Stalled&lt;/code> conditions where applicable to provide
better (timeout) support to solutions polling the HelmRelease to become &lt;code>Ready&lt;/code>.&lt;/p>
&lt;h4 id="reconciling-helmrelease">Reconciling HelmRelease&lt;/h4>
&lt;p>The helm-controller marks the HelmRepository as &lt;em>reconciling&lt;/em> when it is working
on re-assessing the Helm release state, or working on a Helm action such as
installing or upgrading the release.&lt;/p>
&lt;p>This can be due to one of the following reasons (without this being an
exhaustive list):&lt;/p>
&lt;ul>
&lt;li>The desired state of the HelmRelease has changed, and the controller is
working on installing or upgrading the Helm release.&lt;/li>
&lt;li>The generation of the HelmRelease is newer than the
&lt;a href="#observed-generation">Observed
Generation&lt;/a>.&lt;/li>
&lt;li>The HelmRelease has been installed or upgraded, but the
&lt;a href="#test-configuration">Helm
test&lt;/a> is still running.&lt;/li>
&lt;li>The HelmRelease is installed or upgraded, but the controller is working on
&lt;a href="#drift-detection">detecting&lt;/a> or
&lt;a href="#drift-correction">correcting&lt;/a> drift.&lt;/li>
&lt;/ul>
&lt;p>When the HelmRelease is &amp;ldquo;reconciling&amp;rdquo;, the &lt;code>Ready&lt;/code> Condition status becomes
&lt;code>Unknown&lt;/code> when the controller is working on a Helm install or upgrade, and the
controller adds a Condition with the following attributes to the HelmRelease&amp;rsquo;s
&lt;code>.status.conditions&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>type: Reconciling&lt;/code>&lt;/li>
&lt;li>&lt;code>status: &amp;quot;True&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>reason: Progressing&lt;/code> | &lt;code>reason: ProgressingWithRetry&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>The Condition &lt;code>message&lt;/code> is updated during the course of the reconciliation to
report the Helm action being performed at any particular moment.&lt;/p>
&lt;p>The Condition has a
&lt;a href="https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties" target="_blank">&amp;ldquo;negative polarity&amp;rdquo;&lt;/a>,
and is only present on the HelmRelease while the status is &lt;code>&amp;quot;True&amp;quot;&lt;/code>.&lt;/p>
&lt;h4 id="ready-helmrelease">Ready HelmRelease&lt;/h4>
&lt;p>The helm-controller marks the HelmRelease as &lt;em>ready&lt;/em> when it has the following
characteristics:&lt;/p>
&lt;ul>
&lt;li>The Helm release is installed and up-to-date. This means that the Helm
release has been installed or upgraded, the release&amp;rsquo;s chart has the same
version as the
&lt;a href="#chart-template">Helm chart referenced by the HelmRelease&lt;/a>,
and the
&lt;a href="#values">values&lt;/a> used to install or upgrade the release have not
changed.&lt;/li>
&lt;li>The Helm release has passed any
&lt;a href="#test-configuration">Helm tests&lt;/a> that are
enabled.&lt;/li>
&lt;li>The HelmRelease is not being
&lt;a href="#reconciling-helmrelease">reconciled&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>When the HelmRelease is &amp;ldquo;ready&amp;rdquo;, the controller sets a Condition with the
following attributes in the HelmRelease&amp;rsquo;s &lt;code>.status.conditions&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>type: Ready&lt;/code>&lt;/li>
&lt;li>&lt;code>status: &amp;quot;True&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>reason: InstallSucceeded&lt;/code> | &lt;code>reason: UpgradeSucceeded&lt;/code> | &lt;code>reason: TestSucceeded&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>This &lt;code>Ready&lt;/code> Condition will retain a status value of &lt;code>&amp;quot;True&amp;quot;&lt;/code> until the
HelmRelease is marked as reconciling, or e.g. an
&lt;a href="#failed-helmrelease">error occurs&lt;/a>
due to a failed Helm action.&lt;/p>
&lt;p>When a Helm install or upgrade has completed, the controller sets a Condition
with the following attributes in the HelmRelease&amp;rsquo;s &lt;code>.status.conditions&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>type: Released&lt;/code>&lt;/li>
&lt;li>&lt;code>status: &amp;quot;True&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>reason: InstallSucceeded&lt;/code> | &lt;code>reason: UpgradeSucceeded&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>The &lt;code>Released&lt;/code> Condition will retain a status value of &lt;code>&amp;quot;True&amp;quot;&lt;/code> until the
next Helm install or upgrade has completed.&lt;/p>
&lt;p>When
&lt;a href="#test-configuration">Helm tests are enabled&lt;/a> and completed successfully,
the controller sets a Condition with the following attributes in the
HelmRelease&amp;rsquo;s &lt;code>.status.conditions&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>type: TestSuccess&lt;/code>&lt;/li>
&lt;li>&lt;code>status: &amp;quot;True&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>reason: TestSucceeded&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>The &lt;code>TestSuccess&lt;/code> Condition will retain a status value of &lt;code>&amp;quot;True&amp;quot;&lt;/code> until the
next Helm install or upgrade occurs, or the Helm tests are disabled.&lt;/p>
&lt;h4 id="failed-helmrelease">Failed HelmRelease&lt;/h4>
&lt;p>The helm-controller may get stuck trying to determine state or produce a Helm
release without completing. This can occur due to some of the following factors:&lt;/p>
&lt;ul>
&lt;li>The HelmChart does not have an Artifact, or is not ready.&lt;/li>
&lt;li>The HelmRelease&amp;rsquo;s dependencies are not ready.&lt;/li>
&lt;li>The composition of
&lt;a href="#values-references">values references&lt;/a> and
&lt;a href="#inline-values">inline values&lt;/a>
failed due to a misconfiguration.&lt;/li>
&lt;li>The Helm action (install, upgrade, rollback, uninstall) failed.&lt;/li>
&lt;li>The Helm action succeeded, but the
&lt;a href="#test-configuration">Helm test&lt;/a> failed.&lt;/li>
&lt;/ul>
&lt;p>When the failure is due to an error during a Helm install or upgrade, a
Condition with the following attributes is added:&lt;/p>
&lt;ul>
&lt;li>&lt;code>type: Released&lt;/code>&lt;/li>
&lt;li>&lt;code>status: &amp;quot;False&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>reason: InstallFailed&lt;/code> | &lt;code>reason: UpgradeFailed&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>In case the failure is due to an error during a Helm test, a Condition with the
following attributes is added:&lt;/p>
&lt;ul>
&lt;li>&lt;code>type: TestSuccess&lt;/code>&lt;/li>
&lt;li>&lt;code>status: &amp;quot;False&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>reason: TestFailed&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>This &lt;code>TestSuccess&lt;/code> Condition will only count as a failure when the Helm test
results have
&lt;a href="#configuring-failure-handling">not been ignored&lt;/a>.&lt;/p>
&lt;p>When the failure has resulted in a rollback or uninstall, a Condition with the
following attributes is added:&lt;/p>
&lt;ul>
&lt;li>&lt;code>type: Remediated&lt;/code>&lt;/li>
&lt;li>&lt;code>status: &amp;quot;True&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>reason: RollbackSucceeded&lt;/code> | &lt;code>reason: UninstallSucceeded&lt;/code> | &lt;code>reason: RollbackFailed&lt;/code> | &lt;code>reason: UninstallFailed&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>This &lt;code>Remediated&lt;/code> Condition will retain a status value of &lt;code>&amp;quot;True&amp;quot;&lt;/code> until the
next Helm install or upgrade has completed.&lt;/p>
&lt;p>When the HelmRelease is &amp;ldquo;failing&amp;rdquo;, the controller sets a Condition with the
following attributes in the HelmRelease&amp;rsquo;s &lt;code>.status.conditions&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>type: Ready&lt;/code>&lt;/li>
&lt;li>&lt;code>status: &amp;quot;False&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>reason: InstallFailed&lt;/code> | &lt;code>reason: UpgradeFailed&lt;/code> | &lt;code>reason: TestFailed&lt;/code> | &lt;code>reason: RollbackSucceeded&lt;/code> | &lt;code>reason: UninstallSucceeded&lt;/code> | &lt;code>reason: RollbackFailed&lt;/code> | &lt;code>reason: UninstallFailed&lt;/code> | &lt;code>reason: &amp;lt;arbitrary error&amp;gt;&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Note that a HelmRelease can be
&lt;a href="#reconciling-helmrelease">reconciling&lt;/a> while
failing at the same time. For example, due to a new release attempt after
remediating a failed Helm action. When a reconciliation fails, the &lt;code>Reconciling&lt;/code>
Condition reason would be &lt;code>ProgressingWithRetry&lt;/code>. When the reconciliation is
performed again after the failure, the reason is updated to &lt;code>Progressing&lt;/code>.&lt;/p>
&lt;h3 id="storage-namespace-1">Storage Namespace&lt;/h3>
&lt;p>The helm-controller reports the active storage namespace in the
&lt;code>.status.storageNamespace&lt;/code> field.&lt;/p>
&lt;p>When the
&lt;a href="#storage-namespace">&lt;code>.spec.storageNamespace&lt;/code>&lt;/a> is changed, the
controller will use the namespace from the Status to perform a Helm uninstall
for the release in the old storage namespace, before performing a Helm install
using the new storage namespace.&lt;/p>
&lt;h3 id="failure-counters">Failure Counters&lt;/h3>
&lt;p>The helm-controller reports the number of failures it encountered for a
HelmRelease in the &lt;code>.status.failures&lt;/code>, &lt;code>.status.installFailures&lt;/code> and
&lt;code>.status.upgradeFailures&lt;/code> fields.&lt;/p>
&lt;p>The &lt;code>.status.failures&lt;/code> field is a general counter for all failures, while the
&lt;code>.status.installFailures&lt;/code> and &lt;code>.status.upgradeFailures&lt;/code> fields are counters
which are specific to the Helm install and upgrade actions respectively.
The latter two counters are used to determine if the controller is allowed to
retry an action when
&lt;a href="#install-remediation">install&lt;/a> or
&lt;a href="#upgrade-remediation">upgrade&lt;/a>
remediation is enabled.&lt;/p>
&lt;p>The counters are reset when a new configuration is applied to the HelmRelease,
the
&lt;a href="#values">values&lt;/a> change, or when a new Helm chart version is discovered.
In addition, they can be
&lt;a href="#resetting-remediation-retries">reset using an annotation&lt;/a>.&lt;/p>
&lt;h3 id="observed-generation">Observed Generation&lt;/h3>
&lt;p>The helm-controller reports an observed generation in the HelmRelease&amp;rsquo;s
&lt;code>.status.observedGeneration&lt;/code>. The observed generation is the latest
&lt;code>.metadata.generation&lt;/code> which resulted in either a
&lt;a href="#ready-helmrelease">ready state&lt;/a>,
or stalled due to error it can not recover from without human intervention.&lt;/p>
&lt;h3 id="observed-post-renderers-digest">Observed Post Renderers Digest&lt;/h3>
&lt;p>The helm-controller reports the digest for the
&lt;a href="#post-renderers">post renderers&lt;/a>
it last rendered the Helm chart with in the for a successful Helm install or
upgrade in the &lt;code>.status.observedPostRenderersDigest&lt;/code> field.&lt;/p>
&lt;p>This field is used by the controller to determine if a deployed Helm release
is in sync with the HelmRelease &lt;code>spec.postRenderers&lt;/code> configuration and whether
it should trigger a Helm upgrade.&lt;/p>
&lt;h3 id="last-attempted-config-digest">Last Attempted Config Digest&lt;/h3>
&lt;p>The helm-controller reports the digest for the
&lt;a href="#values">values&lt;/a> it last
attempted to perform a Helm install or upgrade with in the
&lt;code>.status.lastAttemptedConfigDigest&lt;/code> field.&lt;/p>
&lt;p>The digest is used to determine if the controller should reset the
&lt;a href="#failure-counters">failure counters&lt;/a> due to a change in the values.&lt;/p>
&lt;h3 id="last-attempted-revision">Last Attempted Revision&lt;/h3>
&lt;p>The helm-controller reports the revision of the Helm chart it last attempted
to perform a Helm install or upgrade with in the
&lt;code>.status.lastAttemptedRevision&lt;/code> field.&lt;/p>
&lt;p>The revision is used by the controller to determine if it should reset the
&lt;a href="#failure-counters">failure counters&lt;/a> due to a change in the chart version.&lt;/p>
&lt;h3 id="last-attempted-revision-digest">Last Attempted Revision Digest&lt;/h3>
&lt;p>The helm-controller reports the OCI artifact digest of the Helm chart it last attempted
to perform a Helm install or upgrade with in the
&lt;code>.status.lastAttemptedRevisionDigest&lt;/code> field.&lt;/p>
&lt;p>This field is present in status only when &lt;code>.spec.chartRef.type&lt;/code> is set to &lt;code>OCIRepository&lt;/code>.&lt;/p>
&lt;h3 id="last-attempted-release-action">Last Attempted Release Action&lt;/h3>
&lt;p>The helm-controller reports the last Helm release action it attempted to
perform in the &lt;code>.status.lastAttemptedReleaseAction&lt;/code> field. The possible values
are &lt;code>install&lt;/code> and &lt;code>upgrade&lt;/code>.&lt;/p>
&lt;p>This field is used by the controller to determine the active remediation
strategy for the HelmRelease.&lt;/p>
&lt;h3 id="last-attempted-release-action-duration">Last Attempted Release Action Duration&lt;/h3>
&lt;p>The helm-controller reports the duration of the last Helm release action it
attempted to perform in the &lt;code>.status.lastAttemptedReleaseActionDuration&lt;/code> field.&lt;/p>
&lt;h3 id="last-handled-reconcile-at">Last Handled Reconcile At&lt;/h3>
&lt;p>The helm-controller reports the last &lt;code>reconcile.fluxcd.io/requestedAt&lt;/code>
annotation value it acted on in the &lt;code>.status.lastHandledReconcileAt&lt;/code> field.&lt;/p>
&lt;p>For practical information about this field, see
&lt;a href="#triggering-a-reconcile">triggering a reconcile&lt;/a>.&lt;/p>
&lt;h3 id="last-handled-force-at">Last Handled Force At&lt;/h3>
&lt;p>The helm-controller reports the last &lt;code>reconcile.fluxcd.io/forceAt&lt;/code>
annotation value it acted on in the &lt;code>.status.lastHandledForceAt&lt;/code> field.&lt;/p>
&lt;p>For practical information about this field, see
&lt;a href="#forcing-a-release">forcing a release&lt;/a>.&lt;/p>
&lt;h3 id="last-handled-reset-at">Last Handled Reset At&lt;/h3>
&lt;p>The helm-controller reports the last &lt;code>reconcile.fluxcd.io/resetAt&lt;/code>
annotation value it acted on in the &lt;code>.status.lastHandledResetAt&lt;/code> field.&lt;/p>
&lt;p>For practical information about this field, see
&lt;a href="#resetting-remediation-retries">resetting remediation retries&lt;/a>.&lt;/p></description></item><item><title>Flux: API Reference</title><link>https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/api/</guid><description/></item></channel></rss>