Автоматическое масштабирование в контейнерах Docker

Я уже некоторое время изучаю контейнеризацию Docker, но кое-что меня все еще смущает. Я понимаю, что все контейнеры сгруппированы в кластер, и инструменты управления кластером, такие как Docker Swarm, DC / OS, Kubernetes или Rancher, могут использоваться для управления контейнерами докеров. Я тестировал управление кластером контейнеров с помощью DC / OS и Kubernetes, но все же несколько вопросов остались для меня без ответа.

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

Предположим, мы развернули веб-приложение, используя контейнеры, и они автоматически масштабируются. Как идет трафик к контейнерам? Как управляются сеансы?

Какие метрики рассчитываются для контейнеров с автомасштабированием?


person Ali    schedule 28.10.2016    source источник


Ответы (2)


Автоматическое масштабирование в DC / OS (примечание: Mesosphere - это компания, DC / OS - проект с открытым исходным кодом). Автомасштабирование подробно описано в docs. По сути, так же, как и в Kubernetes, вы можете использовать либо низкоуровневые метрики, такие как загрузка ЦП, чтобы решить, когда увеличивать количество экземпляров приложения, либо вещи более высокого уровня, такие как пропускная способность приложения, например, используя Микромасштабирование.

Что касается вашего вопроса о том, как работает маршрутизация (как запросы перенаправляются на экземпляр, то есть на один запущенный контейнер): вам нужен балансировщик нагрузки, и, опять же, DC / OS предоставляет вам это из коробки. И снова параметры подробно описаны в документации По сути: балансировщики нагрузки Север-Юг на основе HAProxy или IPtables, Восток-Запад (внутренние кластеры).

person Michael Hausenblas    schedule 28.10.2016
comment
В случае DC / OS наиболее распространенным входящим LB является Marathon-LB, в котором есть пример автомасштабирования: github.com/mesosphere/marathon-lb и github.com/mesosphere/marathon- lb-autoscale - person KarlKFI; 28.10.2016

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

AFAIK, сеансы управляются вне кубернетов, но привязку сеанса на основе клиентского IP можно выбрать, установив для service.spec.sessionAffinity значение «ClientIP». Вы можете узнать больше о привязке служб и сеансов здесь

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

person Hrishikesh Kumar    schedule 28.10.2016
comment
Полезная информация из предоставленных блогов. У меня есть полное представление о том, как настроить кластер Kubernetes и все такое ... мой вопрос в том, как несколько контейнеров обслуживают запрос, исходящий от нескольких пользователей, используя одну службу? как он балансирует нагрузку и как сервис распознает, какой сеанс привязан к какому контейнеру? как его использовать в реальных производственных приложениях. - person Ali; 28.10.2016
comment
В том же разделе есть изображения - kubernetes.io / docs / user-guide / services / - вы видели, что служба может вести себя как балансировщик нагрузки. - person Hrishikesh Kumar; 28.10.2016
comment
Да, это частично объясняет ... но как обслуживаются эти службы? Конфигурации маршрутов и все такое ... есть идеи относительно Мезосферы? - person Ali; 28.10.2016
comment
это не простой вопрос. Что касается типичных сервисов, текущая реализация основана на iptables. Обычно существует случайное сопоставление вероятностей, но если вы добавите sessionAffinity:ClientIP, будут добавлены новые правила с использованием модуля recent для поддержания того же внутреннего сопоставления. Для приема трафика вы можете использовать Ingress и IngressController, например contrib-nginx-ingress, который не проходит через iptables, но добавляет конечные точки непосредственно в список серверных приложений, поэтому обрабатывает такие вещи, как привязка сеанса, по-своему. - person Radek 'Goblin' Pieczonka; 28.10.2016