Контейниризируй це! Що таке Fuel і для чого він використовує Docker

Поки патентні війни залишаються прихованою загрозою для екосистеми OpenStack, давайте поговоримо про технології, що дозволяє розгортати OpenStack практично в один клік. Назва цього проекту багато разів зустрічалося в постах нашого блогу, але не було жодного тексту, присвяченого саме Fuel. Між тим, саме цей проект суттєво спростив процедуру розгортання OpenStack і зробив менш трудомістким процес подальшого управління хмарою. Безумовно, можна діяти по-старому. Використання Fuel не є обов'язковим для роботи з OpenStack. Однак ми вважаємо, що якщо театр починається з вішалки, то OpenStack починається з Fuel. Принаймні — Mirantis OpenStack (MOS).

Кілька загальних слів про Fuel


Fuel — це інструмент розгортання OpenStack і подальшого управління хмарою. Важко назвати проект, який давав би більше інформаційних приводів. Ось зараз ми розповідаємо вам про те, що Fuel тепер використовує Docker-контейнери, але вже знаємо про запуск поддерджки плагінів. І все-таки спершу поговоримо про контейнерах. Напередодні першого російського Docker-митапа така розмова більш ніж виправданий.

Ті з вас, хто вже спробував OpenStack (адже ми не просто так розповідаємо вам про те, що це таке, але сподіваємося переконати вас витратити час на експерименти з технологією, яка два роки тому привернула нашу увагу і не відпускає його до цих пір), могли переконатися, що установка вручну — справа трудомістка, складна і, головне, що загрожує великою кількістю помилок. Fuel — наша відповідь проблем ручного розгортання. Це інтуїтивно зрозумілий інструмент, оснащений користувальницьким веб-інтерфейсом, який, по суті, є панеллю керування для розгортання хмари в кілька кліків і подальшої роботи з ним. Важливо відзначити, що Fuel спрощує масштабне (на сьогоднішній день протестовано розгортання на оточення з 100 нод) розгортання, тестування і підтримку конфігурацій OpenStack. Будучи одним з проектів екосистеми OpenStack, проект Fuel не пов'язаний з якимось конкретним брендом (навіть з нашим).

Ми ще неодноразово повернемося до цієї розробки. А зараз давайте поговоримо про Docker.

Docker: економія сил і часу


Починаючи з версії MOS 5.0 компанія Mirantis зробила ставку на Docker для того, щоб реалізувати просте і надійне транзакційних оновлення Fuel: піднімаємо нові контейнери, перевіряємо, а якщо щось пішло не так, повертаємо старі.Разом з простотою прийшла і швидкість. Розповімо про те, як це було.

Ретроспектива


MOS 5.0

Зроблені нами зміни дозволили користувачеві розгорнути Fuel менш ніж за 30 секунд без застосування скриптів для повернення оточення в початковий стан. З'явилася можливість вносити зміни, оперативно їх тестувати і, при необхідності, багаторазово «відкочуватися назад.

Оперативність змін стала результатом використання «контейнерів», сфера застосування яких, насправді, дуже широка. Відповідне середовище можна створити на базі лептопа з Mac OS X або Windows (з використанням boot2docker), на серверах QA під Ubuntu в хмарі, а також на віртуальних машинах в реальних дата-центрах на базі Red Hat Enterprise Linux.

Для поновлення програми Fuel в Docker досить просто видалити старі контейнери і запустити нові, заощадивши 1-2 години, які вам потрібні були б для повторного складання Fuel ISO і тестування зроблених змін.

MOS 5.1

У Mirantis OpenStack 5.1 ми зменшили час, необхідний для установки Fuel на майстер-ноду. При виртуализированном розгортання на SSD-диску час завантаження образів скоротилося в два рази — з 18 хвилин до 9 хвилин, контейнерів — з 9 до 8 хвилин. При розгортанні в лабі (на фізичних серверах) час завантаження образів у версії 5.1 зменшилася на 20%.

Була ідея використовувати тимчасове файлове сховище (tmpfs) на майстер-ноде для скорочення часу установки, але ми виявили його ненадійність в середовищах з недостатнім об'ємом оперативної пам'яті, що уповільнювало процес. В той час, як наша основна задача — виграти час.

А ось стабільність Fuel у версії 5.1 підвищити вдалося, завдяки утиліті dockerctl, що відстежує активність налаштувань для Fuel в процесі оновлення Docker, при якому передаються сотні параметрів в 13 контейнерах. Утиліта dockerctl особливо важлива в світлі того, що встановлюється велика кількість відповідностей для додатків, що вимагають 5-6 параметрів з нашого конфігураційного файлу (astute.yaml) для кожного контейнера, щоб розгорнути додаток.

Замість etcd або інших інструментів, що потребують застосування systemd, ми використовували параметри astute.yaml, залишили локальний файл у форматі YAML і виконали запуск Puppet всередині контейнерів для розгортання додатків на майстер-ноде Fuel. Ми обов'язково будемо робити це надалі, але цей спосіб був більш простим і менш руйнівним, ніж використання інших доступних засобів. Як би те ні було, у локального файлу у форматі YAML і Puppet було кілька недоліків, наприклад, вони сприяли встановленню великої кількості зв'язків у Docker, що призвело до великих витрат дискових ресурсів для кожного контейнера за виконаної установки Puppet і залежних модулів. Але навіть при цьому ми використовуємо в роботі одні з самих компактних повнофункціональних образів ОС Docker. Розмір образу Docker на базі Ubuntu величезний, тоді як розмір нашого образу на базі CentOS з встановленим Puppet стиснутий до 39MB.

Status quo:MOS 6.0

Ми усунули помилки у налаштуваннях Fuel і реалізували ротацію логів для вивільнення дискового простору. Крім цього, задаючи системні вимоги для 6.0, ми врахували проблему з утилітою logrotate, яка за замовчуванням зберігає п'ять останніх архівів (для цього потрібно неспівмірний дисковий простір, при тому, що Docker сам потребує дисковому просторі для логів, які можуть заповнити весь вільний простір і обрушити файлову систему). У цієї проблеми відсутнє автоматичне рішення, тому навіть з удосконаленнями зберігання логів, зробленими компанією Mirantis, вам так само потрібно буде відслідковувати ємність диска, оскільки ми не можемо передбачити, який обсяг логів ви будете генерувати. Незважаючи на те, що logrotate оновлює логи щогодини, вона не відстежує вільний дисковий простір, а настройка, яка б дозволила збільшити розмір папки з логами Docker, відсутня. Насправді, налаштування logrotate обмежують розмір одного log-файлу, по досягненні якого він архівується. Тому навіть з збільшеними параметрами слід виділити 30GB виключно для логів (при розгортанні на 20 нод). Але якщо включити режим відладки (Debug), ротація великих файлів буде відбуватися кожні 10 хвилин, а не щогодини.

До інших нововведень для Fuel на базі Docker в Mirantis OpenStack 6.0 відноситься використання CentOS 6.5 в якості операційної системи для майстер-ноди.
Оскільки в CentOS 6.5 немає демона ініціалізації systemd, який би постійно запускав сервіси, компанія Mirantis використовує утиліту управління Supervisor для запуску і відстеження Docker-контейнерів, а також для запуску веб-додатків. „Два в одному“, як люблять говорити рекламщики.

Крім того, ми использум просту схему „try-or-fail“ для вирішення
проблем із зупинкою роботи Docker-контейнерів, у яких немає успадкованих інструментів з відстеження залежностей. В нашому рішенні, якщо Docker-контейнери намагаються запуститися, а потім зупиняються з-за того, що PostgreSQL або RabbitMQ ще не запущений, Supervisor чекає кілька секунд і намагається знову запустити контейнер, запуск якого не вдався, до тих пір, поки всі контейнери не будуть запущені. Даний метод набагато простіше підтримувати, ніж складну послідовність введення в дію контейнерів на основі пріоритетів
залежностей. І, незважаючи на те, що у dockerctl є належна послідовність при запуску всіх контейнерів, ця послідовність застосовується тільки при початковому розгортання.

Ще раз звертаємо увагу на те, що Fuel — це проект усієї екосистеми OpenStack, так що ви можете використовувати цей інструмент для впровадження, тестування та підтримки вашої платформи OpenStack. Хоча, звичайно, ми вважаємо, що простіше всього отримати його як частину дистрибутива Mirantis OpenStack. Все-таки за свій дистрибутив ми відповідаємо і можемо гарантувати, що його використання не завдасть шкоди репутації екосистеми в цілому.

Перший Docker-івент в Москві


Оскільки ми самі переконалися в тому, що Docker — корисний інструмент, хочемо поділитися цим знанням. 26 лютого з 18:00 до 21:00 Mirantis бере участь у першому митапе за Docker в Москві і запрошує бажаючих приєднатися. Участь безкоштовна. Детальніше про захід можна прочитати на сайті російського співтовариства OpenStack, а зареєструватися можна тут. Для бажаючих взяти участь у зустрічі — реєстрація обов'язкова.

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

Далі Метью Мосесон (Matthew Mosesohn) — старший розробник у Mirantis. Метью розповість про розгортання Docker „Off the Grid“. До речі, саме на його пост в нашому корпоративному блозі, присвячений переходу Fuel на Docker, ми спиралися при підготовці цього матеріалу.

Денис Зайцев, керівник групи експлуатації хмарної платформи і CDN в Яндексі, розповість про масштабування Docker Registry; про запуск Docker додатків в OpenStack-хмарі за допомогою MuranoСергій Мелікян, старший розробник у Mirantis.

Завершить митап Андрій Вагін — розробник в команді Linux Kernel компанії Parallels. Його тема: „Libcontainer: об'єднуючи зусилля під одним дахом“. Андрій зробить опис планів та поточного статусу цієї задачі.

У вас напевно залишилися (або з'явилися) питання. Івент — саме правильне місце, для того, щоб їх поставити. Але якщо ви з якихось причин не потрапляєте на зустріч, то пишіть питання в коментах — ми постараємося закликати наших експертів до відповідальності.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.