Поделиться через


Управление микрослужбами и многоконтейнерными приложениями для обеспечения высокого уровня масштабируемости и доступности

Совет

Это содержимое является фрагментом из электронной книги, архитектуры микрослужб .NET для контейнерных приложений .NET, доступных в документации .NET или в виде бесплатного скачиваемого PDF-файла, который можно читать в автономном режиме.

Архитектура микрослужб .NET для контейнерных приложений .NET для эскиза обложки.

Использование оркестраторов для приложений, готовых к развертыванию в рабочей среде, крайне важно, если приложение основано на микрослужбах или просто разнесено по нескольким контейнерам. Как было сказано ранее, в рамках подхода на основе микрослужб каждая микрослужба имеет собственную модель и данные, поэтому она является автономной с точки зрения разработки и развертывания. Но если у вас есть более традиционное бизнес-приложение, состоящее из нескольких служб (например, SOA) и требующее распределенного развертывания, оно также будет включать в себя несколько контейнеров или служб. Такие системы сложны в масштабировании и управлении, поэтому для создания масштабируемого многоконтейнерного приложения, готового к развертыванию в рабочей среде, оркестратор абсолютно необходим.

На рис. 4-23 показано развертывание приложения, состоящего из нескольких микрослужб (контейнеров) в кластере.

Схема, на которой показаны составные приложения Docker в кластере.

Рис. 4-23. Кластер контейнеров

для каждого экземпляра службы используется один контейнер. Контейнеры Docker — это "единицы развертывания", а контейнер — это экземпляр образа Docker. Узел обрабатывает много контейнеров. Такой подход выглядит логичным. Однако как обеспечить балансировку нагрузки, маршрутизацию и оркестрацию для таких составных приложений?

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

Чтобы перейти от управления отдельными контейнерами или простыми составными приложениями к управлению крупными корпоративными приложениями с микрослужбами, следует прибегнуть к платформам оркестрации и кластеризации.

С точки зрения архитектуры и разработки, если вы создаете крупные корпоративные приложения на основе микрослужб, важно знать следующие платформы и продукты, которые поддерживают сложные сценарии:

Кластеры и оркестраторы. Если вам нужно масштабировать приложения на множестве узлов Docker, как в случае с крупным приложением на основе микрослужб, крайне важно иметь возможность управлять всеми этими узлами как единым кластером, абстрагируясь от сложности базовой платформы. Именно такую возможность предоставляют кластеры контейнеров и оркестраторы. Примером оркестратора может служить Kubernetes. Функции Kubernetes доступны в Azure через Службу Azure Kubernetes.

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

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

Программные платформы для кластеризации контейнеров, оркестрации и планирования

Платформа Description
Kubernetes
Изображение логотипа Kubernetes.
Kubernetes — это решение с открытым кодом, которое предоставляет широкий ряд возможностей: от организации инфраструктуры кластера и планирования контейнеров до оркестрации. Оно позволяет автоматизировать развертывание, масштабирование и выполнение операций с контейнерами приложений в кластерах узлов.

Kubernetes предоставляет ориентированную на контейнеры инфраструктуру, которая объединяет контейнеры приложений в логические блоки, чтобы упростить управление и обнаружение.

Решение Kubernetes является зрелым в Linux и менее зрелым в Windows.
Служба Azure Kubernetes (AKS)
Изображение логотипа службы Azure Kubernetes.
AKS — это управляемая служба оркестрации контейнеров Kubernetes в Azure, которая упрощает администрирование, развертывание и эксплуатацию кластера Kubernetes.
Приложения контейнеров Azure
Изображение логотипа службы
Контейнеры приложений Azure — это управляемая бессерверная служба контейнеров, предназначенная для создания и развертывания современных приложений в большом масштабе.

Использование оркестраторов на основе контейнеров в Microsoft Azure

Ряд поставщиков облачных служб, включая Microsoft Azure, Amazon EC2 Container Service и Google Container Engine, предлагают поддержку контейнеров Docker, а также кластеров Docker и оркестрации. Microsoft Azure поддерживает кластер и оркестратор Docker посредством службы Azure Kubernetes (AKS).

Использование службы Azure Kubernetes

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

Служба AKS позволяет упростить создание и настройку кластера виртуальных машин в Azure, предварительно настроенных для выполнения упакованных в контейнеры приложений, а также управление им. Благодаря оптимизированной конфигурации популярных средств планирования и оркестрации с открытым кодом служба AKS дает возможность развертывать приложения на основе контейнеров в Microsoft Azure и управлять ими, используя имеющиеся навыки или прибегая к знаниям большого и продолжающего расширяться сообщества.

Служба Azure Kubernetes оптимизирует настройку популярных средств и технологий кластеризации Docker с открытым кодом для Azure. Вы получаете открытое решение, которое обеспечивает переносимость для ваших контейнеров и конфигурации приложений. Вы выбираете размер, число узлов и средства оркестрации, а служба Azure Kubernetes делает все остальное.

Схема, показывающая структуру кластера Kubernetes.

Рис. 4-24. Упрощенная структура и топология кластера Kubernetes

На рисунке 4-24 показана структура кластера Kubernetes, где главный узел (виртуальная машина) управляет большинством операций по координации кластера, и вы можете развертывать контейнеры на остальных узлах (управляемых как единый пул с точки зрения приложения). Это позволяет расширять среду до тысяч и даже десятков тысяч контейнеров.

Среда разработки для Kubernetes

В среде разработки Docker объявил в июле 2018 года, что Kubernetes также может работать на одном компьютере разработки (Windows 10 или macOS), установив Docker Desktop. Позднее можно развернуть ее в облаке (AKS) для дальнейшего тестирования интеграции, как показано на рис. 4-25.

Схема, показывающая Kubernetes на компьютере разработчика и развернутым в AKS

Рис. 4-25. Выполнение Kubernetes на компьютере разработки и в облаке

Начало работы со службой Azure Kubernetes (AKS)

Чтобы начать использовать AKS, необходимо развернуть кластер AKS с помощью портала Azure или интерфейса командной строки. Подробные сведения о развертывании кластера Kubernetes в Azure см. в статье Краткое руководство. Развертывание кластера Службы Azure Kubernetes (AKS) с помощью портала Azure.

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

Вариант рабочего развертывания по умолчанию для Kubernetes — использование диаграмм Helm, которые представлены в следующем разделе.

Развертывание с помощью чартов Helm в кластерах Kubernetes

При развертывании приложения в кластере Kubernetes можно использовать оригинальное средство CLI kubectl.exe, использующее файлы развертывания на основе собственного формата (YAML-файлы), как уже упоминалось в предыдущем разделе. Однако для более сложных приложений Kubernetes, например при развертывании сложных приложений на основе микрослужб, мы рекомендуем использовать Helm.

Чарты Helm помогают осуществлять определение, управление версиями, установку, предоставление общего доступа, обновление или откат даже самых сложных приложений Kubernetes.

Более того, использование Helm рекомендуется, поскольку другие среды Kubernetes в Azure, такие как Azure Dev Spaces, также основаны на чартах Helm.

Поддержка Helm осуществляется фондом Cloud Native Computing Foundation (CNCF) в сотрудничестве с корпорацией Майкрософт, Google, Bitnami и сообществом Helm.

См. сведения о реализации чартов Helm и Kubernetes в публикации, посвященной использованию чартов Helm для развертывания eShopOnContainers в AKS.

Дополнительные ресурсы