0Pricing
DevOps Bootcamp · Lekcja

StatefulSets dla aplikacji stanowych

Wdrażaj aplikacje stanowe, takie jak bazy danych, i zarządzaj nimi za pomocą StatefulSets, zapewniając stabilne identyfikatory sieciowe i trwały magazyn danych.

StatefulSets dla aplikacji stanowych to bezpłatna lekcja DevOps Bootcamp na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.

StatefulSet dla aplikacji stanowych

Witamy! W tej lekcji omówimy obiekty StatefulSet — obiekty Kubernetes przeznaczone do zarządzania aplikacjami stanowymi.

W przeciwieństwie do aplikacji bezstanowych, które można łatwo skalować i zastępować, aplikacje stanowe wymagają unikatowych tożsamości oraz trwałego magazynu danych dla każdej instancji. Przykładami są bazy danych, kolejki komunikatów i niestandardowe aplikacje przechowujące dane lokalnie.

Dlaczego aplikacje stanowe? Wyzwanie

Tradycyjne obiekty Deployment doskonale sprawdzają się w przypadku aplikacji bezstanowych. Jeśli Pod ulegnie awarii, zostaje zastąpiony nowym i nie ma znaczenia, który z nich obsłuży żądanie.

W przypadku aplikacji stanowych każda replika często potrzebuje stabilnej, unikatowej tożsamości oraz własnego, dedykowanego magazynu danych. Jeśli Pod bazy danych zostanie uruchomiony ponownie, musi ponownie połączyć się ze swoim konkretnym wolumenem danych.

Stabilna sieć i tożsamość Poda

Jedną z najważniejszych funkcji StatefulSets jest zapewnianie stabilnych, unikatowych identyfikatorów sieciowych dla każdego Poda.

  • Pody otrzymują przewidywalne, uporządkowane nazwy, np. web-0 i web-1.
  • Podczas ponownych uruchomień zachowują swoje nazwy hostów.
  • Dzięki temu inne usługi mogą niezawodnie łączyć się z konkretną repliką.

Stabilny i trwały magazyn danych

StatefulSets zapewniają każdemu Podowi własny stabilny, trwały magazyn danych. Obsługę tę realizuje się za pomocą obiektów Persistent Volume Claims (PVC).

Podczas tworzenia Poda StatefulSet automatycznie tworzy PVC na podstawie definicji volumeClaimTemplates. Jeśli Pod ulegnie awarii i zostanie utworzony ponownie, zostanie ponownie podłączony do tego samego PVC, a tym samym do swoich pierwotnych danych.

Budowa pliku YAML StatefulSet

Definicja StatefulSet w formacie YAML wygląda podobnie do definicji Deployment, ale zawiera kilka istotnych dodatków. Obejmuje ona:

  • apiVersion, kind, metadata
  • spec.replicas, spec.selector, spec.template — podobnie jak w przypadku Deployment
  • spec.serviceName: łączy z usługą headless.
  • spec.volumeClaimTemplates: definiuje sposób tworzenia PVC dla każdego Poda.

Usługa headless dla stabilnych identyfikatorów

Aby StatefulSets mogły zapewniać stabilne tożsamości sieciowe, wymagają usługi headless. Usługa headless nie ma adresu IP klastra. Zamiast tego bezpośrednio zwraca adresy IP wybranych przez siebie Podów.

StatefulSet używa tej usługi do rejestrowania wpisów DNS dla każdego ze swoich Podów, np. 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

Sekcja volumeClaimTemplates jest unikatowa dla StatefulSets. Stanowi szablon obiektów Persistent Volume Claims (PVC), które zostaną utworzone dla każdej repliki.

Każdy Pod w StatefulSet, np. my-app-0 i my-app-1, otrzyma własny PVC, np. data-my-app-0 i data-my-app-1, utworzony na podstawie tego szablonu, co zapewnia dedykowany magazyn danych.

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

Pełny przykład StatefulSet

Oto kompletny przykład prostego StatefulSet dla Nginx. Należy zwrócić uwagę na element serviceName łączący z usługą headless oraz na element volumeClaimTemplates.

Aby go wdrożyć, należy zapisać go jako nginx-statefulset.yaml i uruchomić polecenie 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

Nazewnictwo i kolejność Podów

Po wdrożeniu pojawią się Pody o nazwach takich jak web-0 i web-1. Ich indeksy są stabilne i unikatowe.

StatefulSets wymuszają ścisłą kolejność operacji skalowania. Pody są tworzone w kolejności 0, 1, 2… i usuwane w odwrotnej kolejności …, 2, 1, 0.

Takie uporządkowane podejście ma kluczowe znaczenie dla zachowania spójności w wielu rozproszonych systemach stanowych.

Skalowanie i aktualizacje kroczące

StatefulSet można skalować tak samo jak Deployment, używając polecenia kubectl scale statefulset web --replicas=3.

Aktualizacje kroczące również działają, ale zachowują tę samą kolejność: Pody są aktualizowane pojedynczo, w odwrotnej kolejności porządkowej, a kolejny Pod nie jest aktualizowany, dopóki poprzedni nie będzie gotowy.

Ta staranna orkiestracja ogranicza zakłócenia w działaniu aplikacji stanowych.

Sprawdź swoją wiedzę

Które z poniższych cech lub wymagań są kluczowe dla obiektów StatefulSet w Kubernetes?

Podsumowanie: StatefulSets w praktyce

Świetna praca! W tej lekcji omówiono obiekty StatefulSet — zaawansowane obiekty Kubernetes służące do zarządzania aplikacjami stanowymi.

  • Zapewniają stabilne tożsamości sieciowe i uporządkowane operacje.
  • Używają elementu volumeClaimTemplates do zapewnienia dedykowanego, trwałego magazynu danych dla każdej repliki.
  • Usługa headless jest niezbędna do zapewnienia stabilnych identyfikatorów sieciowych.

StatefulSets mają fundamentalne znaczenie dla niezawodnego uruchamiania baz danych i innych krytycznych obciążeń stanowych w Kubernetes.

Często zadawane pytania

Czy lekcja „StatefulSets dla aplikacji stanowych” jest bezpłatna?

Tak — pełny tekst „StatefulSets dla aplikacji stanowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu DevOps Bootcamp, przejdź na CoddyKit PRO. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.

Co nauczysz się w „StatefulSets dla aplikacji stanowych”?

Wdrażaj aplikacje stanowe, takie jak bazy danych, i zarządzaj nimi za pomocą StatefulSets, zapewniając stabilne identyfikatory sieciowe i trwały magazyn danych. Ćwiczysz DevOps Bootcamp z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć DevOps Bootcamp?

Nie wymagamy żadnego doświadczenia. DevOps Bootcamp w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „StatefulSets dla aplikacji stanowych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji DevOps Bootcamp?

Tak. Każda lekcja DevOps Bootcamp zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. StatefulSets dla aplikacji stanowych
  2. DaemonSets dla zadań zależnych od węzła
  3. Poznajemy Kubernetes Operators
  4. Definicje niestandardowych zasobów (CRD)
← Powrót do DevOps Bootcamp