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.
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,metadataspec.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-appVolumeClaimTemplates
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: 1GiFullstä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: nginxPod-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
volumeClaimTemplatesfö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.
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
- StatefulSets för tillståndsfulla appar
- DaemonSets för nodspecifika uppgifter
- Förstå Kubernetes Operators
- Custom Resource Definitions (CRD:er)