DevOps-bootcamp · Lektion

StatefulSets för tillståndsfulla appar

Distribuera och hantera tillståndsfulla applikationer, som databaser, med StatefulSets och säkerställ stabila nätverksidentifierare och beständig lagring.

Lektion 1 av 412 steg

StatefulSets för tillståndsfulla appar är en gratis lektion i DevOps-bootcamp på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för DevOps-bootcamp, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i DevOps-bootcamp innehåller totalt 4 lektioner.

StatefulSets för stateful-appar

Välkomna! I den här lektionen går vi igenom StatefulSets, ett Kubernetes-objekt som är utformat för att hantera stateful-applikationer.

Till skillnad från stateless-appar (som enkelt kan skalas och ersättas) behöver stateful-appar unika identiteter och beständig lagring för varje instans. Det kan till exempel vara databaser, meddelandeköer eller anpassade applikationer som lagrar data lokalt.

Varför Stateful? Utmaningen

Traditionella Deployments passar utmärkt för stateless-applikationer. Om en Pod slutar fungera ersätts den av en ny, och det spelar ingen roll vilken Pod som hanterar begäran.

För stateful-appar behöver varje replik däremot ofta en stabil, unik identitet och egen dedikerad lagring. Om en databas-Pod startas om måste den återansluta till sin specifika datavolym.

Stabil nätverks- och Pod-identitet

En viktig funktion hos StatefulSets är att tillhandahålla stabila, unika nätverksidentifierare för varje Pod.

  • Poddar namnges på ett förutsägbart och ordnat sätt (t.ex. web-0, web-1).
  • De behåller sina värdnamn vid omstarter.
  • Det gör att andra tjänster på ett tillförlitligt sätt kan ansluta till en specifik replik.

Stabil och beständig lagring

StatefulSets ser till att varje Pod får en egen stabil, beständig lagring. Detta hanteras med Persistent Volume Claims (PVCs).

När en StatefulSet-Pod skapas provisioneras automatiskt en PVC baserat på en definition av typen volumeClaimTemplates. Om Podden slutar fungera och återskapas kopplas den tillbaka till samma PVC och därmed till sina ursprungliga data.

Anatomin hos en StatefulSet-YAML

En YAML-definition för en StatefulSet liknar en Deployment, men innehåller några viktiga tillägg. Den innehåller:

  • apiVersion, kind, metadata
  • spec.replicas, spec.selector, spec.template (som för Deployments)
  • spec.serviceName: Länkar till en headless service.
  • spec.volumeClaimTemplates: Definierar hur PVC:er skapas för varje Pod.

Headless service för stabila ID:n

För att StatefulSets ska kunna tillhandahålla stabila nätverksidentiteter krävs en Headless Service. En headless service har ingen cluster-IP. I stället returnerar den direkt IP-adresserna för de Poddar som den väljer ut.

StatefulSet använder denna service för att registrera DNS-poster för var och en av sina Poddar (t.ex. 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

Avsnittet volumeClaimTemplates är unikt för StatefulSets. Det är en mall för de Persistent Volume Claims (PVCs) som skapas för varje replik.

Varje Pod i StatefulSet (t.ex. my-app-0, my-app-1) får en egen PVC (t.ex. data-my-app-0, data-my-app-1) baserat på den här mallen, vilket säkerställer dedikerad lagring.

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

Fullständigt StatefulSet-exempel

Här är ett komplett exempel på en enkel Nginx StatefulSet. Observera serviceName som länkar till den headless service:n och volumeClaimTemplates.

Spara den som nginx-statefulset.yaml och kör kubectl apply -f nginx-statefulset.yaml för att distribuera den.

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

Pod-namn och ordning

När StatefulSet har distribuerats ser Ni Poddar med namn som web-0, web-1. Dessa index är stabila och unika.

StatefulSets upprätthåller en strikt ordning vid skalningsåtgärder. Poddar skapas i ordning (0, 1, 2...) och avslutas i omvänd ordning (..., 2, 1, 0).

Detta ordnade tillvägagångssätt är avgörande för att många distribuerade stateful-system ska kunna bibehålla konsistens.

Skalning och rolling updates

Ni kan skala en StatefulSet på samma sätt som en Deployment med kubectl scale statefulset web --replicas=3.

Rolling updates fungerar också, men med samma ordningsgarantier: Poddar uppdateras en i taget i omvänd ordinalordning, så att nästa Pod inte uppdateras förrän den föregående är redo.

Denna noggranna orkestrering minimerar störningar för stateful-applikationer.

Kontrollera Er förståelse

Vilka av följande är viktiga egenskaper hos eller krav på Kubernetes StatefulSets?

Sammanfattning: StatefulSets i praktiken

Bra jobbat! I den här lektionen har Ni utforskat StatefulSets, ett kraftfullt Kubernetes-objekt för hantering av stateful-applikationer.

  • De tillhandahåller stabila nätverksidentiteter och ordnade åtgärder.
  • De använder volumeClaimTemplates för dedikerad, beständig lagring per replik.
  • En headless service är avgörande för deras stabila nätverks-ID:n.

StatefulSets är grundläggande för att på ett tillförlitligt sätt köra databaser och andra kritiska stateful-arbetslaster i Kubernetes.

Gratis att börja

Lär dig DevOps-bootcamp med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
142
Lektioner
568

Vanliga frågor

Är lektionen ”StatefulSets för tillståndsfulla appar” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen DevOps-bootcamp, inklusive ”StatefulSets för tillståndsfulla appar”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i DevOps-bootcamp innehåller totalt 4 lektioner.

Vad lär jag mig i ”StatefulSets för tillståndsfulla appar”?

Distribuera och hantera tillståndsfulla applikationer, som databaser, med StatefulSets och säkerställ stabila nätverksidentifierare och beständig lagring. Ni övar på DevOps-bootcamp med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig DevOps-bootcamp?

Du behöver inga förkunskaper. Utbildningen i DevOps-bootcamp på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”StatefulSets för tillståndsfulla appar”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här DevOps-bootcamp-lektionen?

Ja. Varje DevOps-bootcamp-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. StatefulSets för tillståndsfulla appar
  2. DaemonSets för nodspecifika uppgifter
  3. Förstå Kubernetes Operators
  4. Custom Resource Definitions (CRD:er)
← Tillbaka till DevOps-bootcamp