Урок 5 из 8 · 20 мин · обновлено
Kubernetes в общих чертах: зачем управлять множеством контейнеров
Какие задачи решает Kubernetes: много серверов и контейнеров, самовосстановление, масштабирование и обновление без остановки. Главные понятия — под, Deployment и Service — на простом примере.
Когда контейнеров становится много
«Чайная лавка» выросла: под Новый год заказов в десять раз больше, сайт работает на нескольких серверах, отдельно — сервис оплаты, рассылки, поиск. Контейнеров десятки. Вручную решать, на каком сервере что запустить, перезапускать упавшее и добавлять копии при нагрузке — уже невозможно.
Kubernetes (сокращённо K8s) — система, которая управляет контейнерами на многих серверах. Его главный принцип: вы описываете желаемое состояние, а Kubernetes поддерживает его сам. «Хочу три копии сайта версии 1.4.0» — и он запустит три, перезапустит упавшую, распределит их по серверам.
Главные понятия
| Понятие | Что это | Пример |
|---|---|---|
| Кластер | Группа серверов под управлением Kubernetes | Пять серверов «Чайной лавки» |
| Под (Pod) | Минимальная единица запуска: один или несколько контейнеров | Один экземпляр сайта |
| Deployment | Описание, сколько копий подов и из какого образа держать | «Три копии shop:1.4.0» |
| Service | Постоянный адрес для группы подов | Адрес, по которому к сайту обращается балансировщик |
Как выглядит описание
Всё в Kubernetes описывают в файлах YAML. Deployment сайта:
apiVersion: apps/v1
kind: Deployment
metadata:
name: shop
spec:
replicas: 3
selector:
matchLabels:
app: shop
template:
metadata:
labels:
app: shop
spec:
containers:
- name: web
image: registry.example.ru/shop:1.4.0
ports:
- containerPort: 8000
Главное здесь: replicas: 3 — держать три копии, image — из какого образа. Применяют описание командой:
kubectl apply -f shop.yaml
kubectl get pods
NAME READY STATUS RESTARTS
shop-6d4f9c7b8d-2kq4p 1/1 Running 0
shop-6d4f9c7b8d-8xw7m 1/1 Running 0
shop-6d4f9c7b8d-tq9zn 1/1 Running 0
Что Kubernetes делает сам
- Самовосстановление. Под упал или сервер выключился — Kubernetes запустит замену на другом сервере.
- Масштабирование. Под праздники меняем
replicas: 3наreplicas: 10— копий станет десять. Можно настроить и автоматически: больше нагрузка — больше копий. - Обновление без остановки. Меняем версию образа на
1.5.0— Kubernetes по одной запускает новые копии и выключает старые. Пользователи не замечают обновления. Если что-то пошло не так, откат — одна команда.
Не всем нужен Kubernetes
Kubernetes мощный, но сложный: его настройка и поддержка — отдельная работа. Небольшому сайту на одном-двух серверах хватит Docker Compose из урока 4. Часть хорошего DevOps-инженера — умение не усложнять там, где это не нужно. Многие облачные провайдеры предлагают Kubernetes как готовую услугу, чтобы не настраивать кластер самим.
Попробуйте сами. Перед распродажей нужно увеличить число копий сайта с 3 до 8 и выпустить новую версию 1.5.0. Что вы поменяете в описании Deployment и как убедитесь, что всё получилось?
Пример ответа
В файле shop.yaml поменять две строки:
replicas: 8
image: registry.example.ru/shop:1.5.0
Применить командой kubectl apply -f shop.yaml. Затем проверить kubectl get pods: должно быть восемь подов в статусе Running. Ход обновления можно смотреть командой kubectl rollout status deployment/shop, а если новая версия ведёт себя плохо — откатить командой kubectl rollout undo deployment/shop.
Мини-тест · 4 вопроса
Проверьте себя
Выберите вариант, который кажется вам правильным. В конце вы увидите свой результат и объяснение к каждому вопросу.
-
Какую задачу решает Kubernetes?
Когда контейнеров десятки и сотни, вручную следить за ними невозможно. Kubernetes делает это автоматически.
-
Один из подов сайта упал. Что сделает Kubernetes?
Вы описали желаемое состояние — например, три копии. Kubernetes постоянно сверяет реальность с ним и исправляет расхождения.
-
Что делает Service в Kubernetes?
Поды постоянно пересоздаются и меняют адреса. Service — постоянная точка входа, которая знает, куда отправить запрос.
-
Нужен ли Kubernetes небольшому сайту на одном сервере?
Kubernetes решает задачи масштаба. Для одного сервера он добавит больше сложности, чем пользы.