Template o non template?
Gestire configurazioni Kubernetes multi-environment (dev/staging/prod) richiede trasformazioni di YAML. Due filosofie:
- Template-based — Helm usa Go templates con
{{ .Values.foo }}: potente ma inquina YAML - Template-free — manifest sempre-valid YAML, modifiche tramite patch e overlay
Kustomize segue la seconda strada.
Il rilascio
Kustomize è sviluppato in Google da Jeff Regan e Phillip Wittrock. Il primo ramo 1.0.x è pubblicato a metà 2018 (la 1.0.8 è del 30 settembre 2018). Scritto in Go, licenza Apache 2.0. Sottoprogetto SIG-CLI di Kubernetes. Integrato nativamente in kubectl 1.14 (marzo 2019) come kubectl apply -k ./.
Struttura
base/
kustomization.yaml
deployment.yaml
service.yaml
overlays/
dev/
kustomization.yaml
replica-patch.yaml
prod/
kustomization.yaml
replica-patch.yaml
ingress.yaml
kustomization.yaml in ogni overlay eredita la base/ e applica trasformazioni.
# overlays/prod/kustomization.yaml
bases:
- ../../base
namespace: production
patches:
- replica-patch.yaml
images:
- name: app
newTag: v2.1.0
configMapGenerator:
- name: app-config
envs: [config.env]
Feature
- Patches strategic merge — patch YAML con semantica K8s
- JSON 6902 patches — modifiche puntuali RFC-standard
- Common labels/annotations — aggiunti a tutte le risorse
- Namespace prefix/suffix — per multi-tenant
- ConfigMap/Secret generator — da file o literal
- Image tags override — per deploy release
- Component (più recenti) — moduli riusabili
Integrazione
- kubectl —
kubectl apply -knativo - ArgoCD — supporto kustomize first-class
- Flux CD — Kustomization CRD è il meccanismo primario
- Helm + Kustomize — render Helm, kustomize patch on top (pattern “post-render”)
Kustomize vs Helm
| Kustomize | Helm | |
|---|---|---|
| Template | No | Sì (Go templates) |
| YAML sempre valido | Sì | No (mixed template) |
| Distribuzione package | No | Sì (chart repository) |
| Release management | No | Sì (helm upgrade, rollback) |
| Complessità logic | Bassa | Alta |
In pratica coexistono: Helm per distribuire software di terzi (cert-manager, Prometheus), Kustomize per configurazione interna dei team.
Nel contesto italiano
Kustomize è diffusissimo nei cluster Kubernetes italiani:
- GitOps con ArgoCD/Flux basato su Kustomize overlay
- Multi-environment dev/test/prod separati
- Multi-tenant con namespace prefix
- PA digitale — progetti PSN con manifesto dichiarativi
- Banking / telco — configurazioni regolamentari versionate in Git
Riferimenti: Kustomize ramo 1.0 (2018, 1.0.8 del 30 settembre 2018). Google (SIG-CLI Kubernetes). Jeff Regan, Phillip Wittrock. Licenza Apache 2.0. Integrato in kubectl 1.14 (marzo 2019) come kubectl apply -k.
