Kontrole stanu: sondy liveness i readiness
Skonfiguruj sondy liveness i readiness, aby mieć pewność, że aplikacje działają prawidłowo i są gotowe do obsługi ruchu.
Kontrole stanu: sondy liveness i readiness to bezpłatna lekcja DevOps Bootcamp na CoddyKit. To lekcja 3 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.
Utrzymywanie aplikacji w dobrym stanie
Skąd Kubernetes wie, czy aplikacja rzeczywiście działa? Nie wystarczy, że kontener jest uruchomiony — musi być również zdrowy i gotowy do obsługi ruchu.
Kubernetes używa specjalnych kontroli nazywanych sondami do monitorowania aplikacji. Sondy pomagają zapewnić użytkownikom niezawodne działanie usług.
Czym są sondy żywotności?
Sonda żywotności sprawdza, czy aplikacja nadal działa i odpowiada. Jeśli sonda żywotności zakończy się niepowodzeniem, Kubernetes uzna kontener za niesprawny i uruchomi go ponownie.
Można porównać ją do monitora pracy serca: jeśli serce przestaje bić, potrzebne jest ponowne uruchomienie! Pomaga to odzyskać sprawność po zakleszczeniach lub awariach aplikacji.
Podstawy sond żywotności
Sondy żywotności można konfigurować za pomocą różnych metod:
- HTTP GET: Wysyła żądanie HTTP do określonej ścieżki.
- Gniazdo TCP: Sprawdza, czy można otworzyć połączenie TCP z portem.
- Polecenie Exec: Uruchamia polecenie wewnątrz kontenera.
W przypadku aplikacji internetowych często używa się HTTP GET. Poniższy fragment pokazuje, jak zdefiniować taką sondę w YAML-u Poda:
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 5Sonda żywotności w działaniu
Ta aplikacja Flask w języku Python zasymuluje niesprawny stan, kończąc działanie po dwóch żądaniach do /healthz. Sonda Kubernetes wykryje ten stan i uruchomi kontener ponownie.
Najpierw zapisz kod jako app.py:
from flask import Flask, Response
import os
import time
app = Flask(__name__)
request_count = 0
@app.route('/healthz')
def health_check():
global request_count
request_count += 1
if request_count > 2:
print("Liveness probe failing! Exiting...")
os._exit(1) # Simulate a crash
print(f"Liveness probe successful (count: {request_count})")
return Response("OK", status=200)
@app.route('/')
def home():
return "Hello from the Liveness Probe Demo!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)Uruchamianie sondy żywotności
Teraz zobaczmy, jak Kubernetes korzysta z sondy żywotności. Jeśli wdrożysz tę aplikację przy użyciu poniższego YAML-u, Kubernetes uruchomi Pod ponownie, gdy kontrola stanu zakończy się niepowodzeniem:
apiVersion: v1
kind: Pod
metadata:
name: liveness-demo
spec:
containers:
- name: liveness-container
image: python:3.9-slim-buster
command: ["python", "app.py"]
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 1
volumeMounts:
- name: app-volume
mountPath: /app
volumes:
- name: app-volume
configMap:
name: liveness-app-config
# (You'd need a ConfigMap for app.py, omitted for brevity)Po wdrożeniu, po dwóch pomyślnych kontrolach trzecia zakończy się niepowodzeniem, a Kubernetes uruchomi kontener ponownie.
Czym są sondy gotowości?
Sonda gotowości sprawdza, czy aplikacja jest gotowa do obsługi ruchu. Jeśli sonda gotowości zakończy się niepowodzeniem, Kubernetes przestanie kierować ruch do tego Poda, ale nie uruchomi go ponownie.
Ma to kluczowe znaczenie podczas uruchamiania (np. w oczekiwaniu na połączenie z bazą danych) oraz podczas kontrolowanego zamykania. Pomyśl: „Czy sklep jest otwarty dla klientów?”
Podstawy sond gotowości
Sondy gotowości konfiguruje się podobnie do sond żywotności, korzystając z HTTP GET, gniazda TCP lub poleceń Exec. Kluczowa różnica dotyczy ich działania:
- Żywotność: W razie niepowodzenia uruchamia kontener ponownie.
- Gotowość: W razie niepowodzenia usuwa Pod z punktów końcowych usługi (ruch nie jest kierowany).
Oto fragment konfiguracji sondy gotowości:
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 10
periodSeconds: 5Sonda gotowości w działaniu
Ta aplikacja Flask symuluje aplikację, która potrzebuje czasu na inicjalizację (np. na połączenie z bazą danych). Zacznie zgłaszać stan „gotowa” dopiero po 5 sekundach.
Zapisz ją jako ready_app.py:
from flask import Flask, Response
import time
app = Flask(__name__)
start_time = time.time()
READY_AFTER_SECONDS = 5
@app.route('/ready')
def readiness_check():
if time.time() - start_time > READY_AFTER_SECONDS:
print("Readiness probe successful: App is ready!")
return Response("READY", status=200)
else:
print("Readiness probe failing: App not ready yet...")
return Response("NOT READY", status=503)
@app.route('/')
def home():
return "Hello from the Readiness Probe Demo!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)Uruchamianie sondy gotowości
Po wdrożeniu z użyciem tego YAML-a Pod nie będzie otrzymywać ruchu przez pierwsze initialDelaySeconds sekund oraz przez czas potrzebny, aby punkt końcowy /ready zwrócił 200 OK.
apiVersion: v1
kind: Pod
metadata:
name: readiness-demo
spec:
containers:
- name: readiness-container
image: python:3.9-slim-buster
command: ["python", "ready_app.py"]
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 10
periodSeconds: 3
volumeMounts:
- name: app-volume
mountPath: /app
volumes:
- name: app-volume
configMap:
name: readiness-app-config
# (You'd need a ConfigMap for ready_app.py, omitted for brevity)Dzięki temu ruch jest kierowany wyłącznie do instancji, które są rzeczywiście gotowe.
Żywotność a gotowość
Ważne jest prawidłowe używanie obu sond:
- Sonda żywotności: służy do wykrywania, czy aplikacja uległa awarii lub znajduje się w stanie, z którego nie można jej przywrócić. Jeśli sonda zakończy się niepowodzeniem, Kubernetes uruchamia ponownie kontener.
- Sonda gotowości: służy do wykrywania, czy aplikacja jest gotowa przyjmować i przetwarzać żądania. Jeśli sonda zakończy się niepowodzeniem, Kubernetes przestaje kierować ruch do Poda.
Pełnią różne, ale uzupełniające się funkcje, dzięki którym aplikacje pozostają niezawodne.
Sprawdź swoją wiedzę
Które z poniższych stwierdzeń dotyczących sond żywotności i gotowości są PRAWDZIWE?
Sondy: najważniejsze informacje
W tej lekcji poznali Państwo sondy żywotności i gotowości w Kubernetesie. Te mechanizmy sprawdzania stanu mają kluczowe znaczenie dla utrzymania niezawodności i dostępności aplikacji:
- Sondy żywotności wykrywają niesprawne kontenery i powodują ich ponowne uruchomienie.
- Sondy gotowości określają, kiedy Pod jest gotowy do odbierania ruchu sieciowego.
Skuteczne korzystanie z tych sond zapewnia aplikacjom stałą responsywność i odporność na problemy.
Często zadawane pytania
Czy lekcja „Kontrole stanu: sondy liveness i readiness” jest bezpłatna?
Tak — pełny tekst „Kontrole stanu: sondy liveness i readiness” 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 „Kontrole stanu: sondy liveness i readiness”?
Skonfiguruj sondy liveness i readiness, aby mieć pewność, że aplikacje działają prawidłowo i są gotowe do obsługi ruchu. Ć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 3 z 4.
Ile czasu zajmuje lekcja „Kontrole stanu: sondy liveness i readiness”?
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
- Logowanie za pomocą kubectl logs
- Metryki z Prometheus i Grafana
- Kontrole stanu: sondy liveness i readiness
- Śledzenie rozproszone i zdarzenia