Kubernetes: как с первого дня подготовить приложение к масштабированию
К нам часто обращаются компании со схожей проблемой. Следуя принципу «решаем проблемы по мере поступления», они откладывают разработку инфраструктуры до момента, когда вырастет трафик. В начале пути это были небольшие компании, которым хватало одного сервера и пары разработчиков, чтобы всё работало. Обновления проходили без деплой-системы. А если возникала проблема, можно было просто откатиться до последней стабильной версии, бизнес-метрики от этого не страдали. Когда же вставал вопрос разработки инфраструктуры, цена каждой ошибки исчислялась уже миллионами. Чтобы избежать подобных проблем, мы с самого начала придерживаемся highload-подхода и внедряем Kubernetes с первыми строчками кода.
Автоматизация процесса с Kubernetes
В сфере разработки приложений многим знаком инструмент Docker. Он используется для изоляции приложения в контейнерах, код как бы отделяется от железа, что позволяет управлять сервисом и разворачивать его в разных средах.
В связке с Docker часто работает Kubernetes, софт для управления, группировки и настройки контейнеров. Kubernetes автоматизирует многие процессы и помогает одновременно разворачивать сервис на множестве виртуальных машин. И чем больше сервисов, тем ощутимее преимущества от использования Kubernetes.
Несмотря на заметную экономию времени и ресурсов, софт окружен мифами, что останавливает многих от его внедрения.
Миф 1 — Kubernetes сложен в использовании
Не стоит поддаваться первому впечатлению, освоению Kubernetes способствует несколько факторов:
Ответы на многие вопросы даёт подробная официальная документация.
С ростом популярности инструмента сформировалось активное комьюнити, которое в том числе делится своими наработками.
Выполнение многих задач берёт на себя пакетный менеджер Helm. Он упрощает упаковку, настройку и развёртывание приложений, как, например, pip в Python или Apt для Unix.
Kubeapps — бесплатный инструмент для Helm, который служит каталогом готовых решений. Если же вы приверженец полностью кастомной разработки, используйте Kubeapps как образец.
Еще одно преимущество Kubernetes — это возможность горизонтального и вертикального масштабирования: распараллеливать трафик между репликами, выделять более производительные машины и/или выключать недозагруженные. Это более прагматичный подход к распределению ресурсов.
Миф 2 — это затратное решение
Есть убеждение, что Kubernetes тяжёлый и ресурсоемкий в сравнении с другими инструментами. Для комфортной работы минимальная комплектация кластера включает 5-6 серверов с двухъядерными центральными процессорами и 4 ГБ оперативной памяти. В проектах с высокой нагрузкой мы используем на главной ноде — это сервер в терминологии Kubernetes — оперативную память от 8 ГБ. Такие требования к машинам противоречат нашему утверждению, что Kubernetes доступен на слабом железе.
Решение кроется в K3S. Это новый, облегчённый дистрибутив, выпущенный в 2019 году. Он оптимизирован для работы на машинах, которые по техническим показаниям не дотягивают до требований классического Kubernetes. За счёт этого получается развернуть кластер с меньшим объёмом памяти. С использованием K3S получается Kubernetes с двоичным файлом размером менее 40 МБ, для работы которого требуется 512 МБ оперативной памяти и около 75 МБ на рабочей ноде. Он легко устанавливается и запускается на Raspberry Pi.
Если и эти показания слишком велики, дистрибутив можно ещё больше упростить, отказавшись от Docker. Вместо этого K3S работает с Containerid, он и создает среду контейнеризации.
Kubernetes в действии
Первый проект, в котором мы использовали Kubernetes, — облачный сервис для непрерывной интеграции Vexor. При помощи Kubernetes мы объединили несколько виртуальных машин в единую экосистему. Теперь все данные проходили через брокер RabbitMQ, что сделало внутренние сервисы более автономными. Это значительно облегчило миграцию контейнеров. Все процессы брал на себя Kubernetes.
У нас также есть опыт запуска Kubernetes и на bare-metal, и даже в режиме одного сервера — конечно же, с использованием K3S. В этом случае необходимо учесть пару моментов: следить за распределением трафика, внимательно подходить к созданию новых нод и поиску места на диске.
Если вы столкнулись с проблемой масштабирования проекта на пике его нагрузки или хотите обезопасить сервис и заранее интегрировать Kubernetes, напишите нам, команда Evrone поделится своей экспертизой или возьмёт на себя задачу по безопасной миграции.