The module lifecycle stage: Experimental
The module has requirements for installation
Adding a Helm repository
To add a repository, create a HelmClusterAddonRepository resource:
apiVersion: helm.deckhouse.io/v1alpha1
kind: HelmClusterAddonRepository
metadata:
name: podinfo
spec:
url: https://stefanprodan.github.io/podinfoAfter creating the repository, view the available Helm charts:
d8 k get helmclusteraddoncharts.helm.deckhouse.io -l repository=podinfoExample output:
NAME AGE LABELS
podinfo-chart-podinfo 11d chart=podinfo,heritage=deckhouse,repository=podinfoTo view the list of versions available for a specific chart:
d8 k get helmclusteraddonchart podinfo-podinfo -o yamlExample output:
apiVersion: helm.deckhouse.io/v1alpha1
kind: HelmClusterAddonChart
metadata:
labels:
chart: podinfo
heritage: deckhouse
repository: podinfo
name: podinfo-podinfo
status:
versions:
- version: 6.11.0
- version: 6.10.2Deploying an application
To deploy an application, create a HelmClusterAddon resource specifying the repository name, chart name and version, and the target namespace:
apiVersion: helm.deckhouse.io/v1alpha1
kind: HelmClusterAddon
metadata:
name: podinfo
spec:
namespace: test
chart:
helmClusterAddonChart: podinfo
helmClusterAddonRepository: podinfo
version: 6.10.2Only one instance of HelmClusterAddon using a specific Helm chart from a specific repository can be deployed at a time. Different Helm charts from the same repository can be deployed simultaneously.
The .spec.chart.version parameter is optional. If omitted, the latest available version of the chart will be installed.
Triggering a manual reconciliation
To trigger an immediate reconciliation of a resource without waiting for the next scheduled sync, annotate it with reconcile.helm.deckhouse.io/force. The controller will detect the annotation, run a full reconciliation cycle, and remove the annotation automatically once processing is complete.
To trigger reconciliation of a HelmClusterAddon:
d8 k annotate helmclusteraddon podinfo reconcile.helm.deckhouse.io/force="$(date -u +%Y-%m-%dT%H:%M:%SZ)" --overwriteTo trigger reconciliation of a HelmClusterAddonRepository:
d8 k annotate helmclusteraddonrepository podinfo reconcile.helm.deckhouse.io/force="$(date -u +%Y-%m-%dT%H:%M:%SZ)" --overwriteThe annotation value is not significant — only its presence on the resource matters. The controller removes the annotation after the reconciliation is complete.
Observing a forced reconciliation
While a forced pass is running, the resource carries the Reconciling condition with the reason ForceReconcile:
d8 k get helmclusteraddonrepository podinfo -o jsonpath='{.status.conditions[?(@.type=="Reconciling")]}'A synchronization that runs on the ordinary schedule raises the same condition with the reason Synchronization, so the reason tells the two apart.
Once the pass finishes, that condition is removed and .status.lastForceReconcileTime records when the request was processed:
d8 k get helmclusteraddonrepository podinfo -o jsonpath='{.status.lastForceReconcileTime}'The timestamp records that the request was acted on, not that it succeeded — the outcome is reported by the Ready and Synced conditions.
A HelmClusterAddon in maintenance mode (.spec.maintenance: NoResourceReconciliation) is not reconciled at all, so a force request on it cannot be honoured. The controller discards the annotation instead of holding it until maintenance is lifted, and .status.lastForceReconcileTime is left untouched. Lift maintenance first, then request the reconciliation.