, Контейнеризация при помощи LXC

Контейнеризация при помощи LXC

Константин Иванов

 

Первая публикация на английском языке: Февраль 2017

Ссылка на продукт: 1220217

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

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

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

Опубликовано Packt Publishing Ltd.

Livery Place

35 Livery Street

Birmingham B3 2PB, UK

ISBN-13 978-1-78588-894-6

www.packtpub.com

2017-06-03

 Состав исполнителей

Авторы
Константин Иванов
Рецензент
Джей Пейн
Редактор выпуска
Картикей Пандей
Редактор
Манси Сангхави
Редактор разработки содержания
Радхика Атиткар
Технические редакторы
Девеш Чагх
Бхагьяшри Рей
Литературный редактор
Том Джейкоб
Координатор проекта
Кинджал Бейри
Корректор
Safis editing
Составитель указателя
Мариаммал Четьяр
Графика
Кирк Д'Пенья
Координатор производства
Апрна Бхагат

 Об авторе

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

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

Константин получил две степени магистра в Вычислительной технике в университетах в Болгарии и США со специализацией в системной и сетевой безопасности и разработке программного обеспечения.

В свободное время ему нравится писать технические блоги и проводить время с двумя пацанами. Его можно найти в https://www.linkedin.com/in/konstantinivanov или в его блога по адресу http://www.linux-admins.net/.

 Рецензент

Джей Пейн был администратором баз данных в Rackspace на протяжении более 10 лет, работая над их проектированием, разработкой, реализацией, а также эксплуатируя системы хранения.

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

 www.PacktPub.com

 Содержание

Предисловие
Что охватывает эта книга
Что вам нужно для этой книги
Для кого эта книга
Соглашения
Обратная связь с читателями
Поддержка пользователей
Загрузка кодов примеров
Опечатки
Незаконное тиражирование
Вопросы
Глава 1. Введение в контейнеры Linux
Ядро ОС и его ранние ограничения
Вариант для контейнеров Linux
Пространства имён Linux - главная основа LXC
Пространства имён Mount
Пространства имён UTS
Пространства имён IPC
Пространства имён PID
Пространства имён User
Пространства имён Network
Управление ресурсами при помощи cgroups
Ограничение пропускной способности ввода/ вывода
Ограничение использования памяти
Подсистемы cpu и cpuset
Подсистема cgroup freezer
Использование инструментов userspace для управления cgroups и сохраняемыми изменениями
Управление ресурсами при помощи systemd
Выводы
Глава 2. Установка и исполнение LXC в системах Linux
Установка LXC
Установка LXC в Ubuntu при помощи apt
Установка LXC в Ubuntu из исходного кода
Установка LXC в CentOS при помощи yum
Установка LXC в CentOS из исходного кода
Планирование установки каталога LXC
Построение контейнеров LXC и их обработка
Построение нашего первого контейнера
Изготовление индивидуального контейнера при помощи debootstrap в Ubuntu
Изготовление индивидуального контейнера при помощи yum в CentOS
Выводы
Глава 3. Операции командной строки с использованием инструментов Native и Libvirt
Использование вспомогательного хранения LVM
Создание контейнеров LXC с применением вспомогательного хранения LVM
Создание моментальных снимков контейнера в вспомогательном храненилище LVM
Создание блочных устройств при помощи truncate, dd и losetup
Использование вспомогательного хранения Btrfs
Создание контейнеров LXC с применением вспомогательного хранения Btrfs
Создание моментальных снимков контейнера в вспомогательном храненилище Btrfs
Использование вспомогательного хранения ZFS
Создание контейнеров LXC с применением вспомогательного хранения ZFS
Создание моментальных снимков контейнера в вспомогательном храненилище ZFS
Автоматический запуск контейнеров
Ловушки контейнера LXC
Подключение каталогов из ОС хоста и выявление исполняемой файловой системы в контейнере
Заморозка и исполнение контейнера
Ограничение применения ресурса контейнера
Построение и исполнение контейнера при помощи libvirt
Установка libvirt из пакетов в Debian и CentOS
Установка libvirt из исходного кода
Определение контейнеров LXC при помощи libvirt
Подключение блочных устройств к работающим контейнерам при помощи libvirt
Настройка сетевой среды при помощи libvirt
Создание настроек из имеющегося контейнера LXC при помощи libvirt
Останов и удаление контейнеров LXC при помощи libvirt
Выводы
Глава 4. Интеграция кода LXC при помощи Python
Связывания Python LXC
Установка связываний Python LXC и подготовка среды разработки в Ubuntu и CentOS
Построение нашего первого контейнера при помощи Python
Получение информации контейнера при помощи Python libvirt
Запуск контейнеров, применение изменений и просмотр списка параметров настроек при помощи Python
Изменение состояния контейнера при помощи Python
Останов контейнеров при помощи Python
Клонирование контейнеров при помощи Python
Уничтожение контейнеров при помощи Python и очистка имеющейся виртуальной среды
Связывания Python Libvirt
Установка пакетов разработки Python libvirt
Построение контейнеров LXC при помощи Python libvirt
Запуск контейнеров и исполнение основных операций при помощи Python libvirt
Сбор информации контейнера при помощи Python libvirt
Останов и удаление контейнеров LXC при помощи Python libvirt
Vagrant и LXC
Настройка Vagrant LXC
Собираем всё вместе - построение простого RETful API в LXC при помощи Python
Вызовы API для построения и настройки контейнеров LXC
Очистка с применением API
Выводы
Глава 5. Построение сетей в LXC при помощи моста Linux и Open vSwitch
Построение мостов в Linux при помощи программного обеспечения
Мост Linux
Мост Linux и пакет LXC в Ubuntu
Мост Linux и пакет LXC в CentOS
Применение службы dnsmasq для получения IP адреса в контейнере
Статичное назначение IP адресов в контейнере LXC
Обзор вариантов настройки сетевой среды LXC
Работа вручную с вашим мостом Linux
Open vSwitch
Подключение LXC к сети хоста
Настройка LXC с применением режима без сетевой среды
Настройка LXC с применением режима пустой сетевой среды
Настройка LXC с применением режима veth
Настройка LXC с применением режима phys
Настройка LXC с применением режима vlan
Настройка LXC с применением режима macvlan
Выводы
Глава 6. Построение кластеров и горизонтальное масштабирование при помощи LXC
Масштабирование приложений с применением LXC
Масштабирование Apache в минимальной файловой системе корня с использованием LXC libvirt
Создание минимальной файловой системы корня для имеющихся контейнеров
Определение контейнера libvirt Apache
Запуск контейнера libvirt Apache
Масштабирование Apache при помощи LXC libvirt и HAProxy
Масштабирование Apache при помощи полной файловой системы корня LXC и туннелей OVS GRE
Настройка хоста балансировки нагрузки
Создание контейнера балансировки нагрузки
Построение туннеля GRE
Настройка узлов Apache
Установка Apache и HAProxy с тестированием связи
Масштабирование службы Apache
Выводы
Глава 7. Мониторинг и резервное копирование в мире с контейнерами
Резервное копирование и миграция LXC
Получение замеров контейнера
Получение замеров контейнера
Пример мониторинга контейнера и выдачи предупреждений с применением Monit
Мониторинг контейнера и триггеры предупреждений в Sensu
Пример мониторинга контейнера и выдачи предупреждений с применением Monit
Мониторинг контейнера и триггеры предупреждений в Sensu
Мониторинг и предупреждения при замерах LXC
Получение замеров контейнера
Применение lxc-monitor для отслеживания состояния контейнера
Применение lxc-top для получения данных использования ЦПУ и памяти
Применение lxc-info для сбора информации контейнера
Усиление cgroups для сбора статистики ЦПУ
Сбор замеров сетевой среды
Пример мониторинга контейнера и выдачи предупреждений с применением Monit
Мониторинг контейнера и триггеры предупреждений в Sensu
Пример автоматического масштабирования при помощи LXC, Jenkins и Sensu
Выводы
Глава 8. Применение LXC в OpenStack
Развёртывание OpenStack с поддержкой LXC в Ubuntu
Подготовка хоста
Установка службы базы данных
Установка службы очереди сообщений
Установка службы кэширования
Установка и настройка службы подлинности
Установка и настройка службы образа
Установка и настройка службы вычислений
Установка и настройка службы сетевой среды
Определение особенностей экземпляра LXC, генерация пар ключей и создание групп безопасности
Создание сетевых сред
Предоставление контейнеров LXC средствами OpenStack
Выводы
Приложение A: Альтернативы Docker и OpenVZ
Построение контейнеров с применением OpenVZ
Построение контейнеров с применением Docker
Исполнение непривилегированных контейнеров
Выводы
Указатель

 Предисловие

.

 Что охватывает эта книга

Глава 1. Введение в контейнеры Linux

Глава 2. Установка и исполнение LXC в системах Linux

Глава 3. Операции командной строки с использованием инструментов Native и Libvirt

Глава 4. Интеграция кода LXC при помощи Python

Глава 5. Построение сетей в LXC при помощи моста Linux и Open vSwitch

Глава 6. Построение кластеров и горизонтальное масштабирование при помощи LXC

Глава 7. Мониторинг и резервное копирование в мире с контейнерами

Глава 8. Применение LXC в OpenStack

Приложение A. Альтернативы Docker и OpenVZ

 Что вам нужно для этой книги

.

 Для кого эта книга

.

 Разделы

.

 Соглашения

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

Кодовые слова в тексте, имена таблиц базы данных, имена папок, имена файлов, расширения файлов, имена путей, модели URL-адресов, ввод пользователя, и регулировки Twitter представлены следующим образом: "Вручную постройте требуемую корневую файловую систему и настройте файлы с применением таких инструментов как debootstrap и yum" на свой сервер Hyper-V, на который вы собираетесь импортировать данную виртуальную машину.

Блок кода записываются следующим образом:


#define _GNU_SOURCE
#include<stdlib.h>
#include<stdio.h>
#include<signal.h>
#include<sched.h>

staticintchildFunc(void *arg)
{
  printf("UID inside the namespace is %ld\n", (long) geteuid());
  printf("GID inside the namespace is %ld\n", (long) getegid());
}
 	   

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


<head>
#define _GNU_SOURCE
#include
#include
#include
#include

staticintchildFunc(void *arg)
{
  printf("UID inside the namespace is %ld\n", (long) geteuid());
  printf("GID inside the namespace is %ld\n", (long) getegid());
}
 	   

Любой ввод и вывод командной строки записываются так:


root@ubuntu:~# lsb_release -dc
Description:    Ubuntu 14.04.5 LTS
Codename:       trusty
root@ubuntu:~#
 	   

Новые термины и важные слова отображаются жирным шрифтом. Слова, которые вы видите на экране, например, в меню или блоках диалогов появляются в тексте следующим образом: "Переместитесь в Networking support | Networking options | 802.1d Ethernet Bridging и выберите либо Y для компиляции всей функциональности моста в данном ядре, либо M для компиляции его в виде отдельного модуля."

[Замечание]Замечание

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

[Предостережение]Предостережение

.

[Совет]Совет

Советы и ловкие приёмы возникают таким образом.

 Обратная связь с читателями

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

Для отправки обычного отклика просто пошлите электронное письмо на адрес feedback@packtpub.com с упоминанием заголовка книги в теме вашего сообщения.

Если у вас существует тема, в которой у вас имеется опыт и вы заинтересованы либо в написании, либо во вкладе в книгу, обратитесь к руководству по адресу www.packtpub.com/authors.

 Поддержка пользователей

Теперь, когда вы являетесь гордым владельцем книги Packt, у нас есть целый ряд моментов для помощи вам в получении максимальной выгоды от вашей покупки.

 Загрузка примеров кода

Вы можете загрузить файлы примеров кода по адресу из своей учётной записи: http://www.packtpub.com. Если вы приобрели книгу где- либо ещё, вы можете посетить http://www.packtpub.com/support и зарегистрироваться для получения этих файлов по электронной почте непосредственно на свой адрес.

Вы можете загрузить эти файлы с кодом выполнив следующие шаги:

  1. Зарегистрируйтесь на нашем вебсайте при помощи своего адреса электронной почты и пароля.

  2. Переместите указатель мыши на закладку SUPPORT в верхней части.

  3. Кликните по Code Downloads & Errata.

  4. Введите название книги в блок Search.

  5. Выберите книгу для которой вы ищете для загрузки файлы исходного кода.

  6. В ниспадающем меню выберите где вы приобрели эту книгу.

  7. Кликните по Code Download.

Вы также можете загрузить фалы кодов кликнув по кнопке Code Files вебстраницы на вебсайте Packt Publishing. Доступ к данной странице может быть получен путём ввода названия книги в блоке Search. Отметим, что вы должны быть зарегистрированы со своеЙ учётной записью Packt.

После загрузки убедитесь, пожалуйста, что вы раззиповали или раскрыли эту папку при помощи самой последней версии:

  1. WinRAR / 7-Zip для Windows

  2. Zipeg / iZip / UnRarX для Mac

  3. 7-Zip / PeaZip для Linux

Пакет с кодом для данной книги также размещён на GitHub по адресу https://github.com/PacktPublishing/Containerization-with-LXC. У нас также имеются прочие наборы из нашего богатого каталога книг и видео доступные на https://github.com/PacktPublishing/. Следите за ними!

 Загрузка цветных изображений данной книги

Также мы снабжаем вас неким PDF файлом, который имеет цветные изображения применяемых в данной книге снимков экрана/ схем. Эти цветные изображения помогут вам лучше понять все изменения в имеющемся выводе. Вы можете загрузить этот файл с https://www.packtpub.com/sites/default/files/downloads/ContainerizationwithLXC_ColorImages.pdf.

 Опечатки

Хотя мы и предприняли все меры чтобы обеспечить точность нашего содержимого, ошибки всё- таки возможны. Если вы обнаружили ошибку в нашей книге - возможно, ошибку в тексте или в коде - мы будем признательны если вы сообщите об этом нам. Сделав это, вы можете предостеречь остальных читателей от разочарования и помочь нам улучшить последующие версии данной книги. Если вы обнаружили ошибку, пожалуйста, сообщите о ней посетив www.packtpub.com/submit-errata, выбрав вашу книгу, кликнув на ссылку Errata Submission Form, и заполнив подробности найденной вами ошибки. Когда ваша ошибка будет проверена, вы получите уведомление и ошибка будет выложена на наш веб- сайт или добавлена в какой- нибудь перечень существующих ошибок с заголовком раздела Errata.

Для просмотра ранее выявленных ошибок посетите www.packtpub.com/books/content/support и введите название нужной книги в поле поиска. Необходимая информация появится в разделе Errata.

 Незаконное тиражирование

Пиратство, защищённых авторским правом материалов в Интернете является постоянной проблемой во всех средствах массовой информации. В Packt мы подходим к защите наших авторских прав и лицензий очень серьёзно. Если вы столкнётесь с какой-либо незаконной копией наших работ в любой форме в Интернете, пожалуйста, предоставьте нам сразу адрес местонахождения или имя веб-сайта, чтобы мы могли принять меры. {Прим. пер.: Согласно закону об авторском праве РФ, авторские права на перевод принадлежат авторам этого перевода. Данным переводом, по нашему мнению, мы служим популяризации основных стратегических направлений развития тем Packt. В случае наличия конструктивных предложений, готовы к тесному сотрудничеству.}

Пожалуйста, обратитесь по адресу copyright@packtpub.com со ссылкой на материалы содержащие признаки нарушения авторских прав.

Мы выражаем вам признательность в защите наших авторов и нашей возможности доносить до вас имеющего ценность содержимого.

 Вопросы

Если у вас есть проблемы по любым сторонам данной книги, вы можете контактировать с нами по адресу questions@packtpub.com и мы предпримем все меры в отношении ваших проблем.