Middle
Do czego służą próby w Kubernetes?
sobes.tech AI
Odpowiedź od AI
Próby w Kubernetes służą do określenia stanu kontenerów i zarządzania cyklem życia podów. Umożliwiają klastrowi automatyczną reakcję na zmiany stanu aplikacji, zapewniając ich dostępność i stabilność.
Istnieją trzy główne typy prób:
- Liveness probe (Próba żywotności): Określa, czy aplikacja wewnątrz kontenera działa. Jeśli próba żywotności zakończy się błędem, Kubernetes ponownie uruchomi kontener.
- Readiness probe (Próba gotowości): Określa, czy kontener jest gotowy do przyjmowania ruchu. Jeśli próba gotowości zakończy się błędem, Kubernetes tymczasowo wyklucza pod z listy dostępnych punktów końcowych dla serwisu, który kieruje do niego ruch.
- Startup probe (Próba uruchomienia): Określa, czy aplikacja w kontenerze zakończyła uruchamianie. Może być używana dla aplikacji wymagających długiego czasu inicjalizacji. Jeśli próba uruchomienia zakończy się sukcesem, kolejne kontrole (żywotność/gotowość) rozpoczynają się zgodnie z harmonogramem. Jeśli nie powiedzie się w określonym czasie, Kubernetes zabije i ponownie uruchomi kontener.
Próby mogą być realizowane na różne sposoby:
- ExecAction: Wykonuje polecenie wewnątrz kontenera. Sukces jest określany na podstawie kodu zwrotu (0 - sukces, nie 0 - błąd).
# Przykład ExecAction dla próby żywotności livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 - HTTPGetAction: Wysyła żądanie HTTP GET do wskazanego portu i ścieżki kontenera. Sukces jest określany na podstawie kodu statusu HTTP (zazwyczaj 2xx lub 3xx).
# Przykład HTTPGetAction dla próby gotowości readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 5 periodSeconds: 5 failureThreshold: 3 - TCPSocketAction: Próbuje nawiązać połączenie TCP na wskazanym porcie kontenera. Sukces jest określany na podstawie pomyślnego połączenia.
# Przykład TCPSocketAction dla próby żywotności livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 15 periodSeconds: 20
Poprawne użycie prób jest kluczowe dla niezawodności i odporności na błędy aplikacji w Kubernetes.