Введение в Kubernetes
Краткая история появления Kubernetes
Изначально Kubernetes разрабатывали как внутреннюю систему в Google¹: софт назывался Project Seven. Исходный код опубликовали в 2014 году, а в 2015-м представили версию 1.02.
Какие задачи решает Kubernetes
Docker-контейнер — изолированный портативный экземпляр программного обеспечения с зависимостями. Ручное управление контейнерами накладывает такие ограничения:
- масштабирование при растущей нагрузке;
- размещение экземпляров контейнеров;
- обновление контейнеров без простоя;
- мониторинг контейнеров и инфраструктуры, состояния сети;
- обеспечение сетевого взаимодействия и балансировки нагрузки.
Что такое Kubernetes простыми словами
Kubernetes (K8s) — это платформа для организации управления контейнерами, которая автоматизирует их развертывание, масштабирование и работу.
Отличие Kubernetes от Docker
Docker вводит стандарт по упаковке и доставке приложений. Kubernetes обеспечивает их оркестрацию.
| Критерий сравнения | Docker | Kubernetes |
| Функциональность | Контейнеризация (упаковка) приложений | Оркестрация (управление контейнерами в производственной среде) |
| Уровень управления | Контейнеры на одном узле (хосте) | Кластеры с автоматическим распределением контейнеров по серверам |
| Масштабирование | Вручную | Автоматически |
| Отказоустойчивость | При внешнем контроле | Автоматическое восстановление |
| Требования к разработчикам и специалистам по развертыванию | Проще | Сложнее, высокий порог входа |
Для управления сетевым трафиком и взаимодействием микросервисов на кластере, объединения кластеров в федерации, обеспечения наблюдаемости в СберТехе используют инструмент Platform V Synapse Service Mesh.
Архитектура Kubernetes
Общая схема архитектуры кластера
Kubernetes имеет классическую клиент-серверную архитектуру. Кластер разделен на два типа узлов:
- управляющий слой — Control Plane;
- рабочие узлы — Worker Nodes.
Управляющий слой и его роль
Управляющий слой (Control Plane, мастер-узел) нужен для администрирования. Это мозг системы, который, в частности, включает в себя такие компоненты:
- серверы программного интерфейса приложения (API-server);
- планировщик (scheduler);
- менеджер контроллеров (controller manager);
- хранилища данных (etcd).
Рабочие узлы (Worker Nodes)
Рабочие узлы — это «мышцы» , отвечающие за выполнение задач. В их состав входят такие компоненты:
- агент (kubelet);
- прокси для работы с сетью (kube-proxy);
- компонент для запуска контейнеров (container runtime).

Основные объекты и сущности Kubernetes
Под — минимальная единица выполнения
Под (pod) — это минимальная единица развертывания. Может содержать один или несколько работающих контейнеров, объединенных в группу.
Развертывание (Deployment) и набор реплик (ReplicaSet)
ReplicaSet — это контроллер в Kubernetes, гарантирующий работу заданного количества реплик определенного пода в момент времени. Контроллер отслеживает состояние единиц развёртывания: создает и/или удаляет их. Например, если одна сущность (Instance) не выдерживает нагрузку, разработчик может использовать ReplicaSet и указать, что нужно 5–7 сущностей. Дальше сам Kubernetes распределяет их по узлам сервера.
Deployment — это декларативное описание желаемого состояния приложения: YML-файл конфигурации, где указаны характеристики (приложение, версия, ключи).
Сервис (Service) и Точка входа (Ingress)
Service — абстракция, определяющая поды (логический набор минимальных единиц развертывания), а также политики доступа к ним.
Ingress — сущность, где создается описание конфигурации Ingress Сontroller. Приложение-контроллер Ingress обрабатывает трафик и управляет внешним доступом к службам (HTTP/HTTPS) в кластере.
Карта настроек (ConfigMap) и Секрет (Secret)
ConfigMap — объект Kubernetes, где хранятся данные конфигурации. Формат — пары «ключ — значение».
Secret — объект, в котором хранятся чувствительные данные в зашифрованном виде: пароли, ключи. Используется для того, чтобы передавать конфиденциальную информацию в поды, минимизируя риск утечек и несанкционированного доступа.
Пространство имен (Namespace)
Namespace — это способ разделить ресурсы кластера между разными пользователями. Внутри одного кластера может быть несколько изолированных друг от друга областей видимости имен объектов.
Как Kubernetes управляет контейнеризированными приложениями
Планирование и размещение подов
Планировщик (Scheduler) распределяет поды по узлам с учетом ЦПУ, RAM (наличие или отсутствие ресурсов на физическом узле сервера).
Масштабирование приложений
K8s поддерживает автоматическое горизонтальное и вертикальное масштабирование — автоскейлинг (AutoScaling).
Самовосстановление и отказоустойчивость
При падении пода восстанавливает его на этом же узле или на другом. За состоянием подов следит контроллер.
Обновления без простоя (rolling updates)
Раскатка постепенная: есть временной промежуток, позволяющий обновить систему без простоя. Механизм подразумевает, что обновляются сами поды, проходят проверку работоспособности (лайв-пробы/Liveness Probes, если есть). Затем убирается один старый под, вводится новый – и так до тех пор, пока все поды не обновятся.
Сетевое взаимодействие и хранение данных
Каждый под входит в группу сервисов и получает собственный идентификатор узла компьютерной сети (IP-адрес). Внутри Kubernetes все сервисы доступны по имени, поскольку при запуске виртуальной машины IP-адрес изменяется динамически.
Сетевая модель Kubernetes
Плоская сетевая структура работает так, что поды могут общаться друг с другом напрямую. Контейнеры внутри одного пода делят общую сеть (localhost), а каждый под в кластере имеет уникальный IP-адрес.
Обнаружение сервисов (Service Discovery)
Для поддержания сетевого взаимодействия работает протокол обнаружения сервисов (Service Discovery), который обспечиваетдинамическое разрешение имен (DNS-резолвинга). Именно благодаря Service Discovery поды находят друг друга по имени.
Постоянный том (Persistent Volumes) и запрос на постоянный том (Persistent Volume Claims)
Если контейнеру необходимо персистентное хранение в файловой системе, можно добавить данные в Persistent Volumes. Persistent Volume Claim (PVC) действует как запрос пода или пользователя на получение персистентного хранилища (Persistent Volume, PV).
Безопасность в Kubernetes
Kubernetes позволяет решить проблемы с развертыванием и управлением микросервисами. Но крупные команды и проекты с динамическими нагрузками сталкиваются и с недостатками Kubernetes: проблемами наблюдаемости и безопасности, необходимостью самостоятельной настройки сетевых политик.
Platform V DropApp — платформа оркестровки на основе Kubernetes с более чем 60 критических доработок. Инструмент предлагает ряд настроенных компонентов, позволяющих автоматизировать задачи и анализировать работу физических узлов и развернутых приложений.

Ролевая модель управления доступом (RBAC)
RBAC (Role-Based Access Control) в Kubernetes позволяет управлять правами доступа к API-объектам, например, подам. При этом механизм не контролирует взаимодействие сервисов друг с другом. Для управления сетевым взаимодействием нужны специальные инструменты — Istio, Linkerd и Consul.
Секреты (Secrets) и защита чувствительных данных
Сервис предусматривает Kubernetes Secrets — объекты для хранения чувствительных данных (пароли, OAuth-идентификаторы, SSH-ключи, API-ключи).
Сетевые политики (Network Policies)
Абстракция позволяет устанавливать правила взаимодействия объектов на кластере:
- какие поды могут отправлять трафик;
- как они взаимодействуют с внешними ресурсами;
- какие поды могут получать трафик.
По умолчанию все поды могут беспрепятственно взаимодействовать друг с другом. Это создает определенные риски безопасности инфраструктуры. В этом случае работающие Network Policies – необходимый инструмент дополнительной изоляции и ограничения трафика.
Kubernetes в разработке и эксплуатации (DevOps) и непрерывной интеграции и доставки (CI/CD)
Интеграция с CI/CD-конвейнерами (пайплайнами)
Алгоритм работы Kubernetes описывается в конфигурационном YML-файле. Инструмент оркестровки позволяет абстрагироваться от уровня контейнеров и использовать возможности автоматизации. Kubernetes превращается в платформу для создания конвейеров CI/CD (непрерывной интеграции и непрерывного развертывания).
Kubernetes и GitOps
Для управления контейнерными приложениями по методологии GitOps компаниям доступны такие инструменты:
- ArgoCD;
- Jenkins X;
- Helm operator;
- Flux;
- Quay;
- Gitkube;
- WKSctl и иные.
Для непрерывной доставки приложений в Platform V DropApp используется ArgoCD. Также доступны:
- запуск процессов из нескольких контейнеров (Argo-workflow);
- обновление приложений внутри кластера Kubernetes (Argo-rollout) и другие.
Преимущества и недостатки Kubernetes
Ключевые преимущества
Плюсы инструмента:
- работа с высоконагруженными проектами;
- автоматизация, поддержка автомасштабирования;
- экосистема и сообщество;
- оптимизация ресурсов за счет распределения контейнеров по узлам.
Сложность внедрения и эксплуатации
Использование Kubernetes часто приводит к проблеме накладных издержек (overhead): для запуска служб нужны ресурсы. Кроме этого, необходимо знать внутреннюю работу Kubernetes (сервисы, контроллеры, поды) — в противном случае есть риск проблем безопасности или нерабочего состояния кластера.
Когда стоит использовать Kubernetes, а когда нет
| Каким проектам не подходит | Каким проектам подходит |
| 3–10 простых сервисов | Бизнес-логика распределена на десятки и более сервисов, которые взаимодействуют друг с другом |
| Нет требований к простою системы (или они минимальны) | Простои критичны, существуют требования минимального простоя, доступности сервисов компании 99.99% |
| Нагрузка до 1000+ запросов в секунду (RPS) | Нагрузка 10 000+ запросов в секунду (RPS), высоконагруженные системы (Highload) |
| Обновления приложений и сервисов редкие, происходят вручную | Нужны постоянные обновления с сохранением доступности системы (канареечные релизы), конвейером непрерывной интеграции и доставки |
| Сайты без высоких нагрузок, интернет-магазины, личные блоги | Высоконагруженные маркетплейсы, коммерческие платформы, социальные сети и стриминговые сервисы, финансовые приложения |
| Инфраструктура простая | Инфраструктура сложная: облака, микросервисы, управление доступами, много репозиториев и команд |
Типовые сценарии использования
Kubernetes подходит для развертывания и управления микросервисами, организации внутренних сервисов, переноса приложений между локальными дата-центрами и облачными провайдерами.
Решение Platform V DropApp как инструмент для оркестрации контейнеров содержит более 60 критических доработок Kubernetes, которые позволяют соответствовать требованиям безопасности, надежности, доступности, производительности.

Альтернативы Kubernetes
По данным Edge Delta, Kubernetes занимает до 92% рынка инструментов для оркестровки контейнеров³. В России доля пользователей достигала 54%⁴. Сегодня компании все чаще выбирают платформенный подход и отечественные решения.
Platform V DropApp обеспечивает защиту данных, гибкий перенос сервисов между инфраструктурами (из локальных сред в облако и наоборот), снижение времени выхода (time-to-market) в том числе и с использованием канареечных релизов.
С ростом и усложнением инфраструктуры возникает вопрос, как работать с распределёнными микросервисными приложениями на разных серверах и в разных ЦОДах. Для управления ими используют Platform V Synapse Service Mesh.
Итоги
Kubernetes — открытое программное обеспечение для управления контейнезированными приложениями. При всех плюсах ИТ-решение имеет минусы, которые не позволяют использовать его в крупных корпорациях и высоконагруженных сервисах.
