Облачные приложения и Kubernetes: кластеры

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

Читайте также:

Контейнерные системы оркестровки были разработаны для уменьшения расходов за счет абстрагирования базовой инфраструктуры, автоматизации развертывания и масштабирования

приложений. Такие системы, как Kubernetes, Marathon, Apache Mesos и Swarm, упрощают задачу развертывания и управления кластерами рабочих контейнеров благодаря реализации основных функций (или некоторых из них):

  • Планирование контейнеров
  • Балансировка нагрузки
  • Обнаружение сервисов
  • Кластерная сеть
  • Проверка состояния и управление им
  • Автомасштабирование
  • Автоматические развертывания
  • Декларативная конфигурация

Планирование контейнеров

При развертывании контейнера или наборов идентичных контейнеров планировщик управляет выделением требуемых ресурсов (ЦП и памяти) и присваивает контейнеры нодам – членам кластера с доступными ресурсами. Кроме того, планировщик может реализовать более продвинутую функциональность, такую как приоритетность контейнеров, а также сбалансировать наборы идентичных контейнеров по разным элементам и регионам для обеспечения высокой доступности.

Балансировки нагрузки

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

Обнаружение сервисов

Для запуска контейнеров и приложений необходимо найти другие приложения, развернутые в кластере. Обнаружение сервисов в организованной форме помогает приложениям и внешним клиентам найти друг друга, используя DNS или другие механизмы, например, переменные локальной среды.

Кластерная сеть

Кластеры также должны связывать запущенные на разных машинах приложения и контейнеры друг с другом, управлять IP-адресами, присваивать сетевые адреса членам кластера и контейнерам. Сетевые реализации варьируются в зависимости от проекта для управления кластерами. Некоторые  инструменты, такие как Docker Swarm, внедряют набор сетевых функций непосредственно в кластер, а другие, такие как Kubernetes, предъявляют минимальный набор требований для любой сетевой реализации, позволяя администраторам развернуть свое собственное сетевое решение.

Проверка и управление состоянием

Одна из основных функций, реализованных приложениями Cloud Native, — это отчеты о работоспособности (обычно через конечную точку REST). Это позволяет инструментам оркестровки точно понимать состояние запущенных приложений и направлять трафик только на работоспособные ноды. Кроме того, эта конечная точка позволяет постоянно проверять запущенные приложения и контейнеры (их состояние и самовосстановление), перезапуская те, которые не отвечают.

Автомасштабирование

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

Автоматические развертывания

Контейнерные системы оркестровки также реализуют функциональность для развертывания без простоев. Системы могут самостоятельно развернуть более новую версию контейнера приложения, предварительно отследив его работоспособность с помощью функций проверки, описанных выше, а также остановить старую версию. Они также могут выполнять blue-green развертывания (когда две версии приложения работают одновременно, и трафик передается новой версии после стабилизации). Такой механизм позволяет выполнять быстрые и безболезненные откаты версий, а также приостанавливать и возобновлять развертывание по мере его выполнения.

Декларативная конфигурация

Еще одна ключевая особенность некоторых систем управления контейнером – это развертывание через декларативные файлы конфигурации. Пользователь «объявляет» желаемое состояние, необходимое для данного приложения (например, четыре запущенных контейнера веб-сервера NGINX), а система заботится о достижении этого состояния путем запуска контейнеров на соответствующих элементах или уничтожения запущенных контейнеров. Декларативная модель позволяет проверять, тестировать и контролировать версии развертывания и изменений инфраструктуры. Кроме того, откат версии приложения сводится к простому развертыванию предыдущего файла конфигурации. Напротив, императивная конфигурация для достижения желаемого состояния кластера требует от разработчиков явного определения и ручного выполнения ряда действий, в ходе чего случаются ошибки, затрудняющие откат.

Системы оркестровки контейнеров

В зависимости от проекта оркестровки контейнеров некоторые из этих функций могут быть реализованы более или мене зрело и подробно. Однако любая система оркестровки контейнеров, будь то Apache Mesos или Marathon, Docker Swarm или Kubernetes, значительно облегчает запуск масштабируемых и отказоустойчивых микросервисов на облачных платформах, абстрагируя базовую инфраструктуру и упрощая работу.

Развертывание кластерного программного обеспечения для управления приложениями часто откладывается из-за стоимости предоставления, настройки и обслуживания кластера. Управляемые контейнерные сервисы могут минимизировать эту стоимость, упрощая общие задачи администрирования кластера (масштабирование и обновление кластера).

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

Tags: ,