Будем честны, Docker сегодня — это самая трендовая и хайповая DevOps-тема наших дней. У нее множество фанатов и огромное комьюнити энтузиастов, в том числе и в России, которые всегда готовы делиться опытом друг с другом. Было бы странно, если бы в такой среде не родилась идея проводить митапы, целиком посвященные Docker и сопутствующим ему технологиям. Сказано — сделано! Первый московский Docker-event прошел успешно. Насколько — читай ниже.

 

Docker in brief

Если кратко, то Docker — это опенсорсная платформа для быстрого деплоя, запуска и остановки приложений в переносимых контейнерах. Корнями Docker уходит в недра проекта CRUI, который поставил перед собой задачу создать возможность останавливать и запускать процессы в Linux-системах без потери состояния. Контейнеры Docker изолированы, но используют одну ОС, «наслаивая» приложения на разных уровнях. Docker предоставляет единый CLI и API для того, чтобы управлять контейнерами — разворачивать, запускать, останавливать.

Если ты хотел подробнее узнать о Docker, но по какому-то недоразумению пока еще этого не сделал, то можешь открыть интерактивный туториал или послушать любой выпуск Радио-Т за 2014 год (привет, Umputun :)). А можешь просто дождаться следующего номера Х. У нас уже приготовлено кое-что специально для тебя!

Первый московский Docker Meetup проходил 26 февраля в московском антикафе «Бабочки». В качестве организатора мероприятия выступили ребята из Mirantis и российское сообщество OpenStack. Mirantis — это глобальная ИТ-компания с российскими корнями, один из лидеров международного сообщества OpenStack. Компания является третьим по объему кода контрибутором этой открытой облачной платформы. Ее разработчики, которых насчитывается более 600 человек, трудятся в офисах в Москве и в Саратове. Специалисты Mirantis участвовали в ряде крупных проектов на базе OpenStack в международных компаниях, таких как Ericsson, AT&T, Expedia и PayPal. Еще компания выпускает полностью открытый и бесплатный дистрибутив Mirantis OpenStack и оказывает его техническую поддержку.

Сотрудники Mirantis часто делятся своим опытом на различных эвентах, связанных с OpenStack. На этот раз доклады о Docker читали и другие представители сообщества — в том числе из Яндекса и Parallels. Слушателей было около 80 (зарегистрировалось, правда, вдвое больше), и доклады прошли оживленно, особенно когда дело доходило до вопросов аудитории.

Идея провести митап принадлежит Фабрицио Соппельса (Fabrizio Soppelsa), он работает инженером службы поддержки Fuel (системы развертывания облака OpenStack и последующего управления им) в московском офисе Mirantis (что-то мне подсказывает, что мы еще встретимся с Фабрицио на страницах ][. — Прим. главреда). В зоне его профессиональных интересов, помимо OpenStack, — Linux-контейнеры, масштабирование программных продуктов и возможности интеграции софта в облако. Фабрицио вкратце обрисовал формат мероприятия и на всякий случай познакомил слушателей с Docker — вдруг кто-то пришел просто поинтересоваться?

Фабрицио Соппельса
Фабрицио Соппельса
 

INFO

Fuel — один из элементов экосистемы OpenStack, он позволяет легко разворачивать и администрировать облако, имеет интуитивно понятный веб-интерфейс. Достоверно известно, что он корректно работает в окружении до 100 узлов. Fuel входит в Mirantis OpenStack.


Подробнее о том, какие есть плюсы и минусы у контейнеризации приложений и как разумно подойти к разработке и распределению контейнеров Docker, рассказал Мэтью Мосесон (Matthew Mosesohn) — еще один представитель Mirantis, старший разработчик в команде Fuel. Доклад Мосесона коснулся и проблем развертывания Docker в изолированном дата-центре.

Для облегчения работы с Docker можно воспользоваться каталогом готовых приложений, к примеру Murano. О нем собравшимся рассказал Серж Меликян, старший инженер Mirantis. Murano позволяет разработчикам и администраторам облаков публиковать cloud-ready приложения без лишних усилий — сейчас их счет в репозитории идет на тысячи. Murano предлагает новый уровень абстракции над IaaS и помогает управлять доступом к приложениям, составлять окружения из множества приложений и контролировать их жизненный цикл.

Еще одна актуальная проблема, которая стоит перед админами Docker, — это масштабирование учетной записи Docker registry. Денис Зайцев, руководитель группы эксплуатации облачной платформы и CDN в Яндексе, опираясь на примеры из практики, рассказал о вариантах решения этой задачи.

 

INFO

Вот две важные ссылки из доклада Зайцева: официальные репозитории Docker и GitHub для контрибуторов.

Docker — не первое решение подобного рода. Первопроходцем в 2001 году был Virtuozzo, созданный в стенах Parallels. Неудивительно, что с его упоминания и начал свой доклад Андрей Вагин — разработчик из команды Linux Kernel компании Parallels. Следом он рассказал о договоренности, к которой в прошлом году пришли Docker, Red Hat, Google, Canonical и Parallels. Было решено общими усилиями создавать единую библиотеку для работы с контейнерами — libcontainer. Доклад так и назывался: «Libcontainer: объединяя усилия под одной крышей». Немало внимания Андрей уделил и библиотеке libct (она написана на C, но имеет привязки к Go и Python). Libct предоставляет удобный API для фронтендов, который позволяет им управлять контейнером на протяжении всего его жизненного цикла. Вот две полезные ссылки из его доклада: собственно libcontainer и libct.

Андрей Вагин рассказывает про libcontainer
Андрей Вагин рассказывает про libcontainer

 

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

Если тебя заинтересовали слайды докладов, то можешь посмотреть их на сайте Mirantis.

 

Case study: Fuel как пример использования Docker

Начиная с версии MOS 5.0, Mirantis сделала ставку на Docker для того, чтобы реализовать простое и надежное транзакционное обновление Fuel: поднимаем новые контейнеры, проверяем и, если что-то пошло не так, возвращаем старые. Изменения позволили пользователям повторно разворачивать Fuel менее чем за 30 с без применения скриптов для возврата окружения в исходное состояние. Появилась возможность вносить изменения, оперативно их тестировать и, при необходимости, многократно откатываться назад. Именно оперативность изменений и стала результатом использования контейнеров. Для обновления приложения Fuel в Docker достаточно просто удалить старые контейнеры и запустить новые, сэкономив один-два часа, которые потребовались бы для повторной сборки Fuel ISO и тестирования сделанных изменений.

В MOS 5.1, помимо экономии времени, решалась и задача повышения стабильности работы Fuel. Помогла утилита dockerctl, которая отслеживает изменения настроек для Fuel в процессе обновления Docker, — в это время передаются сотни параметров в 13 контейнерах. Утилита dockerctl особенно важна из-за того, что устанавливается большое количество соответствий для приложений, требующих при развертывании пять-шесть параметров из нашего конфигурационного файла (astute.yaml) для каждого контейнера.

В самой актуальной на сегодняшний день версии продукта — MOS 6.0 — была учтена проблема с утилитой logrotate, которая по умолчанию сохраняет пять последних архивов (для этого требуется несоразмерное дисковое пространство, при том что Docker сам нуждается в дисковом пространстве для логов, которые могут заполнить все свободное место и обрушить файловую систему). У этой проблемы нет автоматического решения, поэтому даже с усовершенствованиями, сделанными Mirantis, все так же нужно отслеживать емкость диска, поскольку разработчики так и не научились пока предсказывать, какой объем логов будет генерировать пользователь. Несмотря на то что logrotate обновляет логи каждый час, утилита не отслеживает количество свободного места на диске, а настройка, которая бы позволила увеличить размер папки с логами Docker, отсутствует. Настройки logrotate ограничивают размер одного log-файла, по достижении которого он архивируется. Поэтому даже с увеличенными параметрами следует выделить 30 Гб исключительно для логов (при развертывании на 20 нод). Но если включить режим отладки, ротация больших файлов будет происходить каждые десять минут, а не каждый час.

К другим нововведениям для Fuel на базе Docker в Mirantis OpenStack 6.0 относится использование CentOS 6.5 в качестве операционной системы для мастер-ноды. Поскольку в CentOS 6.5 нет демона инициализации systemd, который бы постоянно запускал сервисы, Mirantis использует утилиту управления Supervisor для запуска и отслеживания контейнеров Docker, а также для запуска веб-приложений. «Два в одном», как любят говорить рекламщики.

Кроме того, используется простая схема try-or-fail для решения проблем с остановкой работы контейнеров, в которых нет унаследованных инструментов для отслеживания зависимостей. В данном случае, если контейнеры пытаются запуститься, а затем останавливаются из-за того, что PostgreSQL или RabbitMQ еще не запущен, Supervisor ждет несколько секунд и пытается снова запустить проблемный контейнер, и так до тех пор, пока все контейнеры не будут запущены. Такой метод намного проще поддерживать, чем сложную последовательность ввода в действие контейнеров на основе приоритетов.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    5 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии