10. Juni, 2022

3 bedste fremgangsmåder, du bør kende, når du bruger Kubernetes StatefulSet

At skabe et klynget miljø af enhver art kræver en masse arbejde for at tillade ensartet implementering og skalering. 

Den gode nyhed er, at du kan håndtere containere i stor skala ved hjælp af StatefulSets i Kubernetes. 

StatefulSets er beregnet til at køre stateful-applikationer i Kubernetes med dedikeret, vedvarende lagring.

I denne vejledning dækker vi tre bedste praksisser at lære af, når du bruger Kubernetes StatefulSets.  

Men først…

Hvad er Kubernetes StatefulSet?

Kubernetes StatefulSet er workload Application Programming Interface (API)-objektet, der bruges til at istrere stateful-applikationer. 

Du kan bruge StatefulSets til at implementere og skalere et sæt Pods, som giver garantier for Pod'ens rækkefølge og unikke karakter.  

Svarende til en implementering, et Kubernetes StatefulSet kan istrere Pods baseret på en identisk beholderspecifikation. 

Men i modsætning til en Deployment kan et StatefulSet opretholde sticky identiteter for hver Pod. Selvom pods er skabt ud fra den samme spec, er de ikke udskiftelige, hvilket betyder, at hver Pod har en vedvarende identifikator, som den opretholder under enhver omlægning. 

Hvis du vil yde vedholdenhed til en arbejdsbyrde ved hjælp af lagervolumener, skal du bruge et StatefulSet som en del af løsningen. 

Mens individuelle Pods i et StatefulSet kan være tilbøjelige til fejl, kan den vedvarende Pod-id gøre det nemmere at matche de eksisterende volumener med de nye Pods, der erstatter dem, der fejlede.  

Et typisk brugstilfælde af StatefulSet er, når du skal installere primære eller sekundære servere, såsom en databaseklynge, hvor du skal kende hver servers værtsnavn for at starte klyngen. 

Et andet almindeligt brugstilfælde af StatefulSet er, når du skalerer op og ned i en bestemt rækkefølge, såsom når du vil begynde med den primære node efterfulgt af den sekundære node. 

Det er bedst at bruge StatefulSet, når du har brug for:

  • Stabile og tydelige netværksidentiteter
  • Ordnet og unik implementering og skalering
  • Vedvarende og stabil lagring på tværs af al din applikationsplanlægning og -omlægning

Afprøvede tips ved brug af StatefulSet

Nedenfor er et par bedste fremgangsmåder til brug af Kubernetes StatefulSet.

1. Brug kubectl anvende en kommando til at oprette en StatefulSet-ressource

Kommandoen bruger manifestfiler til at oprette, opdatere og fjerne ressourcer i dine klynger. Det er en deklarativ metode til objektkonfiguration, der bevarer skrivninger, der blev lavet til levende objekter uden at flette ændringer tilbage i objektkonfigurationsfilerne. 

Husk at oprette en StorageClass, når du bruger klynger med Windows Server-nodepuljer, da standard StorageClass bruger ext4 som filsystemtype (som kun virker til Linux-containere).

Brug også NTFS som fillagertype, hvis du bruger en Compute Engine persistent disk. 

Opret et StatefulSet-manifest ved hjælp af den StorageClass, du definerede. 

For eksempel kan dit manifest skabe fire Vedvarende Volumen Krav og Vedvarende volumen par, der repræsenterer fire Computer Engine persistente diske. Hver Pod i StatefulSet bruger en enkelt persistent disk. 

Medtag desuden en nodevælger til din Pod-specifikation for at sikre, at dine Pods er korrekt planlagt på Windows Server-noder. 

Til sidst skal du oprette en StatefulSet-ressource ved at køre denne kommando: 

kubectl anvende -f STATEFULSET_FILE

Husk at udskifte STATEFULSET_FILE med manifestfilnavnet. 

2. Kend de forskellige metoder til opdatering af et StatefulSet

Du kan opdatere StatefulSets på forskellige måder med den deklarative metode kubectl anvende at være den mest almindelige. 

For eksempel, hvis du bruger Google Kubernetes Engine og ønsker at opdatere StatefulSet i din foretrukne editor eller direkte fra din shell, brug kubectl redigere. Du kan også vælge YAML-editoren i GKW Workloads-menuen i Cloud-konsollen. 

Du kan også udrulle opdateringer til Pods-specifikationen (for en StatefulSet-ressource), såsom dens konfiguration, billede eller ressourceanmodninger og brug.  

Anvend en opdateret eller ny manifestfil, når du opdaterer StatefulSet vha kubectl anvende. Det er nyttigt, når du foretager forskellige ændringer af StatefulSet, såsom når du skalerer eller angiver nye applikationsversioner.  

Bemærk: Bruger kubectl anvende at opdatere en ressource virker kun, når ressourcen er oprettet vha kubectl create – -save-config or kubectl anvende.

Du kan også bruge StatefulSets opdateringsstrategi felt, som lader dig opsætte og deaktivere automatiske rullende opdateringer for ressourceanmodninger, etiketter, begrænsninger, containere og annoteringer for Pod'erne i et StatefulSet.  

Kend de forskellige metoder til at opdatere dit StatefulSet og afgør, hvilken der fungerer bedst for dig. 

3. Bestem, hvornår StatefulSets skal bruges

Der er tilfælde, hvor du er bedre stillet ved at bruge Kubernetes StatefulSets end implementeringer.

Nogle af disse situationer kan omfatte følgende.

  • Nedskalering eller sletning af et StatefulSet. Dine data kan forblive sikre, når du skalerer ned eller sletter et StatefulSet, da det ikke sletter de mængder, der er knyttet til Stateful-appen. 

Det er normalt mere værdifuldt end automatisk at rense alle relaterede StatefulSet-ressourcer. 

For eksempel, hvis MySQL Pod genstarter eller bliver slettet, kan du få adgang til dataene i samme volumen. 

  • Implementering og skalering af en MySQL-database. Lad os sige, at du har implementeret en MySQL-database i K8s-klyngen og skaleret den til tre replikaer. En frontend-app vil også have adgang til din implementerede MySQL-klynge for at læse og skrive data.  

Læseanmodningen videresendes til tre Pods, men skriveanmodningen videresendes kun til den primære eller første Pod. Derefter bliver dataene synkroniseret med de andre Pods. 

Alt dette er muligt, når du bruger StatefulSets. 

Kubernetes StatefulSet-begrænsninger

Selvom det er afgørende at kende den bedste praksis i brugen af ​​et Kubernetes StatefulSet, er det lige så vigtigt at forstå dets begrænsninger, som omfatter følgende. 

  • En given Pods lager skal være forhåndsprovisioneret af en eller klargjort af PersistentVolume Provisioner (baseret på den anmodede opbevaringsklasse).  
  • StatefulSets tilbyder ikke garantier for pod-opsigelse, når StatefulSets slettes. For at opnå en yndefuld og ordnet pod-terminering, når du sletter et StatefulSet, kan du skalere StatefulSet ned til nul før sletning. 
  • StatefulSets kræver en Headless Service, der er ansvarlig for Pods' netværksidentitet. Du skal oprette denne tjeneste. 
  • Du kan komme ind i en brudt tilstand, der kræver manuel indgriben for at rette op, når du bruger rullende opdateringer via standardpodstyringspolitikken (Bestilte Klar). 

Udnyt Kubernetes StatefulSet på den rigtige måde

istrering af distribuerede systemer og stateful applikationer på Kubernetes kan være en bred og kompleks opgave, men det er ikke raketvidenskab. 

Start med det grundlæggende, og følg bedste praksis, når du bruger StatefulSets til at gøre istration og drift af stateful-applikationer i Kubernetes mere effektiv og effektiv. 

Tech

Om forfatteren 

Kyrie Mattos


{"email": "E-mail-adresse ugyldig", "url": "Webstedsadresse ugyldig", "required": "Påkrævet felt mangler"}