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

Аватарка пользователя Анастасия Жигач

Рассказываем, кому подходит среда Kubernetes, кому лучше использовать другие инструменты и в чём особенность Kubernetes-as-a-Service.

Систему оркестрации 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 не стоит полагаться только на провайдера. Например, чтобы сделать бизнес-критичные приложения максимально доступными, важно помнить о балансировке нагрузки на кластер и возможности его репликации.

Микросервисы
Гостевая публикация
Kubernetes
1820