Prog Academy
RU UA
DevOps и облака

Что такое Kubernetes (K8s)?

Kubernetes — система оркестрации контейнеров: она сама запускает нужное количество контейнеров на группе серверов, перезапускает упавшие, распределяет нагрузку и выкатывает обновления без остановки сервиса.

Docker решает задачу «запустить один контейнер». Kubernetes решает задачу «управлять сотнями контейнеров на десятках серверов»: где именно их разместить, что делать при отказе узла, как масштабировать под нагрузку.

Работа строится декларативно: вы описываете желаемое состояние — «пять экземпляров этого сервиса, вот такие ресурсы, такой адрес», — а кластер постоянно приводит реальность к этому описанию. Отсюда самовосстановление и плавные обновления.

Kubernetes даёт много, но и стоит дорого в сложности. Для небольшого проекта с парой сервисов он чаще всего избыточен.

Где применяется

Kubernetes ставят там, где сервисов много и простой недопустим: маркетплейсы, финтех, телеком, крупные SaaS-продукты. Он держит нужное число копий каждого сервиса, переносит их при отказе узла, распределяет трафик и выкатывает новую версию постепенно, чтобы пользователи не заметили обновления.

Своими силами кластер поднимают редко — чаще берут управляемый вариант у облачного провайдера. В вакансиях DevOps и SRE Kubernetes входит в число самых частых требований, а связка с Terraform и GitOps-подходом стала фактическим стандартом эксплуатации.

Пример

Ночью один из серверов кластера выходит из строя. Kubernetes замечает это за секунды, поднимает потерянные копии сервисов на оставшихся узлах и перенаправляет на них трафик. Инженер узнаёт о случившемся из уведомления мониторинга, а не от пользователей.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: registry.example.com/api:1.4.2
          ports:
            - containerPort: 3000
Описание развёртывания: три копии сервиса, лимиты ресурсов — кластер сам поддерживает это состояние.

Частые вопросы

Нужен ли Kubernetes небольшому проекту?

Чаще всего нет. Для одного-двух сервисов он добавляет сложности больше, чем пользы: кластер нужно настраивать, обновлять и уметь чинить. Начинают обычно с обычного сервера с контейнерами или управляемого хостинга приложений, а к Kubernetes приходят по мере роста.

Сложно ли изучить Kubernetes?

Порог входа заметно выше, чем у Docker: нужно понимать сети, хранилища, права доступа и саму модель объектов кластера. Разумный порядок — сначала уверенно освоить контейнеры, затем Kubernetes. Без опыта эксплуатации сервисов многие его концепции выглядят немотивированными.

Что такое под (pod)?

Минимальная единица, которой управляет Kubernetes: один или несколько тесно связанных контейнеров с общим сетевым адресом и томами. Обычно в поде один контейнер приложения, а соседние добавляют вспомогательные функции — сбор логов или проксирование трафика.

Kubernetes бесплатный?

Сам проект имеет открытый исходный код и бесплатен. Платить приходится за инфраструктуру, на которой он работает, и за управляемый сервис у облачного провайдера, если вы не хотите обслуживать управляющие узлы сами. Основная статья расходов обычно — сами серверы.

Связанные термины