То, как мы пишем, отправляем и поддерживаем программное обеспечение сегодня, за последние несколько лет кардинально развивалось. То, как мы потребляем основную инфраструктуру для запуска нашего программного обеспечения, значительно созрело, поскольку мы видели переход от голого металла к виртуальным машинам к контейнерам к микро-VMS.
Рост внедрения микросервисов, безусловно, проложил путь для контейнеров, чтобы стать основным подходом для организаций к упаковке и отправлению своих заявлений. Среди этой эволюции мы видели, как Docker стал почти синонимом контейнеров и Kubernetes Появляется как золотой стандарт оркестрации этих контейнеров. Некоторые из основных преимуществ этого перехода включают изоляцию неисправности, использование ресурсов и масштабирование рабочих нагрузок, которые оказывают прямое влияние на бизнес.
В этом посте мы перейдем к тому, что и почему Контейнер -оркестровка Анкет Мы также посмотрим на некоторые из ведущих инструментов и скомплектованы их друг с другом с целью помочь вам выбрать правильный инструмент для работы.
Мы рассмотрим следующие темы:
- Что снова такое контейнеры? Зачем они нам вообще нужны?
- Что такое оркестровая контейнера?
- Популярные инструменты оркестровки контейнеров
- Kubernetes — золотой стандарт
- Docker Swarm
- Собственные предложения провайдеров общественного облака
- Какой из них мне подходит?
В тот же день мы запускали заявки на Bare-Metal, который является еще одним способом сказать физические локальные серверы. Это было интенсивное, дорогое и подверженное ошибкам усилия, которое было чрезвычайно медленным в масштабе. В пришли виртуальные машины для решения этих болевых точек — слой абстракции поверх физических серверов, позволяющий нам запускать несколько операционных систем в полной изоляции на одних и тех же физических серверах, обеспечивая лучшую безопасность, использование ресурсов, масштабируемость и значительное снижение затрат Анкет
Замечательно! Но если мы уже рассмотрели вышеупомянутые болевые точки с виртуальными машинами, то почему мы даже говорим о контейнерах? Ну, контейнеры поднимают это на ступеньку. Вы можете думать о них как о мини-виртуальных машинах, которые вместо упаковки полноценной операционной системы пытаются использовать базовую ОС хоста для большинства операций. Контейнерная виртуализация гарантирует более высокую плотность приложений и максимальное использование ресурсов сервера.
Важным различием между виртуальными машинами и контейнерами является то, что виртуальная машина виртуализирует основное оборудование, тогда как контейнер виртуализирует основную операционную систему. Оба имеют свои варианты использования. Интересно, что многие развертывания контейнеров используют виртуальную машину в качестве операционной системы хоста, а не работают непосредственно на обнаженном металле.
Независимо от того, создаете ли вы монолит или архитектуру на основе микросервисов, если для вас важны устойчивость и возможность быстрого масштабирования, для большинства типов рабочих нагрузок контейнеризация-ваш лучший выбор, когда речь идет о упаковке вашего приложения.
Хотя контейнеры сами по себе чрезвычайно полезны, они могут стать довольно сложными для развертывания, управления и масштабирования на нескольких хостах в разных средах. Контейнерная оркестровая — это еще одно причудливое слово для оптимизации этого процесса. Давайте распаковываем это немного дальше.
По своей сути, контейнерные оркестровки — это управление жизненным циклом контейнеров. Независимо от того, используете ли вы монолит или кучу микросервисов, инструменты оркестровки контейнеров могут помочь вам упростить управление жизненным циклом контейнера в обоих сценариях. Тем не менее, его реальная полезность действительно просвечивает в масштабе в сложных динамических средах. Инструменты в этом пространстве помогают командам контролировать и автоматизировать многие задачи, включая:
- Восстановление после столкновения с неудачами, гарантируя, что ваши приложения будут самовосстанавливающимися, устойчивыми и устойчивыми.
- Предоставление и планирование контейнеров путем выделения необходимых ресурсов на основе предопределенных конфигураций.
- Услуги масштабирования путем добавления или удаления контейнеров, обычно на основе некоторых метрик.
- Мониторинг здоровья контейнеров и хозяев.
- Разоблачение услуг внешнему миру.
- Благотворительный трафик нагрузки между несколькими контейнерами плавно.
Большинство инструментов оркестровки контейнеров следуют аналогичным механизмам с точки зрения потребителей. Они позволяют настроить ваше приложение с помощью файлов конфигурации (обычно YAML или JSON), которые сообщают инструменту оркестровки, такие как — где получить изображения контейнеров, как заниматься сетью, как обрабатывать объемы хранения и где нажимать журналы. В большинстве случаев команды программного обеспечения предпочитают контролировать эти файлы конфигурации на основе их среды (разработка, постановка или производство), чтобы сделать верительные и воспроизводимые.
Эти файлы конфигурации передаются на инструмент с использованием интерфейса (обычно CLI). Затем инструмент планирует развертывание и выбирает лучший хост для размещения контейнеров на основе ограничений, определенных в конфигурации. После того, как контейнеры запущены и работают, инструмент непрерывно контролирует приложение, сопоставляя желаемое состояние с фактическим состоянием, в дополнение к запросу проверки здоровья. Если что -то не складывается и/или не приводит к сбою, он пытается автоматически восстановиться после этого сбоя. Возможность запуска этих инструментов оркестровки в разрозненных средах, от рабочего стола до голого металлических серверов до облачных виртуальных машин, является большой точкой продажи.
Когда Docker появился в 2013 году, контейнеры взорвались в популярности. С тех пор был разработан ряд инструментов, чтобы упростить управление контейнерами. Несмотря на то, что они были в течение многих лет, многие считают, что 2017 год станет годом, когда инструменты контейнера достигли совершеннолетия. На сегодняшний день существует несколько открытых и запатентованных решений для управления контейнерами.
В пространстве с открытым исходным кодом, Kubernetes, Docker Swarm, Apache Marathon на Mesos и Hashicorp Nomad являются одними из известных игроков. Хотя в проприетарном пространстве преобладают ведущие облачные провайдеры, некоторые из заметных примеров включают сервис эластичных контейнеров Amazon Web Services (AWS), Google Cloud Platform (GCP) Вычислите Engine & Cloud Run, Microsoft Azure Containces Containces & Web Apps для контейнеров.
Давайте увеличим масштаб на некоторые из самых популярных, сложите их друг с другом и постараемся лучше понять, как они отличаются друг от друга.
Kubernetes — золотой стандарт
Подобно тому, как Docker стал де-факто для контейнеризации, отрасль обнаружила, что Kubernetes управляет ландшафтом оркестровки контейнера. Вот почему большинство крупных облачных провайдеров также начали предлагать управляемые услуги Kubernetes.
Это программное обеспечение с открытым исходным кодом, которое стало золотым стандартом для оркестрирования контейнерных рабочих нагрузок в частных, общественных и гибридных облачных средах. Первоначально разработанный инженерами в Google, которые перегоняют многолетний опыт работы в рабочих нагрузках в масштабе в Kubernetes. Он был открыт в 2014 году и с тех пор поддерживается CNCF (Cloud Native Computing Foundation). Он часто сокращается как K8s, который является нумероним (начиная с буквы «k» и заканчивается «S» с 8 другими персонажами между ними).
Управление контейнерами в масштабе обычно довольно сложно. Почему это? Поскольку запуск одного контейнера Docker на вашем ноутбуке может показаться тривиальным, но делать это для большого количества контейнеров на нескольких хостах автоматизированной модой, обеспечивая не простое время нуля, не так тривиально.
Давайте возьмем пример платформы, похожей на Netflix, состоящей из 100+ микросервисов, в результате чего 5000+ контейнеров, работающих на 100+ VMS различных размеров. Различные команды отвечают за различные микросервисы. Они следуют непрерывной интеграции и непрерывной доставке (CI/CD), управляемого рабочим процессом и подталкивают к производству несколько раз в день. Ожидания от производственных рабочих нагрузок всегда должны быть доступны, автоматически масштабируются вверх и вниз, если спрос изменяется и восстанавливается после сбоев.
В подобных ситуациях утилита инструментов оркестровки контейнеров действительно сияет. Такие инструменты, как Kubernetes, позволяют вам абстрагировать основной кластер виртуальных или физических машин в одну единую каплей ресурсов. Как правило, они выставляют API, используя, который вы можете указать, сколько контейнеров вы хотели бы развернуть для данного приложения и как они должны вести себя под увеличенной нагрузкой. Первый характер этих инструментов позволяет автоматизировать процессы развертывания внутри вашего конвейера CI, давая командам возможность быстро итерации. Возможность управлять такого рода сложности оптимизированной манерой является одной из основных причин, по которым такие инструменты, как Kubernetes, приобрели такую популярность.
Базовая архитектура и объекты
Чтобы понять взгляд Kubernetes на мир, нам нужно сначала ознакомиться с кластерной архитектурой. Kubernetes Cluster — это группа физических или виртуальных машин, которые разделены на два компонента высокого уровня — плоскость управления и рабочие узлы.
Плоскость управления — Он действует как мозг для всего кластера, ответственный за принятие инструкции пользователей, проверку здоровья всех серверов, решающее, как лучше всего планировать рабочие нагрузки, и организовать связь между компонентами. Избиратели включают такие компоненты, как Kube-Apiserver , ETCD , Kube-Scheduler , Kube-Controller-Manager и Cloud-Controller-Manager Анкет
Рабочие узлы — Это машины, ответственные за принятие инструкций из плоскости управления и запуска рабочих нагрузок в контейнер. Каждая машина запускает кубелет, кубе-прокси и время выполнения контейнера.
Теперь, когда у нас есть некоторые ноу-хау об архитектуре Kubernetes, следующей вехой в нашем путешествии является понимание объектной модели Kubernetes. У Kubernetes есть несколько абстракций, которые составляют строительные блоки любой рабочей нагрузки в контейнер.
Мы рассмотрим несколько различных типов объектов, доступных в Kubernetes, с которыми вы с большей вероятностью будете взаимодействовать:
- POD — Это самая маленькая развертываемая единица вычислений в иерархии Kubernetes. Он может содержать одну или несколько тесно связанных контейнеров, общих средств, объемов и IP -пространства. Как правило, пользователи не рекомендуется напрямую управлять стручками. Вместо этого Kubernetes предлагает объекты более высокого уровня (развертывание, Statefulset & Daemonset), чтобы инкапсулировать это управление.
- Развертывание — Объект высокого уровня, предназначенный для облегчения управления жизненным циклом реплицированных стручков. Пользователи описывают желаемое состояние в объекте развертывания, и контроллер развертывания изменяет фактическое состояние, чтобы соответствовать желаемому состоянию. Как правило, это объект, с которым пользователи взаимодействуют больше всего. Это лучше всего подходит для приложений без сохранения состояния.
- Stateful Set — Вы можете думать об этом как о специализированном развертывании, лучше всего подходящем для приложений, таких как реляционная база данных. Они предлагают заказы и уникальность гарантии.
- Демон набор — Вы можете думать об этом как о специализированном развертывании, когда хотите, чтобы ваши стручки находились на каждом узле (или его подмножестве). Лучше всего подходит для сервисов поддержки кластеров, таких как агрегация журналов, безопасность и т. Д.
- Secret и Configmap — Эти объекты позволяют пользователям хранить конфиденциальную информацию и конфигурацию соответственно. Затем они могут подвергаться воздействию определенных приложений, что позволяет обеспечить более оптимизированную конфигурацию и управление секретами.
- Сервис — Этот объект объединяет набор стручков вместе и делает их доступными через DNS в кластере. Различные типы услуг включают Nodeport , Кластерип , а также LoadBalancer Анкет
- Вход — Объект Ingress позволяет предоставлять внешний доступ к службе в кластере, используя IP -адрес или какой -то URL. Кроме того, он может также обеспечить завершение SSL и балансировку нагрузки
- Пространство имен — Этот объект используется для логической группировки ресурсов внутри кластера
Примечание. Существуют другие объекты, такие как контроллер репликации, набор реплик, задание, задание Cron и т. Д., Которые мы намеренно пропустили ради простоты.
Вы можете найти наше специальное сообщение в блоге о Kubernetes, которая попадает в примеры, функции, экосистему и обычно задаваемые вопросы здесь.
Docker Swarm — легкая альтернатива
Давайте различать Docker и Docker Swarm первый. Docker — это время выполнения контейнера, сравнимое с RKT. Docker Swarm, с другой стороны, представляет собой инструмент управления кластером и оркестровки, встроенный в двигатель Docker, сравнимый с Kubernetes и лайками. По сравнению с Kubernetes, это немного менее расширяемый и сложный инструмент, который лучше всего подходит для людей, которые хотят более легкий путь для развертывания контейнеров. На более высоком уровне вы заметите много сходств, когда речь заходит о архитектуре обоих инструментов.
Здесь важная вещь, которую нужно отметить, это то, что после Mirantis Приобретен Docker Enterprise, в конце 2019 года, Они объявили что основным оркестратором будет Kubernetes. Они будут поддерживать рой не менее двух лет и будут работать над облегчением перехода в Kubernetes.
Значит ли это, что Docker Swarm мертв, и мы даже не должны говорить об этом? Не совсем! На данный момент, все это означает, что мы не увидим много вариантов Docker Swarm-as-a-Service. Однако для более простых случаев использования это все еще является жизнеспособным вариантом из -за его легкой и простой природы.
Основная архитектура
Чтобы понять взгляд Docker Swarm на мир, нам нужно сначала ознакомиться с кластерной архитектурой. Сам по себе рой-это группа физических или виртуальных машин, которые разделены на два компонента высокого уровня, узлы менеджера и рабочие узлы.
- Узел менеджера — Подобно плоскости управления Kubernetes, он отвечает за получение определения службы от пользователя и инструкции по отправке работников узлов о том, как запустить эту службу. Кроме того, он также выполняет функции оркестровки и управления, необходимые для синхронизации фактического состояния с желаемым состоянием кластера. Узлы менеджера выбирают единого лидера для выполнения задач оркестровки.
- Узел рабочих — Подобно узлам работников Kubernetes, он получает и выполняет задачи, отправленные из узлов менеджера. Агент работает на каждом рабочем узле и отчитывается обратно в узел менеджера по назначенным задачам, чтобы менеджер мог сохранить желаемое состояние каждого работника.
Теперь, когда у нас есть какое-то представление о ее архитектуре, давайте перейдем к конструкциям на уровне объекта Docker Swarm.
- Задача — Задача несет контейнер Docker, и команды для запуска внутри контейнера, это атомная единица планирования в рамках роя. Когда мы объявляем желаемое состояние службы, оркестратор осознает желаемое состояние путем планирования задач. Если задача не выполняется, оркестратор удаляет задачу и контейнер, а затем создает новую задачу, чтобы заменить ее в соответствии с желаемым состоянием, указанным Сервисом.
- Сервис — Сервис — это определение задач, которые должны выполняться на узлах. При создании службы пользователь определяет, какое изображение пользователю и какие команды выполняют внутри работающих контейнеров. Существует два типа услуг — реплицированные и глобальные. Подобно развертываниям Kubernetes, в модели реплицированных услуг менеджер раскрывает указанное количество задач реплик между узлами. Подобно набору Daemon Kubernetes, для глобальных сервисов Swarm выполняет одну задачу для Сервиса на каждом доступном узле.
- Балансировщик нагрузки — Swarm Manager использует балансировку нагрузки нагрузки, чтобы выявить услуги внешнему миру. Внешние компоненты, такие как балансировщики облачной нагрузки, могут получить доступ к данной службе в своем порту, в то время как Swarm использует внутреннюю балансировку нагрузки для распространения запросов между услугами в кластере.
Собственные предложения провайдеров общественного облака — давайте обрабатываем накладные расходы управления
Как и в пространстве с открытым исходным кодом, инструменты облачных оркестровки имеют довольно конкурентоспособное пространство приличия, в основном в общественных поставщиках облаков, такие как Amazon Web Services (AWS), Google Cloud Platform (GCP) и Microsoft Azure Анкет
Эти облачные провайдеры также предлагают управляемую версию Kubernetes. Это означает, что поставщик отвечает за управление и поддержание плоскости управления кластером. Это уменьшает накладные расходы на техническое обслуживание и управление. Для целей этого раздела мы проигнорируем это и сосредоточимся только на проприетарных предложениях.
- AWS Elastic Contaster Service — AWS ECS является полностью управляемой службой оркестровки контейнеров от AWS, которая имеет глубокую интеграцию с другими услугами AWS, такими как Маршрут 53 , Секретный менеджер , Iam , CloudWatch , так далее. Он предлагает два способа запуска рабочей нагрузки — один на Виртуальные машины EC2 И второй, более поздний, это Fargate Что привносит без серверов возможности ECS. Несмотря на то, что это домашний взгляд AWS о том, как управлять контейнерами в масштабе, он имеет много сходства с Kubernetes и Docker Swarm. Это можно увидеть в том, как пользователям необходимо определить конфигурацию своих приложений как определения задач, а затем предоставить эти определения в качестве документов JSON для консоли AWS или интерфейса CLI. В зависимости от конфигурации и какого режима вы выбрали (EC2 или FARGATE), ECS планирует задачи соответствующим образом сочиняющие услуги в кластер и постоянно контролирует их, чтобы поддерживать желаемое состояние.
- GCP Cloud Run — Cloud Run — это полностью управляемая платформа для контейнеров без сервера. Он отказывается от всего управления инфраструктурой, внедряя модель без серверов для контейнеров. Это означает, что ваше приложение может сократиться до нуля, и вы ничего не платите, когда нет трафика, а с другой стороны, оно может масштабироваться до миллионов запросов почти мгновенно. По сути, это очень близко к предложению AWS Fargate. Как потребитель Cloud Run, все, что вам нужно сделать, это предоставить платформу для ваших контейнеров Docker, и она позаботится об остальных. Это довольно удобно, так как вся сложность была автоматизирована или абстрагирована. Под капюшоном он управляет Knative , которая представляет собой платформу на основе Kubernetes для развертывания и управления современными рабочими нагрузками без серверов. Это показывает настоящую сверхдержаву Kubernetes — его расширяемость, таким образом, когда при полном использовании, может действовать как строительный блок более удобных для разработчиков платформ.
- Azure Container экземпляр — Экземпляры контейнера Является ли ответ Microsoft Azure на запуск контейнеров по требованию без сервера. Это сравнимо с AWS Fargate и GCP Cloud Run. Поскольку эта без серверная модель позволяет вам не беспокоиться о базовой инфраструктуре и просто сосредоточиться на логике приложений, многие накладные расходы управления сокращаются. С точки зрения потребителя, все, что вам нужно, — это контейнер Docker и укажите необходимую конфигурацию, а платформа обрабатывает остальное для вас, включая такие вещи, как ресурсы предоставления, масштабирование контейнеров вверх и вниз, необходимая сеть и мониторинг здоровья, чтобы назвать несколько Анкет
Там нет единого размера, когда дело доходит до инструментов оркестровки контейнеров. Выбор правильного инструмента для работы очень зависит от использования.
- Оплата за использование, минимальные накладные расходы на управление — Если вы хотите запустить свои контейнерные приложения с простыми потребностями и не хотите иметь дело с какими -либо накладными расходом управления, возможно, ваш лучший выбор — использовать одно из предложений для контейнеров без серверов, таких как AWS Fargate, Google Cloud Run или Azure Containces.
- Мелкозернистый контроль, гибкость с небольшим управлением — Если ваши потребности требуют мелкозернистого контроля, настройки и гибкости, возможно, управляемой версии Kubernetes в форме AWS EKS , GCP GKE , или Azure AKS лучше подходят для вашего варианта использования, так как они уменьшают накладные расходы по обеспечению и запуска кластера Kubernetes, обеспечивая плавную межкопленную интеграцию.
- Мелкозернистый контроль, гибкость в данных ограничениях — Если ваш вариант использования имеет строгие данные для жительства данных и ограничения суверенитета, и вы должны запускать рабочие нагрузки в контейнер в локальной или частной облачной обстановке, возможно, самоуправляемые Kubernetes является предшественником среди всех инструментов оркестровки контейнерных контейнеров.
Оригинал: «https://dev.to/sarmadsaleem/container-orchestration-tools-explained-1c4i»