Kustomize: configurazione Kubernetes dichiarativa senza template

Kustomize 1.0 (luglio 2018) di Google (Jeff Regan, Phillip Wittrock): template-free customization di manifest Kubernetes con patch, overlay, base. Integrato in kubectl dal 2019. Alternativa a Helm per configurazione.

Open Source KustomizeKubernetesGoogleConfigurationkubectlOpen Source

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

  • kubectlkubectl apply -k nativo
  • 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

KustomizeHelm
TemplateNoSì (Go templates)
YAML sempre validoNo (mixed template)
Distribuzione packageNoSì (chart repository)
Release managementNoSì (helm upgrade, rollback)
Complessità logicBassaAlta

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.

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi