Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Helm Chart

The chart at charts/varta-watch/ is published as an OCI artifact at oci://ghcr.io/aramirez087/charts/varta-watch. Default render matches the key observer-container fields from the raw manifests at observability/examples/kubernetes/ (a helm-parity CI gate fails the build on drift).

Install

helm install varta-watch \
  oci://ghcr.io/aramirez087/charts/varta-watch \
  --version 0.1.1 \
  --create-namespace \
  --namespace varta \
  --set prometheusToken.token=$(openssl rand -hex 32)

For production, source the token from your secret manager (SOPS, ESO, Vault Secrets Operator) and reference an existing Secret instead:

prometheusToken:
  existingSecret:
    name: varta-prom-token   # provisioned out-of-band
    key: token

Deployment modes

Switch via --set mode=…:

ModeObjectUse when
daemonsetDaemonSetOne observer per node. UDS via hostPath:/run/varta.
sidecarDeployment (1)Strict tenant isolation. UDS in an emptyDir of one Pod.

The chart resolves the UDS volume type per mode (host path vs. emptyDir) and emits exactly one of the two object kinds.

Each workload pod includes a uds-permissions init container that prepares the socket parent before varta-watch binds. It makes the directory owned by the configured observer UID/GID and mode 0755, so Kubernetes fsGroup handling cannot leave /run/varta in a group-writable state that the observer rejects.

Values reference

The full reference is the chart’s own values.yaml. Most-touched knobs:

PathDefaultNotes
modedaemonsetdaemonset | sidecar
image.tag"" (→ Chart.appVersion)Pin to an immutable tag for production
image.repositoryghcr.io/aramirez087/varta-watch
prometheusToken.token""Set or use existingSecret.name
prometheusToken.existingSecret.name""Out-of-band Secret name
uds.path/run/varta/varta.sock
uds.hostPath/run/vartadaemonset mode only
udsInit.image.repositorybusyboxInit image that prepares the UDS parent directory
selfWatchdogSecs4Matches the example systemd unit’s half-WatchdogSec
extraArgs[]Verbatim appended to argv
prometheus.bindAddr0.0.0.0:9100"" disables the HTTP endpoint
prometheus.serviceMonitor.enabledtrue
prometheus.serviceMonitor.releasekube-prometheus-stackMatch your kube-prometheus selector
prometheus.podMonitor.enabledfalseAlternative to ServiceMonitor
dashboard.enabledtrueEmits sidecar-labelled ConfigMap with the dashboard JSON
resources.{requests,limits}25m / 32 Mi / 250m / 128 Mi
namespace.createtrueSet false if you manage namespaces out-of-band

Helm test

helm test varta-watch -n varta

Runs an in-cluster Pod that scrapes /metrics with the bearer token and asserts the observer is emitting varta_iterations_total. The pod is cleaned up after success (helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded).

Upgrading

helm upgrade varta-watch \
  oci://ghcr.io/aramirez087/charts/varta-watch \
  --version 0.2.0 \
  -n varta \
  --reuse-values

The chart follows SemVer independently from the varta-watch app version. Breaking template changes (e.g. renaming a values key) bump the chart’s major; bumping just the appVersion (a new binary release) bumps the chart patch.

Verifying the chart artifact

cosign verify oci://ghcr.io/aramirez087/charts/varta-watch:0.1.1 \
  --certificate-identity-regexp '^https://github.com/aramirez087/Varta' \
  --certificate-oidc-issuer 'https://token.actions.githubusercontent.com'

Loading the dashboard under kube-prometheus

dashboard.enabled: true ships a ConfigMap with the Grafana sidecar label (default grafana_dashboard: "1") — the kube-prometheus-stack Grafana sidecar auto-imports it. If you run a custom Grafana, point its sidecar at the chart’s namespace or override dashboard.label / dashboard.labelValue / dashboard.namespace.

Migrating from raw manifests

Adopters who previously used observability/examples/kubernetes/ can switch to the chart with no operational disruption: the rendered default keeps the observer container image repository, args, and mounts in sync with the raw manifest. The CI helm-parity job asserts this on every PR. Expected differences include Helm-standard labels (helm.sh/chart, app.kubernetes.io/managed-by) and chart-managed init containers for token staging and UDS directory preparation.