Kubernetes Probes
Kubernetes (K8s) є потужним інструментом для оркестрації контейнерів, який допомагає розгортати, масштабувати та управляти програмними аплікаціями. У світі, де висока доступність та надійність є критично важливими, Kubernetes пропонує інструменти для моніторингу стану вашого додатку. Однією з ключових особливостей K8s для забезпечення надійності є probes, або датчики.
Що таке Probes?
Probes у Kubernetes — це механізми, які дозволяють Kubelet (агенту, що запущений на кожній ноді) перевіряти стан контейнера. Використовуючи probes, Kubernetes може вирішити, коли перезапустити контейнер, коли відмовитись від запитів на контейнер (якщо він не готовий обробляти запити) та коли контейнер готовий приймати трафік.
Види Probes
У Kubernetes існують три основні типи probes, які використовуються для різних цілей:
- livenessProbe: Визначає, чи працює контейнер. Якщо liveness probe не вдається, kubelet вб'є контейнер і контейнер буде перезапущений відповідно до його політики перезапуску.
- readinessProbe: Визначає, чи готовий контейнер приймати запити. Якщо readiness probe не вдається, endpoints controller видалить IP-адресу пода з набору endpoints всіх сервісів, які використовують цей под.
- startupProbe: Визначає, чи завершив контейнер свій запуск. Це особливо корисно для контейнерів, які мають довгий час запуску, забезпечуючи, що liveness або readiness probes не почнуть перевірку до того, як додаток буде повністю запущено.
Конфігурація Probes
Probes можуть бути налаштовані з допомогою трьох основних параметрів:
- initialDelaySeconds: Кількість секунд до ініціації перевірки після старту контейнера.
- periodSeconds: Частота, з якою probe буде виконуватися.
- timeoutSeconds: Час очікування відповіді від probe перед вважанням її невдалою.
Крім того, для конфігурації probes можуть бути використані такі методи:
- HTTP GET: Kubernetes виконує HTTP GET запит до контейнера. Якщо відповідь є успішною (код статусу в діапазоні 200-399), probe вважається успішною.
- TCP Socket: Kubernetes спробує встановити TCP з'єднання з певним портом контейнера. Якщо з'єднання встановлено, probe вважається успішною.
- Exec: Виконання команди всередині контейнера. Якщо команда виходить з кодом 0, probe вважається успішною.
Приклад Конфігурації
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: myimage
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 15
timeoutSeconds: 2
readinessProbe:
exec:
command:
- cat
- /app/is_ready
initialDelaySeconds: 5
periodSeconds: 5
У цьому прикладі для контейнера налаштовано liveness probe, яка виконує HTTP GET запит на шлях /health через 15 секунд після старту контейнера і кожні 2 секунди після цього. Readiness probe виконує команду cat /app/is_ready кожні 5 секунд, починаючи з 5 секунд після старту контейнера.