0Pricing
DevOps Bootcamp · Lezione

StatefulSet per app stateful

Effettui il deployment e gestisca applicazioni stateful come i database utilizzando gli StatefulSet, garantendo identificativi di rete stabili e storage persistente.

StatefulSet per app stateful è una lezione DevOps Bootcamp gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento DevOps Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DevOps Bootcamp include 4 lezioni in totale.

StatefulSet per applicazioni stateful

Benvenuto! In questa lezione approfondiremo gli StatefulSet, un oggetto Kubernetes progettato per gestire applicazioni stateful.

A differenza delle applicazioni stateless, che possono essere facilmente ridimensionate e sostituite, le applicazioni stateful richiedono un'identità univoca e uno storage persistente per ogni istanza. Ne sono un esempio i database, le code di messaggi o le applicazioni personalizzate che memorizzano dati localmente.

Perché stateful? La sfida

I Deployment tradizionali sono ideali per le applicazioni stateless. Se un Pod si arresta, ne viene creato uno nuovo in sostituzione e non è importante quale Pod gestisca la richiesta.

Per le applicazioni stateful, invece, ogni replica ha spesso bisogno di un'identità stabile e univoca e del proprio storage dedicato. Se un Pod di un database viene riavviato, deve riconnettersi al volume dati specifico a cui era associato.

Identità stabile della rete e dei Pod

Una caratteristica fondamentale degli StatefulSet è la fornitura di identificatori di rete stabili e univoci per ogni Pod.

  • I Pod vengono denominati in modo prevedibile e ordinato, ad esempio web-0 e web-1.
  • Mantengono i propri hostname anche dopo i riavvii.
  • Questo consente agli altri servizi di connettersi in modo affidabile a una replica specifica.

Storage stabile e persistente

Gli StatefulSet garantiscono a ogni Pod il proprio storage stabile e persistente. Questo viene gestito tramite i Persistent Volume Claim (PVC).

Quando viene creato un Pod appartenente a uno StatefulSet, viene effettuato automaticamente il provisioning di un PVC in base a una definizione volumeClaimTemplates. Se il Pod si arresta e viene ricreato, si ricollegherà allo stesso PVC e quindi ai dati originali.

Struttura di un file YAML StatefulSet

Una definizione YAML di uno StatefulSet è simile a quella di un Deployment, ma include alcune aggiunte fondamentali. Contiene:

  • apiVersion, kind, metadata
  • spec.replicas, spec.selector, spec.template (come nei Deployment)
  • spec.serviceName: collega a un servizio headless.
  • spec.volumeClaimTemplates: definisce come vengono creati i PVC per ogni Pod.

Servizio headless per ID stabili

Per fornire identità di rete stabili, gli StatefulSet richiedono un servizio headless. Un servizio headless non dispone di un IP del cluster. Restituisce invece direttamente gli indirizzi IP dei Pod selezionati.

Lo StatefulSet utilizza questo servizio per registrare le voci DNS di ciascuno dei suoi Pod, ad esempio pod-0.my-service.my-namespace.svc.cluster.local.

apiVersion: v1
kind: Service
metadata:
  name: my-app-headless
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None # This makes it a headless service
  selector:
    app: my-app

VolumeClaimTemplates

La sezione volumeClaimTemplates è specifica degli StatefulSet. È un modello per i Persistent Volume Claim (PVC) che verranno creati per ogni replica.

Ogni Pod dello StatefulSet, ad esempio my-app-0 e my-app-1, riceverà il proprio PVC, ad esempio data-my-app-0 e data-my-app-1, in base a questo modello, garantendo uno storage dedicato.

volumeClaimTemplates:
- metadata:
    name: data # This name is used in Pod's volumeMounts
  spec:
    accessModes: [ "ReadWriteOnce" ]
    storageClassName: standard
    resources:
      requests:
        storage: 1Gi

Esempio completo di StatefulSet

Ecco un esempio completo di StatefulSet Nginx semplice. Noti serviceName, che collega al servizio headless, e volumeClaimTemplates.

Per eseguire il deployment, salvi il contenuto nel file nginx-statefulset.yaml ed esegua kubectl apply -f nginx-statefulset.yaml.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx-headless" # Must match headless service name
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www # Mounts the volume from the PVC
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www # This name links to volumeMounts.name
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: standard
      resources:
        requests:
          storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-headless
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx

Denominazione e ordinamento dei Pod

Dopo il deployment, vedrà Pod denominati ad esempio web-0 e web-1. Questi indici sono stabili e univoci.

Gli StatefulSet impongono un ordine rigoroso per le operazioni di ridimensionamento. I Pod vengono creati in ordine (0, 1, 2...) e terminati in ordine inverso (..., 2, 1, 0).

Questo approccio ordinato è fondamentale per molti sistemi distribuiti stateful, perché consente di mantenere la coerenza.

Ridimensionamento e aggiornamenti progressivi

Può ridimensionare uno StatefulSet proprio come un Deployment, usando kubectl scale statefulset web --replicas=3.

Anche gli aggiornamenti progressivi funzionano, mantenendo le stesse garanzie sull'ordine: i Pod vengono aggiornati uno alla volta, in ordine ordinale inverso, assicurandosi che il Pod successivo non venga aggiornato finché quello precedente non è pronto.

Questa orchestrazione accurata riduce al minimo le interruzioni per le applicazioni stateful.

Verifichi la Sua comprensione

Quali delle seguenti sono caratteristiche o requisiti fondamentali degli StatefulSet di Kubernetes?

Riepilogo: StatefulSet in azione

Ottimo lavoro! In questa lezione ha esplorato gli StatefulSet, un potente oggetto Kubernetes per la gestione delle applicazioni stateful.

  • Forniscono identità di rete stabili e operazioni ordinate.
  • Utilizzano volumeClaimTemplates per fornire storage dedicato e persistente a ogni replica.
  • Un servizio headless è essenziale per ottenere ID di rete stabili.

Gli StatefulSet sono fondamentali per eseguire in modo affidabile su Kubernetes database e altri workload stateful critici.

Domande Frequenti

La lezione «StatefulSet per app stateful» è gratuita?

Sì — il testo completo di «StatefulSet per app stateful» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso DevOps Bootcamp, passa a CoddyKit PRO. Il corso DevOps Bootcamp include 4 lezioni in totale.

Cosa imparerò in «StatefulSet per app stateful»?

Effettui il deployment e gestisca applicazioni stateful come i database utilizzando gli StatefulSet, garantendo identificativi di rete stabili e storage persistente. Eserciti DevOps Bootcamp con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare DevOps Bootcamp?

Non è richiesta alcuna esperienza precedente. DevOps Bootcamp su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «StatefulSet per app stateful»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione DevOps Bootcamp?

Sì. Ogni lezione DevOps Bootcamp include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. StatefulSet per app stateful
  2. DaemonSet per attività specifiche dei nodi
  3. Comprendere gli Operator di Kubernetes
  4. Custom Resource Definitions (CRD)
← Torna a DevOps Bootcamp