Kubernetes:
Оркестратор Вселенной
Как управлять сотней контейнеров и не сойти с ума. Поды, Сервисы и Декларативная магия.
1. Что такое K8s?
Если Docker — это один музыкант, то Kubernetes (K8s) — это дирижер оркестра.
Главный принцип: Декларативность. Ты не говоришь "запусти сервер". Ты пишешь в YAML: "Я хочу, чтобы было 3 сервера". K8s сам решает, как это сделать и следит, чтобы их всегда было 3.
2. Архитектура
🧠 Control Plane (Master)
Мозг кластера.
- API Server: Единственная точка входа (kubectl общается с ним).
- Scheduler: Решает, на какой сервер поселить новый Pod.
- Etcd: База данных кластера. Хранит всё состояние.
💪 Worker Node
Рабочая лошадка.
- Kubelet: Агент. Получает приказы от Мастера и запускает контейнеры.
- Kube-proxy: Сетевой маг. Пересылает трафик к нужному Pod-у.
3. Pod (Атом)
K8s не запускает контейнеры напрямую. Он запускает Pod-ы.
Pod — это "оболочка" для одного (или пары) контейнеров. У них общий IP и общие тома.
// pod.yaml
apiVersion: v1kind: Pod
metadata:
name: my-nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
Важно: Pod смертен. Если он упал, K8s создаст новый, с новым IP.
4. Deployment (Завод)
Никто не создает Pod-ы вручную. Мы создаем Deployment. Это "менеджер", который следит за количеством копий.
// deployment.yaml
apiVersion: apps/v1kind: Deployment
metadata: { name: web-app }
spec:
replicas: 3 # Хочу 3 копии всегда!
selector: { matchLabels: { app: nginx } }
template:
# (тут описание Pod-а)
Если один Pod умрет, Deployment тут же создаст новый, чтобы их снова стало 3.
5. Service & Ingress
Pod-ы постоянно умирают и меняют IP. Как к ним обращаться стабильно?
Service — это "стабильный номер телефона". Вы звоните на Service, а он переключает вас на любой живой Pod.
ClusterIP
Только внутри кластера. База данных, бэкенд.
NodePort
Открывает порт на каждом сервере (например, 30001).
Ingress
Входная дверь. Маршрутизация по доменам (app.com -> service-a).
6. Данные и Конфиги
Где хранить пароли и файлы, если Pod-ы умирают? Кликни.
ConfigMap
Например:
nginx.conf, переменные окружения APP_COLOR=blue.Они подключаются к Pod-у как файлы или env-vars. Позволяет менять настройки без пересборки Docker-образа.