HARDCODE.BLOG

Coding, the superpower that nobody wants to have.

8 Aug 2025

Kubernetes 2.0 uccide YAML? Una riflessione su strumenti, obsolescenza e modernizzazione

TL;DR - La bottom line prima di tutto

Non esiste alcun Kubernetes 2.0 ufficiale che elimina YAML, ma il dibattito è più che mai attuale. Con il 79% dei problemi di produzione di Kubernetes tracciabili a errori di configurazione YAML, la community sta attivamente esplorando alternative più robuste. La vera domanda non è se buttare via YAML, ma come evolverlo intelligentemente.


Il (falso) annuncio che fa scalpore

Negli ultimi mesi, diversi articoli online hanno fatto circolare l’idea di un “Kubernetes 2.0” che eliminerebbe completamente YAML in favore di SDK Python/TypeScript, con funzionalità AI-native e “Nanopods” al posto dei sidecar. Alcuni di questi contenuti presentano anche screenshot e esempi di codice, alimentando speculazioni nella community DevOps.

La realtà è però diversa: dopo ricerche approfondite tra documentazione ufficiale, roadmap CNCF e annunci del progetto Kubernetes, non esiste alcuna conferma ufficiale di un “Kubernetes 2.0” che elimina YAML. La CNCF continua a investire nel progetto attuale, con AWS che ha rinnovato il supporto con 3 milioni di dollari in cloud credits per il 2026 e focus su evoluzione graduale piuttosto che rivoluzioni.

Perché questo “meme” ha così tanto senso?

1. La “YAML Fatigue” è reale

I problemi con YAML non sono teorici. Le configurazioni basate su YAML possono essere error-prone, portando a problemi come limiti di risorse incorretti, selettori di servizio impropri o permessi insufficienti che disturbano le operazioni.

Mentre è vero che le configurazioni errate a volte risultano in violazioni di sicurezza o perdite di dati sensibili, è altrettanto comune che causino problemi di stabilità della produzione, come interruzioni e degradazioni delle performance.

Esempi reali di problemi YAML:

  • Indentazione killer: Un singolo spazio mancante può cambiare completamente la struttura di una configurazione
  • Coercizione di tipo implicita: Valori come NO, yes, 1.0 vengono interpretati in modi inaspettati
  • Errori di sintassi banali: Un : mancante o nginxx invece di nginx possono far saltare un cluster intero
  • Scalabilità limitata: File YAML molto lunghi diventano difficili da gestire e debuggare

2. Il paradosso della configurabilità infinita

Kubernetes è nato come “la soluzione di orchestrazione container de-facto”, ma per essere una soluzione che funziona per TUTTI ha dovuto supportare praticamente qualsiasi configurazione; causando uno spostamento monumentale nella complessità complessiva.

3. I problemi in produzione sono tangibili

Le aziende riportano incidenti reali causati da errori YAML:

  • Blue Matador: I pod fluentd-sumologic consumavano tutta la memoria dei nodi perché mancavano resource requests e limits
  • Datadog: Jobs che non partivano a causa di rate limiting dell’image registry per configurazioni errate
  • Zalando: CronJob che spawnavano pod infiniti perché la concurrency policy era posizionata male nel manifest

Le alternative esistono già (e funzionano bene)

Contrariamente ai rumors su un fantomatico “Kubernetes 2.0”, esistono già oggi diverse soluzioni mature per ridurre la dipendenza da YAML:

SDK e Linguaggi di Programmazione

CDK8s (Cloud Development Kit for Kubernetes) CDK8s è un progetto open source CNCF che aiuta a rappresentare risorse e applicazioni Kubernetes come codice (non YAML!). Supporta Python, TypeScript, Java e Go.

# Esempio CDK8s
from cdk8s import App, Chart
from cdk8s_plus_27 import Deployment

class MyApp(Chart):
    def __init__(self, scope, id):
        super().__init__(scope, id)
        
        Deployment(self, "nginx",
            image="nginx:1.20",
            replicas=3,
            port=80
        )

app = App()
MyApp(app, "my-app")
app.synth()

Pulumi Pulumi sta guadagnando rapida trazione come strumento di infrastruttura moderno che ti permette di usare linguaggi general-purpose come TypeScript, Python, Go e C# per provision infrastructure.

// Esempio Pulumi per Kubernetes
import * as k8s from "@pulumi/kubernetes";

const deployment = new k8s.apps.v1.Deployment("nginx", {
    spec: {
        replicas: 3,
        selector: { matchLabels: { app: "nginx" } },
        template: {
            metadata: { labels: { app: "nginx" } },
            spec: {
                containers: [{
                    name: "nginx",
                    image: "nginx:1.20",
                    ports: [{ containerPort: 80 }]
                }]
            }
        }
    }
});

KYAML: Un’evoluzione piuttosto che una rivoluzione

La community di Kubernetes ha riconosciuto questi pain points e sta proponendo una soluzione elegante: KYAML, un sottoinsieme più sicuro e meno ambiguo di YAML che mantiene piena compatibilità con i tooling esistenti eliminando molti dei pitfall più comuni di YAML.

Caratteristiche di KYAML:

  • Quotatura esplicita delle stringhe: Elimina l’ambiguità di coercizione dei tipi
  • Sintassi flow style: Usa bracket esplicite, rendendolo insensibile ai whitespace
  • 100% compatibile con parser e tool YAML esistenti
# YAML tradizionale (problematico)
spec:
  containers:
  - name: app
    image: nginx
  - name: sidecar
    image: busybox

# KYAML (whitespace-insensitive)
spec: {
  containers: [{
    name: "app",
    image: "nginx",
  }, {
    name: "sidecar", 
    image: "busybox",
  }],
}

Terraform e HCL per Kubernetes

HCL è già il formato per Terraform, quindi almeno dovremmo odiare un solo linguaggio di configurazione invece di due. È fortemente tipizzato con tipi espliciti. Ci sono già buoni meccanismi di validazione. È specificamente progettato per fare il lavoro che stiamo chiedendo a YAML di fare.

# Esempio HCL per Kubernetes
resource "kubernetes_deployment" "nginx" {
  metadata {
    name = "nginx-deployment"
    labels = {
      app = "nginx"
    }
  }

  spec {
    replicas = var.replicas

    selector {
      match_labels = {
        app = "nginx"
      }
    }

    template {
      metadata {
        labels = {
          app = "nginx"
        }
      }

      spec {
        container {
          image = "nginx:${var.nginx_version}"
          name  = "nginx"
          
          port {
            container_port = 80
          }
          
          resources {
            limits = {
              cpu    = var.cpu_limit
              memory = var.memory_limit
            }
          }
        }
      }
    }
  }
}

Il futuro reale di Kubernetes (roadmap 2025-2026)

Invece di speculare su un “Kubernetes 2.0” immaginario, guardiamo ai trend reali che stanno guidando l’evoluzione della piattaforma:

1. Fokus su AI e Machine Learning

La community CNCF sta esplorando un programma di conformità centrato sui carichi di lavoro AI nello spazio Kubernetes, con l’obiettivo di finalizzare una definizione all’inizio dell’autunno per annunciarla al KubeCon+CloudNativeCon NA 2025.

2. Miglioramento dell’esperienza developer

Nel 2025, ci aspettiamo che l’IaC e l’ottimizzazione cloud (attualmente al 56%) crescano significativamente, così come failover e disaster recovery (attualmente 33%).

3. Sicurezza e governance

Le organizzazioni devono implementare policy di rete, proteggere le immagini container e aggiornare regolarmente Kubernetes stesso e tutti gli add-on, API e altri componenti correlati.

4. Automazione e testing

Tool come Chainsaw stanno semplificando il testing di integrazione delle risorse Kubernetes, permettendo agli ingegneri di testare deployment, servizi, configurazioni ingress e altro prima che i cambiamenti raggiungano la produzione.

Una roadmap immaginaria (ma realistica) per l’evoluzione

Se dovessimo immaginare un percorso di evoluzione graduale per Kubernetes, potrebbe assomigliare a questo:

Fase 1: Coesistenza e miglioramento (2025)

  • KYAML adoption: Promozione del formato KYAML più sicuro
  • SDK ufficiali: Sviluppo di SDK ufficiali Python/TypeScript/Go
  • Tool di migrazione: Convertitori automatici da YAML legacy
  • Validazione migliorata: Linter più intelligenti e controlli pre-deployment

Fase 2: Transizione assistita (2026)

  • Dual-mode support: Supporto nativo per configurazioni sia YAML che programmatiche
  • Integrazione ecosystem: Miglioramento della compatibilità con Helm, ArgoCD, Kustomize
  • Education: Programmi di formazione per l’adozione dei nuovi approcci

Fase 3: Modernizzazione (2027-2028)

  • Deprecazione soft: YAML diventa legacy ma ancora supportato
  • Tooling evoluto: IDE plugins, auto-completion, type checking
  • Migration paths: Strumenti automatici per la migrazione di configurazioni esistenti

Fase 4: Legacy support (2029+)

  • Retrocompatibilità garantita: Supporto a lungo termine per configurazioni YAML esistenti
  • Community packages: Mantenimento community-driven per tool legacy

Best practices per oggi: Non aspettare il futuro

Mentre sogniamo il futuro, ecco cosa puoi fare oggi per ridurre la “YAML fatigue”:

1. Adotta strumenti di validazione robusti

# Usa kubeval per validare i manifest
kubeval deployment.yaml

# Conftest per policy as code
conftest verify --policy k8s-security.rego deployment.yaml

# Kustomize per composizione DRY
kustomize build overlays/production/

2. Implementa testing automatizzato

# Chainsaw per integration testing
chainsaw test --test-dir ./tests/

# Dry-run sempre prima del deploy
kubectl apply --dry-run=client -f deployment.yaml

3. Usa template engines intelligenti

  • Helm: Per packaging e parametrizzazione
  • Kustomize: Per overlay environment-specific
  • Jsonnet: Per configurazioni programmatiche avanzate

4. Adotta GitOps con validazione

  • ArgoCD con pre-sync hooks
  • Flux con policy controllers
  • Tekton per pipeline di validazione

Conclusione: Evolution, not revolution

Il messaggio finale – quello che amo del tuo paragone originale – è che non è giusto gettare via YAML perché ha qualche limite. È come buttare un’automobile perché inquina: meglio aggiornarla a elettrica.

La realtà è che Kubernetes non ha bisogno di un “2.0” rivoluzionario. Ha bisogno di evoluzione intelligente:

  • KYAML per risolvere i problemi di ambiguità
  • SDK programmatici per chi preferisce il codice
  • Tooling migliorato per validazione e testing
  • Migrazione graduale che rispetta l’ecosistema esistente

Dopo che Kubernetes ha compiuto 10 anni, si è saldamente stabilito come una pietra angolare del deployment cloud-native. Guardando al 2025, ci aspettiamo che Kubernetes e l’ecosistema cloud-native continuino a crescere ed evolvere.

Il futuro di Kubernetes non sarà una rivoluzione che butta tutto, ma un’evoluzione che preserva l’investimento esistente mentre apre nuove possibilità. E questo, forse, è ancora più eccitante di qualsiasi “2.0” immaginario.

Una malizia di cortile (disclaimer: complottismo da caffè ☕)

Ora, permettetemi una piccola malizia da bar dello sport. Non è che tutto questo “boicottaggio” di YAML sia una macchinazione orchestrata per spingere le persone verso soluzioni che casualmente si sposano perfettamente con l’ecosistema AWS?

Pensateci un attimo: CDK per AWS, Pulumi (che funziona benissimo con i servizi cloud), tutti questi SDK che “guarda caso” rendono più semplice scrivere infrastruttura che si integra naturalmente with cloud provider specifici. Non è che AWS & co. abbiano interesse a farvi scrivere più codice invece di semplici file di configurazione? Codice che magari chiama le loro API in modo più diretto?

Intendiamoci, YAML ha i suoi problemi reali, ma non è curioso che le alternative più pubblicizzate siano tutte orientate verso linguaggi di programmazione che rendono più “naturale” chiamare servizi cloud proprietari?

Fine del complottismo da cortile. Tornate alle vostre configurazioni, non c’è niente da vedere qui. 😏


Hai domande su come iniziare la migrazione dai YAML tradizionali? Vuoi approfondire CDK8s o Pulumi per i tuoi progetti? Lascia un commento e discutiamone insieme.

Written by: Francesco Bianco

Leggi anche