Обложка: Разработка приложений в среде Kubernetes: преимущества и нюансы

Разработка приложений в среде Kubernetes: преимущества и нюансы

Дмитрий Лазаренко

Дмитрий Лазаренко

Директор по продукту Mail.ru Cloud Solutions.

Систему оркестрации Kubernetes всё чаще называют более продвинутым уровнем разработки приложений на основе микросервисной архитектуры. Опенсорсная платформа управления контейнерами действительно позволяет быстрее разрабатывать и выводить на рынок ИТ-продукты и сервисы. А также обновлять их и обеспечивать доступность во время пиковых нагрузок.

Но и нюансов у технологии достаточно. Для кого среда Kubernetes становится стандартом? Кому лучше воспользоваться другими инструментами? И в чём особенность облачного Kubernetes-as-a-Service? Рассказывает Дмитрий Лазаренко, директор по продукту Mail.ru Cloud Solutions.

О контейнерах и микросервисах

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

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

Основное преимущество — это обособленность контейнера от реальной среды, в которой работает приложение. Он несёт с собой операционную систему. Так что можно одновременно запускать несколько контейнеров с приложениями, требующими разные дистрибутивы.

Именно контейнеры позволяют наиболее эффективно использовать микросервисную архитектуру разработки, которая предполагает отказ от монолитного решения в пользу комплекса автономных сервисов. В рамках одного приложения они взаимодействуют между собой не в единой среде, а через API. И если при монолитной архитектуре «‎ломается» всё приложение, когда из строя выходит какой-то компонент, то при использовании микросервисов, «‎потеря» одного компонента не влияет на приложение в целом. Оно продолжит работу без одной функции. А критичные функции можно дублировать в нескольких экземплярах контейнеров.

Kubernetes — инструмент для масштабных разработок

В производстве приложения можно задействовать сотни и даже тысячи контейнеров. Управлять ими вручную сложно и ресурсозатратно. Именно поэтому разработчикам необходимы такие сервисы, как Kubernetes.

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

Таким образом, система Kubernetes ускоряет разработку контейнерных приложений и выкатку обновлений. А ведь максимально быстрый Time-To-Market — это именно та задача, которые сегодня пытаются решить крупные игроки в ритейле и логистике, в финансовой сфере, в телекоме и других высококонкурентных направлениях бизнеса.

Почему в первую очередь именно крупные? Для перехода на среду Kubernetes компании нужны квалифицированные специалисты и серьёзные преобразования ИТ-подразделения. Кластеры Kubernetes — это сложная система. Она требует точной настройки и постоянной поддержки, создания отдельной экосистемы и подключения отдельных Open Source инструментов для мониторинга, балансировки нагрузки и тому подобного. И перед внедрением платформы стоит оценить, действительно ли эта технология необходима.

Основные преимущества Kubernetes:

  • Программное управление релизами на серверах. В том числе моментальное внедрение и откатывание релиза, a/b тестирование и другие процессы.
  • Автоскейлинг — автоматическое увеличение или уменьшение количества копий приложения или размера кластера (добавление или удаление нод в зависимости от нагрузки).
  • Автоматическая регулировка отказоустойчивости — распределение приложений по серверам с учётом нагрузки и в случае сбоя одного из них.
  • Автоматизация тестирования и выкатки приложений — без участия администраторов.

Есть смысл внедрять Kubernetes, если:

  • ИТ-подразделение постоянно занимается разработкой и поддержкой высоконагруженных приложений, например, интернет-магазина, платёжной системы или мобильного приложения. А также выкатывает новые релизы.
  • Компании нужно постоянно обновлять и дорабатывать приложения.
  • Используется много контейнеров, и их невозможно контролировать вручную.

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

Самостоятельное развёртывание vs KaaS

Самостоятельное развёртывание (self-hosted) Kubernetes на собственных серверах «из коробки» не единственный вариант внедрения технологии. Ту же функциональность можно реализовать в облаке проще, используя готовый сервис: KaaS или Managed Kubernetes.

Если вы используете среду Kubernetes как сервис, провайдер сам обновляет и поддерживает систему. А также занимается вопросами отказоустойчивости кластера. Клиенту для эксплуатации системы потребуется только DevOps-инженер, а не целое подразделение. KaaS хорошо подходит для быстрого первоначального развёртывания кластера. Так, процесс, который в варианте self-hosted занимает от нескольких часов до нескольких дней, в облаке сокращается до десяти минут.

Дополнительные open source решения в облачном сервисе предоставляются по умолчанию или легко подключаются. Пользователю не нужно вручную настраивать систему мониторинга, балансировку нагрузки, сбор и хранение логов, настройки безопасности, авторизацию пользователей и другие параметры. То же касается хранилищ постоянных данных приложений (так называемых постоянных томов, или Persistent Volumes), которые приходится держать вне часто обновляющихся контейнеров. Хранилище также можно приобрести у провайдера и достаточно просто интегрировать со средой Kubernetes через API.

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