Урок 5 из 8 · 20 мин · обновлено

Kubernetes в общих чертах: зачем управлять множеством контейнеров

Какие задачи решает Kubernetes: много серверов и контейнеров, самовосстановление, масштабирование и обновление без остановки. Главные понятия — под, Deployment и Service — на простом примере.

Когда контейнеров становится много

«Чайная лавка» выросла: под Новый год заказов в десять раз больше, сайт работает на нескольких серверах, отдельно — сервис оплаты, рассылки, поиск. Контейнеров десятки. Вручную решать, на каком сервере что запустить, перезапускать упавшее и добавлять копии при нагрузке — уже невозможно.

Kubernetes (сокращённо K8s) — система, которая управляет контейнерами на многих серверах. Его главный принцип: вы описываете желаемое состояние, а Kubernetes поддерживает его сам. «Хочу три копии сайта версии 1.4.0» — и он запустит три, перезапустит упавшую, распределит их по серверам.

Главные понятия

Понятие Что это Пример
Кластер Группа серверов под управлением Kubernetes Пять серверов «Чайной лавки»
Под (Pod) Минимальная единица запуска: один или несколько контейнеров Один экземпляр сайта
Deployment Описание, сколько копий подов и из какого образа держать «Три копии shop:1.4.0»
Service Постоянный адрес для группы подов Адрес, по которому к сайту обращается балансировщик

Как выглядит описание

Всё в Kubernetes описывают в файлах YAML. Deployment сайта:

YAML
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 поменять две строки:

YAML
  replicas: 8
YAML
          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 вопроса

Проверьте себя

Выберите вариант, который кажется вам правильным. В конце вы увидите свой результат и объяснение к каждому вопросу.

  1. Какую задачу решает Kubernetes?

  2. Один из подов сайта упал. Что сделает Kubernetes?

  3. Что делает Service в Kubernetes?

  4. Нужен ли Kubernetes небольшому сайту на одном сервере?