Что такое контейнер

Платформы для хостинга контейнеров

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

Своё железо (bare metal)

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

Облачные решения (SaaS)

Крупные облачные провайдеры предоставляют своим клиентам сервисы для запуска контейнеров — готовые среды, обёрнутые удобным интерфейсом управления. Построенные по такому принципу решения называются Software as a Service (SaaS). Они не требуют никаких капитальных затрат, поскольку вся инфраструктура арендуется, а конфигурация создаётся в минимальном объёме, относящемуся исключительно к запускаемому приложению. Сами же кластеры настраиваются провайдером по указанному пользователем небольшому объему параметров. SaaS-решения — оптимальный вариант для стартап-компаний, небольших и развивающихся проектов. Самым большим минусом этого решения можно назвать повышенную в сравнении с bare metal стоимость при условии многолетнего использования.

Тремя наиболее популярными облачными платформами на сегодня являются Amazon Web Services, Microsoft Azure и Google Cloud. Все три провайдера имеют доступный в виде сервиса Kubernetes, и все три из них предлагают пробный период пользования сервисами, выдавая депозит на сумму 200–300 $. Чтобы оценить удобство и качество облачных решений и сравнить друг с другом их поставщиков, вам даже не придется тратить свои деньги.

Старая добрая виртуальная машина

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

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

Раньше для решения этого конфликта ставилась виртуальная машина с полноценной внутренней ОС, которая подразумевает виртуализацию ядра и железа для запуска своей ОС. Творится вся эта магия с помощью «гипервизора», служащего для создания виртуальных аналогов физических частей машины-носителя.

Что такое контейнерБольшой и страшный гипервизор

Гипервизор может быть реализован как ПО (гипервизор первого типа), так и в виде реального подключаемого к хосту модуля (гипервизор второго типа). Когда требуется развернуть несколько приложений на одном устройстве, запускать виртуальную машину для каждой группы — слишком расточительный подход. Все потому что гипервизор служит для связи между двумя полноценными операционными системами: хостовой и гостевой. У каждой гостевой среды имеются собственное ядро, виртуальная копия всего оборудования хоста и заранее определенный набор ресурсов, не обязательно использующийся в данный момент,но жестко закрепленный за ней.

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

Основные принципы контейнеризации приложений

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

1 контейнер — 1 сервис

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

Неизменность образа

Все изменения внутри контейнера должны вноситься на стадии сборки образа — соблюдение этого принципа страхует вас от утраты данных при уничтожении контейнера. Неизменность контейнера также даёт возможность выполнять параллельные задачи в CI/CD системах — например, можно одновременно запустить разного рода тестирования, ускоряя тем самым процесс разработки продукта.

Утилизируемость контейнеров

Этот принцип являет собой яркий пример современной концепции «Обращайся с инфраструктурой как со скотом, не как с питомцами». Это значит, что любой контейнер может быть в любой момент уничтожен и заменён на другой без остановки обслуживания. Конфигурация контейнера в виде его образа сущностно отделена от непосредственно выполняющего работу экземпляра контейнера, что позволяет «пускать под нож» экземпляры, когда потребуется — при сбое проверки состояния контейнера, масштабировании на понижение и т. д. Соответствие этому принципу означает, что выход контейнеров из строя не должен быть новостью для вашего приложения: ротация контейнеров должна стать одним из требований к разработке.

Отчётность

Контейнер должен иметь точки проверки состояния его готовности (readiness probe) и жизнеспособности (liveness probe), предоставлять логи для отслеживания состояния запущенного в нём приложения.

Управляемость

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

Самодостаточность

Образ с приложением должен обладать всеми необходимыми зависимостями для работы — библиотеками, конфигами и прочим. Сервисы же к этим зависимостям не относятся, иначе это противоречило бы принципу «1 контейнер — 1 сервис». Связность контейнеров, зависящих друг от друга, можно определить с помощью инструментов оркестрирования, о чём будет рассказано ниже.

Лимитирование ресурсов

К лучшим практикам эксплуатации контейнеров относится настройка ресурсных лимитов (CPU и RAM): следование этой практике позволяет сохранять внимательное отношение к экономии ресурсов и вовремя реагировать на их избыточное потребление.

Чем контейнеры отличаются от виртуальных машин

Наиболее частым вопросом при выборе среды запуска приложения является вопрос о различии между контейнерами и виртуальными машинами — двумя самыми популярными опциями на текущий момент. Между ними есть принципиальная разница. Контейнер, в сущности, является ограниченным внутри ОС пространством, использующим для доступа к аппаратным ресурсам ядро host-системы. ВМ представляет собой машину целиком со всеми необходимыми для её работы устройствами. Из этого образуются отличия, имеющие практическое значение:

  • Контейнеры требуют значительно меньше ресурсов для своей работы, что положительно сказывается на производительности и бюджете.
  • Контейнеры можно запускать только в той же операционной системе, что стоит на host-системе — то есть запустить Windows-контейнер на host-системе с Linux не получится (на персональных устройствах это ограничение обходится с помощью технологии виртуализации). Однако это не относится к разным дистрибутивам одной и той же ОС, например Ubuntu и Alpine Linux.
  • Контейнеры предоставляют меньшую степень изоляции, поскольку используют ядро host-системы, что потенциально создаёт бóльшие риски в эксплуатации при небрежном отношении к безопасности.

Универсальный контейнер особого назначения

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

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

Контейнер — платформа со складывающимися торцевыми стенками. Хорошо подходит, если груз не негабаритный и существуют проблемы с его загрузкой. А так же если он уникален по своим характеристикам и его невозможно разместить в стандартный вариант. Такие контейнеры можно использовать при перевозке модульных конструкций, спецтехники, военной техники, крупного производственного оборудования и т.п.

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

Что такое контейнер

Часто используется такое транспортное оборудование для перевозок какао-бобов и зернового кофе. Поэтому их еще называют кофе-контейнеры. С их помощью можно доставлять зерновые культуры и всевозможные пряности.

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

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

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

Специализированный контейнер

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

Что такое контейнер

По конструкции специализированные контейнеры делятся на три типа:

  • Жесткие
  • Мягкие
  • Комбинированные

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

Изотермический контейнер – это контейнер с изолированными стенками, дверями, полом и крышей, которые ограничивают теплообмен между внутренним пространством контейнера и внешней средой. Термоизолированным называется изотермический контейнер, использующийся без холодильных и/ или отопительных установок.

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

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

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

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

В арсенале компании «Prime Logistics» имеются контейнеры ёмкостью 20, 40, 45 футов. Наши опытные специалисты составят для вас оптимальную логистическую схему, помогут в таможенном оформлении и позаботятся о своевременной доставке вашего груза. Prime Logistics приумножит вашу прибыль, благодаря качеству нашего сервиса.

Зачем нужна оркестрация: как работать со множество контейнеров в Big Data системах

Оркестрация контейнеров в Big Data системах нужна для следующих действий :

  • развертывание нескольких контейнеров одновременно в различных средах окружения (на компьютере разработчика, на тестовом и рабочем серверах, в среде аварийного восстановления, в облачном кластере и пр.), что соответствует DevOps-концепции непрерывной разработки, тестирования и поставки программного обеспечения;
  • динамическое распределение контейнеров по узлам кластера (балансировка нагрузки);
  • постоянный мониторинг состояния контейнеризованных приложений и автоматическая отработка их отказов (перезапуск).

Современный рынок свободного и проприетарного ПО предлагает множество систем оркестрации контейнеров. Наиболее популярными и подходящими для надежных и высоконагруженных Big Data систем считаются Kubernetes, Apache Mesos и Red Hat OpenShift. Для не слишком больших проектов подойдут Docker Swarm, Nomad, Fleet, Aurora. Также заслуживают внимания облачные решения Amazon EC2 Container Service и Microsoft Azure Container Service .

Что такое контейнерРабота множества распределенных сервисов Big Data невозможна без системы оркестрации контейнеров

Источники

  1. https://ru.wikipedia.org/wiki/Контейнерная_виртуализация
  2. https://habr.com/ru/company/redhatrussia/blog/416169/
  3. https://habr.com/ru/company/it-grad/blog/279229/
  4. https://www.cloud4y.ru/about/news/obzor-tekhnologii-konteynerizatsii/
  5. https://habr.com/ru/company/it-grad/blog/279229/
  6. https://www.xelent.ru/blog/chto-takoe-orkestratsiya-konteynerov/

Определение слова «Контейнер» по БСЭ:

Контейнер (англ. container, от contain — вмещать)стандартная ёмкость, служащая для бестарной перевозки грузов различными видами транспорта. К. является как бы съёмным органом (кузовом) транспортных средств (автомобилей, вагонов, судов, самолётов и др.), который приспособлен для механизированной погрузки, выгрузки и перегрузки с одного вида транспорта на другой. Размеры и ёмкость К. соответствуют грузоподъёмности и габаритам транспортных средств.Впервые в мире К. были применены в России в 1889. К. получили широкое распространение в СССР и за рубежом, т. к. позволили создать систему перевозки грузов различными видами транспорта (см. Контейнерные перевозки).По назначению К. делятся на универсальные, специализированные и специальные. Универсальные К. могут быть использованы для перевозки любых грузов в различной упаковке. специализированные — для штучных, сыпучих или жидких грузов (например, строительных материалов, химических веществ, пищевых продуктов и др.). специальные — только для определённого груза, транспортируемого в особых условиях (например, в космосе, под водой и т. п.). К. имеют ёмкость (грузоподъёмность) 1,25. 2,5. 5. 10. 20 и 30 т. Широко распространены 5-тонные К., наиболее соответствующие грузоподъёмности основных грузоподъёмных машин и транспортных средств, удобные в эксплуатации и экономичные. Перспективно создание К. со специальными захватами — спредерами. Основные требования, предъявляемые ко всем К., — обеспечение сохранности перевозимых грузов, полное использование грузоподъёмности транспортных средств.Лит.: Контрейлеры и крупнотоннажные контейнеры, М., 1962. Дерибас А. Т., Коган Л. А., Контейнерные перевозки, в кн.: Взаимодействие разных видов транспорта и контейнерные перевозки, М., 1971.

Что такое контейнер

Управление конфигурацией (Configuration/Complexity Management)

Развитие IT-систем ведёт ко всё большему их усложнению, и это порождает проблемы управления — даже на небольшом количестве серверов или контейнеров ручное управление приложением превращает практически любое изменение конфигурации в трудовой подвиг, а на десятках или сотнях делает его абсолютно невозможным. К счастью, новые проблемы ведут и к новым решениям — в этом разделе мы расскажем о некоторых инструментах управления конфигурацией (configuration management) или, как ещё принято говорить, управления сложностью (complexity management). Они используются для установки, управления и обновления приложений Kubernetes: например, с их помощью можно описать приложение, состоящее из фронтенда, бэкенда и всех необходимых для их работы сервисов, таких как объекты Kubernetes, контейнеры с веб-серверами, базами данных, серверами очередей и т. д.

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

Kustomize

Благодаря популярности у пользователей и своей простоте, начиная с версии Kubernetes 1.14, Kustomize является встроенным инструментом управления конфигурацией. Для описания приложений использует чистый язык разметки YAML без возможности шаблонизации и использования параметров, что является одновременно его сильной и слабой сторонами, упрощая процесс настройки и вместе с тем сильно его ограничивая.

Ansible

Многофункциональный инструмент, для которого конфигурация Kubernetes-приложений — лишь одно из великого множества применений, реализованная с помощью специального модуля интеграции. Например, Ansible может быть использован для настройки виртуальных машин, развертывания облачной инфраструктуры, выполнения бэкапов и т.д. Его универсальность позволяет решать разнообразные задачи, связанные с IT-проектами, одним инструментом — но ценой меньшей функциональности в отношении управления конфигурацией приложений Kubernetes. Для описания использует YAML и язык шаблонов Jinja2.

Jsonnet

Также как и Ansible, Jsonnet не является чем-то специфичным для Kubernetes, однако многие знакомы с ним именно благодаря K8s. Jsonnet описывает объекты с помощью расширенного JSON, включающего комментарии, текстовые блоки, параметры, переменные, условные включения и функции. Очень мощный и гибкий инструмент.

Helm

Пакетный менеджер приложений Kubernetes. Этот инструмент описывает приложения в виде декларативных диаграмм (charts), создающихся с помощью языка разметки YAML и шаблонов Golang. Helm обладает широкой базой готовых диаграмм, даёт возможность версионировать конфигурации и переключаться между версиями релизов, т. е. откатывать конфигурацию. Из всех приведенных здесь инструментов является наиболее функциональным в отношении управления приложениями Kubernetes и одновременно обладает наиболее сложным способом описания конфигурации из-за шаблонов Golang, весьма требователен к пользовательским навыкам.

В этой статье перечислены лишь те инструменты, что наиболее заслуживают внимания по нашему мнению. Помимо них существует ещё с добрый десяток решений для задач управления конфигурацией в Kubernetes: такие как Kapitan, Ksonnet, Replicated Ship и т. д. При выборе менеджера управления конфигурацией мы рекомендуем определиться с требованиями, предъявляемыми к нему, и руководствоваться принципом разумной достаточности, не используя без нужды излишне сложный инструмент — хорошим путем будет начать с чего-то простого, дополнительно задействуя более мощный инструмент, когда возникнет необходимость.

Чем полезны контейнеры

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

Техническим же специалистам контейнеры прежде всего полюбились за возможность упаковать приложение вместе с его средой запуска, решая тем самым проблему зависимостей в разных окружениях. Например, различие версий языковых библиотек на ноутбуке разработчика и в последующих окружениях рано или поздно приведёт к сбоям, и нужно будет как минимум потратить время на их анализ, а как максимум — решать проблему проникших в продакшен багов. Использование контейнеров устраняет проблему «А на моей машине все работало! ¯\_(ツ)_/¯».

Также контейнеры позволяют сократить время разработки приложения и упрощают управление им в продакшене благодаря лёгкости в настройке и изменении конфигурации, возможности версионировать её вместе с кодом приложения и удобным инструментам оркестрирования, позволяющим быстро масштабировать инфраструктуру. Кроме того, фактическое отсутствие привязки контейнеров к хостинговой платформе даёт огромную гибкость при выборе или смене провайдера — вы можете запускать их без принципиальных отличий в конечном результате на личном компьютере, bare metal серверах и в облачных сервисах.

Типы контейнеров

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

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

  • универсальные контейнеры общего назначения
  • универсальные контейнеры особого назначения
  • специализированные контейнеры.

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

Заключение

Ещё недавно не смолкали дебаты на тему оправданности использования контейнеров в продакшене, то и дело были слышны обвинения в их ненадежности. Однако время не стоит на месте, индустрия оценила их перспективность, сделала свой выбор, и инвестиции в контейнерные решения потекли широкой рекой, с каждым днем делая решения на их базе всё удобнее и привлекательнее. На сегодняшний день примитивную настройку кластера и деплой приложений в него можно выполнить используя один лишь веб-интерфейс, предварительно прочитав несколько страниц документации — настолько это стало просто. А их низкая по сравнению с виртуальными машинами стоимость откусывает у ВМ всё большую долю рынка, забирая то, что не требует для своей работы специфики устройства ВМ. Безусловно, контейнеры зарекомендовали себя как жизне- и конкурентоспособное решение, сокращающее время вывода продукта на рынок, стоимость его разработки и эксплуатации.