Skip to main content
This page documents all Helm charts deployed in the cluster using Flux’s HelmRelease custom resources.

Overview

HelmRelease resources tell Flux how to install and manage Helm charts. They support automatic upgrades, rollbacks, and custom values.

Infrastructure Components

cert-manager

Manages TLS certificates with Let’s Encrypt:
overlays/base/cert-manager/helm-release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: cert-manager
  namespace: flux-system
spec:
  chart:
    spec:
      chart: cert-manager
      reconcileStrategy: ChartVersion
      sourceRef:
        kind: HelmRepository
        name: cert-manager
        namespace: cert-manager
      version: 1.18.2
  interval: 1m0s
  releaseName: cert-manager
  targetNamespace: cert-manager
  install:
    crds: Create
  upgrade:
    crds: CreateReplace
  values:
    config:
      apiVersion: controller.config.cert-manager.io/v1alpha1
      kind: ControllerConfiguration
      enableGatewayAPI: true
    crds:
      enabled: true

grafana-operator

Manages Grafana instances using the Grafana Operator:
overlays/base/grafana/grafana-operator/helm-release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: grafana-operator
spec:
  timeout: 15m
  chart:
    spec:
      chart: grafana-operator
      sourceRef:
        kind: HelmRepository
        name: grafana
      version: 5.21.4
  interval: 24h
  releaseName: grafana-operator
  install:
    crds: Create
  upgrade:
    crds: CreateReplace

Prometheus Stack

Complete monitoring stack with Prometheus, Alertmanager, and exporters:
overlays/base/prometheus/helmrelease.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: prometheus
spec:
  chart:
    spec:
      chart: kube-prometheus-stack
      sourceRef:
        kind: HelmRepository
        name: prometheus
      version: "=79.5.0"
  interval: 24h
  releaseName: prometheus
  targetNamespace: observability
  install:
    crds: Create
  upgrade:
    crds: CreateReplace
  values:
    nodeExporter:
      enabled: true
    grafana:
      enabled: false
    prometheus:
      prometheusSpec:
        replicas: 2
        retention: 2d
        retentionSize: 25GiB
        storageSpec:
          volumeClaimTemplate:
            spec:
              accessModes:
                - ReadWriteOnce
              resources:
                requests:
                  storage: 50Gi
              storageClassName: local-storage

Grafana Loki

Log aggregation system:
overlays/base/grafana/grafana-loki/helm-release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: grafana-loki
spec:
  timeout: 15m
  chart:
    spec:
      chart: loki
      sourceRef:
        kind: HelmRepository
        name: grafana
      version: 6.49.0
  interval: 24h
  releaseName: loki-monolith
  values:
    deploymentMode: SingleBinary
    singleBinary:
      replicas: 1
      persistence:
        storageClass: local-storage
      extraArgs:
        - -store.retention=31d
    minio:
      enabled: true
      persistence:
        size: 30Gi
        storageClass: local-storage
Version: 6.49.0
Mode: Single Binary (monolith)
Retention: 31 days
Storage: MinIO with 30Gi volume

MetalLB

Bare-metal load balancer:
overlays/base/metallb/helm-release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: metallb
spec:
  chart:
    spec:
      chart: metallb
      sourceRef:
        kind: HelmRepository
        name: metallb
      version: "=0.15.3"
  interval: 24h
  releaseName: metallb
  install:
    crds: Create
  upgrade:
    crds: CreateReplace
Version: 0.15.3
Purpose: Provides LoadBalancer service type support

Kubernetes Gateway (kgateway)

API Gateway for service routing:
overlays/base/kgateway/helm-release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: kgateway
spec:
  interval: 10m
  chart:
    spec:
      chart: kgateway
      sourceRef:
        kind: HelmRepository
        name: kgateway
      version: "v2.1.2"
  dependsOn:
    - name: kgateway-crds
Version: v2.1.2
Dependency: Requires kgateway-crds to be installed first

Sealed Secrets

Encrypts secrets in Git:
overlays/base/sealed-secrets/helm-release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: sealed-secrets
spec:
  chart:
    spec:
      chart: sealed-secrets
      sourceRef:
        kind: HelmRepository
        name: sealed-secrets
      version: "=2.17.3"
  interval: 24h
  releaseName: sealed-secrets-controller
  install:
    crds: Create
  upgrade:
    crds: CreateReplace
  values:
    metrics:
      serviceMonitor:
        enabled: false
        namespace: sealed-secrets
Version: 2.17.3
Controller: sealed-secrets-controller

Metrics Server

Provides resource metrics API:
overlays/base/metrics-server/helm-release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: metrics-server
spec:
  chart:
    spec:
      chart: metrics-server
      sourceRef:
        kind: HelmRepository
        name: metrics-server
      version: 3.13.0
  interval: 1m0s
  releaseName: metrics-server
  install:
    crds: Create
  upgrade:
    crds: CreateReplace
  values:
    args:
      - --kubelet-insecure-tls
Version: 3.13.0
Configuration: Insecure TLS for testing environments

Grafana Alloy

Telemetry collection and forwarding:
overlays/base/grafana/grafana-alloy/helm-release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: grafana-alloy
spec:
  timeout: 15m
  chart:
    spec:
      chart: k8s-monitoring
      sourceRef:
        kind: HelmRepository
        name: grafana
      version: 3.2.2
  interval: 24h
  releaseName: grafana-monitoring
  values:
    clusterEvents:
      enabled: true
    podLogs:
      enabled: true
    nodeLogs:
      enabled: true
    destinations:
      - name: loki-grafana-cloud
        type: loki
        url: http://loki-monolith.observability.svc:3100/loki/api/v1/push
Version: 3.2.2
Chart: k8s-monitoring
Features: Cluster events, pod logs, node logs

Tailscale Operator

Manages Tailscale VPN connections:
overlays/base/tailscale/helmrelease.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: tailscale-operator
spec:
  interval: 5m
  chart:
    spec:
      chart: tailscale-operator
      version: "=1.92.4"
      sourceRef:
        kind: HelmRepository
        name: tailscale
Version: 1.92.4

Application Components

n8n

Workflow automation platform:
overlays/base/n8n/helm-release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: n8n
spec:
  releaseName: n8n
  interval: 5m
  chart:
    spec:
      chart: n8n
      version: "=2.0.1"
      sourceRef:
        kind: HelmRepository
        name: n8n
  values: {}
Version: 2.0.1

HelmRelease Configuration Fields

spec.chart.spec.chart
string
required
Name of the Helm chart to install
spec.chart.spec.version
string
required
Chart version. Use = prefix for exact version match: "=1.18.2"
spec.chart.spec.sourceRef
object
required
Reference to the HelmRepository containing the chart
spec.interval
string
default:"1h"
How often to check for chart updates. Examples: 1m0s, 10m, 24h
spec.releaseName
string
Name of the Helm release. Defaults to HelmRelease metadata name.
spec.targetNamespace
string
Namespace where the release will be installed
spec.install.crds
string
default:"Skip"
How to handle CRDs during installation: Skip, Create, or CreateReplace
spec.upgrade.crds
string
default:"Skip"
How to handle CRDs during upgrades: Skip, Create, or CreateReplace
spec.values
object
Custom values to pass to the Helm chart
spec.timeout
string
default:"5m"
Timeout for installation/upgrade operations
spec.dependsOn
array
List of HelmReleases or Kustomizations that must succeed first

Upgrade Strategies

Automatic Updates

Flux automatically upgrades releases when:
  • The chart version changes in the HelmRelease
  • Values are updated
  • The interval elapses and a new chart version is available

Version Pinning

Pin to exact versions using = prefix:
version: "=1.18.2"  # Exact version
version: ">=1.18.0" # Minimum version
version: "~1.18.0"  # Patch updates only

Rollback Configuration

spec:
  upgrade:
    remediation:
      retries: 3
      remediateLastFailure: true
  rollback:
    timeout: 10m
    recreate: true

Testing Changes

Dry Run

Test without applying:
flux diff helmrelease cert-manager -n flux-system

Manual Upgrade

Force an immediate upgrade:
flux reconcile helmrelease cert-manager -n flux-system --with-source

Suspend Auto-Updates

flux suspend helmrelease prometheus
flux resume helmrelease prometheus

Monitoring Releases

Check Status

flux get helmreleases --all-namespaces
kubectl get helmrelease -A

View Release History

helm history prometheus -n observability

Check Logs

flux logs --level=error --kind=HelmRelease

Build docs developers (and LLMs) love