Tag: kubernetes, helm, devops, k8s, packaging, deployment
Livello: intermedio
TL;DR: Package manager per Kubernetes per definire, installare e aggiornare applicazioni complesse tramite Chart e templating dichiarativo.
Package manager de facto per Kubernetes, organizza manifest YAML in pacchetti chiamati Chart.
Un Chart contiene la definizione dei template, i valori di default (values.yaml) e i metadati.
Release: istanza specifica di un Chart installata e in esecuzione in un cluster Kubernetes.
Helm 3 ha rimosso Tiller, interagendo direttamente con le Kubernetes API usando il kubeconfig locale.
Memorizza lo storico dei deploy e lo stato delle release come Secret nel namespace di installazione.
Il templating sfrutta il motore Go template con funzioni estese dalla libreria Sprig.
Permette upgrade atomici, rollback immediati a revisioni precedenti e gestione dipendenze con Chart.lock.
Supporta repository remoti HTTP/S e registri compatibili OCI (Open Container Initiative).
Q: Qual è la differenza architetturale principale tra Helm 2 e Helm 3?R: In Helm 3 è stato rimosso Tiller; l'autenticazione e le autorizzazioni RBAC sono delegate direttamente all'utente Kubernetes via API, migliorando la sicurezza.
Q: Come gestisci configurazioni diverse per ambienti come dev, staging e prod?R: Mantengo un values.yaml di base nel Chart e applico file dedicati per ambiente con il flag -f durante la pipeline di deploy.
Q: Come previeni deploy incompleti o rotti durante un rilascio?R: Uso i flag --wait e --atomic con timeout definito, assicurando il rollback automatico se i pod non superano i readiness check.
Eseguire helm install invece di helm upgrade --install nelle pipeline CI/CD, provocando fallimenti quando la release esiste già.
Tipi di dato errati nei flag --set: stringhe e booleani mal interpretati se privi di quoting corretto.
Modificare le risorse gestite direttamente con kubectl, creando derive rispetto allo stato salvato da Helm.
Assenza o cattiva configurazione di readiness probe sui container, invalidando l'efficacia del flag --wait.
Omessa gestione del Chart.lock quando si aggiornano versioni nei subchart.
# Gestione repository
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# Installazione o aggiornamento idempotente con file di valori
helm upgrade --install my-app ./my-chart -f values-prod.yaml -n production --create-namespace
# Verifica locale del rendering dei template senza toccare il cluster
helm template my-app ./my-chart -f values-prod.yaml
# Ispezione dello stato e della cronologia
helm status my-app -n production
helm history my-app -n production
# Rollback a una revisione precedente
helm rollback my-app 2 -n production
[ ] Gestione del ciclo di vita con i Chart Hook (pre-install, post-upgrade)
[ ] Sintassi e risoluzione delle dipendenze con subchart
[ ] Push e pull di Chart su artifact registry OCI
[x] Sintassi di Go templating e funzioni Sprig essenziali
[x] Modello di sicurezza RBAC e assenza di Tiller in Helm 3
Documentazione ufficiale Helm (helm.sh/docs)
Helm Charts Best Practices Guide