Pod, Deployment
Kubernetes (K8s) — оркестратор контейнеров: управляет тем, где и сколько копий контейнеров запущено, автоматически перезапускает упавшие, распределяет нагрузку. Docker (см. тему «Образ и контейнер») упаковывает приложение, Kubernetes управляет множеством таких контейнеров на множестве серверов.
Pod — минимальная единица в Kubernetes, обычно один контейнер (иногда несколько тесно связанных) внутри:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app
image: my-app:1.0
ports:
- containerPort: 8080
Deployment — управляет жизненным циклом подов: сколько копий запущено, что делать при сбое, как выкатывать новую версию:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3 # держать 3 копии пода постоянно
selector:
matchLabels: { app: my-app }
template:
metadata:
labels: { app: my-app }
spec:
containers:
- name: app
image: my-app:1.0
Копнуть глубже
Self-healing — главная сила Deployment. Если под упадёт (приложение упало, контейнер завершился) — Deployment автоматически создаёт новый под взамен, чтобы поддерживать заданное число replicas. Это происходит без вмешательства человека — система сама восстанавливается после сбоя отдельных копий.
Rolling update — обновление без простоя. При деплое новой версии Deployment постепенно заменяет старые поды новыми (не убивает все сразу) — в любой момент часть подов работает на старой версии, часть — на новой, и трафик продолжает обслуживаться без перерыва. Если новая версия начинает массово падать, можно остановить обновление и откатиться.
Liveness и Readiness Probe связаны с тем же /health-эндпоинтом Actuator (см. тему «Actuator») — Kubernetes регулярно опрашивает под, чтобы понять, жив ли он (liveness) и готов ли принимать трафик (readiness), и принимает решения на основе этих проверок.
• что такое self-healing и rolling update (если дошёл до 2-го слоя).