kubernetes

Когда Kubernetes НЕ нужен

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

Цена называется сложностью

За автоматику Kubernetes расплачиваются сложностью. Это большая система: контейнеры заворачиваются в поды, поды держит Deployment через ReplicaSet, доступ дает Service, настройки приходят из ConfigMap, секреты из Secret, все это разложено по namespace, а под ними работает сеть из CNI-плагинов, kube-proxy и собственного DNS. Каждый из этих объектов вы прошли на предыдущих шагах, и вместе они складываются в систему, которую нужно учить, обслуживать и мониторить.

Эта сложность не разовая. Кластер живет, ломается своими способами, требует обновлений и присмотра. Если у компании нет ни кластера, ни человека, который умеет с ним обращаться, то Kubernetes добавляет к приложению целый второй слой проблем, которого до него просто не было. Поэтому первый честный вопрос звучит не «выиграю ли я от Kubernetes», а «потяну ли я его обслуживание».

Когда хватает Docker Compose

Тот самый Docker Compose из модуля про Docker никуда не делся и для множества задач остается правильным выбором. Если все ваше приложение это несколько контейнеров на одном сервере, Compose опишет их в одном файле и поднимет одной командой, без кластера, без манифестов, без отдельного слоя для обслуживания.

Признаки, по которым видно, что Kubernetes пока избыточен, простые. Сервис помещается на один сервер, и запаса по мощности хватает. Трафик ровный, без резких всплесков, под которые нужно срочно добавлять копии. Выкаты редкие, и короткая пауза на обновление никого не пугает. Команда небольшая, и держать кластер некому. Пет-проект, внутренняя утилита, лендинг, небольшой сервис с предсказуемой нагрузкой живут на Docker Compose годами и чувствуют себя прекрасно. Поднимать ради них кластер это стрельба из пушки по воробьям.

Где Kubernetes начинает окупаться

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

Масштаб это когда контейнеров и серверов столько, что раскладывать их руками уже невозможно, ровно те задачи оркестрации, с которых начинался модуль. Отказоустойчивость это требование, чтобы сервис продолжал работать при падении отдельных машин, а не ждал, пока дежурный поднимет его вручную. Частые выкаты это поток новых версий, который без автоматического rolling update превращается в день монотонной ручной работы на каждый релиз. Когда эти три фактора совпадают, ручное управление перестает справляться, и сложность кластера окупается с лихвой. Когда не совпадают ни один, кластер это лишний вес.

Это общее правило, а не частный случай

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

Факт. Если кластер все-таки нужен, его необязательно собирать и обслуживать самому. В облаках есть managed Kubernetes, где control plane целиком берет на себя провайдер. Это снимает большую часть забот по эксплуатации, но не отменяет сложности самого Kubernetes: манифесты, объекты и сеть остаются на вас, и учить их все равно придется.

Причем здесь DevOps

Выбрать подходящий инструмент это тоже инженерное решение, и для девопса оно такое же рабочее, как написать манифест. Уметь развернуть Kubernetes ценно, но не менее ценно вовремя сказать, что в этом проекте он не нужен и хватит Docker Compose. За лишним кластером стоят реальные деньги и реальное время людей, которые его поддерживают, и решение «обойдемся без него» экономит и то, и другое. Здравый ответ на собеседовании про Kubernetes это не «я подниму его везде», а «я подниму его там, где он окупается, и не стану городить кластер вокруг сервиса, которому хватает одного сервера».

Словарик

ТерминЧто означает
Docker ComposeЗапуск нескольких контейнеров на одном сервере из одного файла, без кластера
Правило достаточного инструментаБрать самое простое решение, которое закрывает задачу
ОркестрацияУправление множеством контейнеров на множестве серверов
ОтказоустойчивостьСпособность сервиса работать при падении отдельных машин
Managed KubernetesКластер от облака: control plane обслуживает провайдер