Kubernetes: как с первого дня подготовить приложение к масштабированию

8 декабря 2020, 12:59
0

Kubernetes: как с первого дня подготовить приложение к масштабированию

В Evrone мы придерживаемся highload-подхода к разработке, который позволяет уже на первичном этапе заложить технические возможности для дальнейшего масштабирования сервиса даже на слабом железе.
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 поделится своей экспертизой или возьмёт на себя задачу по безопасной миграции. 

Ответить?
Введите капчу