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 Kubernetes Basics 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 Kubernetes Basics, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kubernetes Basics 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-0iweb-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,metadataspec.replicas,spec.selector,spec.template— podobnie jak w przypadku Deploymentspec.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-appVolumeClaimTemplates
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: 1GiPeł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: nginxNazewnictwo 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
volumeClaimTemplatesdo 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 Kubernetes Basics, przejdź na CoddyKit PRO. Kurs Kubernetes Basics 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 Kubernetes Basics 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ąć Kubernetes Basics?
Nie wymagamy żadnego doświadczenia. Kubernetes Basics 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 Kubernetes Basics?
Tak. Każda lekcja Kubernetes Basics 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
- StatefulSets dla aplikacji stanowych
- DaemonSets dla zadań zależnych od węzła
- Poznajemy Kubernetes Operators
- Definicje niestandardowych zasobów (CRD)