Рубрика:
Администрирование /
Виртуализация
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
АНДРЕЙ МАРКЕЛОВ, RHCA, старший менеджер архитектурных решений компании Ericsson, автор книг об облачных технологиях, andrey.markelov@ericsson.com
Работа с контейнерами Docker Часть 1. Основы
Узнаем, как на практике управлять контейнерами Docker, об организации взаимодействия между ними и управлением кластерами контейнеров
Архитектура Docker
Читатели журнала уже знакомы с технологиями контейнеров и проектом Docker [1, 2]. Начнем с того, что опишем базовый функционал, который пригодится в дальнейших статьях цикла, и кратко напомним об архитектуре Docker. Docker использует клиент-серверную архитектуру и состоит из клиента – утилиты docker, которая обращается к серверу припомощи RESTful API, и демона в операционной системе Linux (см. рис. 1). Хотя Docker работает и в отличных от Linux ОС, в этой статье они не рассматриваются.
Основные компоненты Docker:
- Контейнеры – изолированные при помощи технологий операционной системы пользовательские окружения, в которых выполняются приложения. Проще всего дать определение контейнеру Docker как запущенному из образа приложению. Кстати, именно этим идеологически и отличается Docker, например, от LXC (Linux Containers), хотя они используют одни и те же технологии ядра Linux. Разработчики проекта Docker исповедует принцип: один контейнер – это одно приложение.
- Образы – доступные только для чтения шаблоны приложений. Поверх существующих образов могут добавляться новые уровни, которые совместно представляют файловую систему, изменяя или дополняя предыдущий уровень. Обычно новый образ создается либо при помощи сохранения уже запущенного контейнера в новый образ поверх существующего, либо при помощи специальных инструкций для утилиты dockerfile. Для разделения различных уровней контейнера на уровне файловой системы могут использоваться AUFS, btrfs, vfs и Device Mapper. Если предполагается использование Docker совместно с SELinux, то требуется Device Mapper.
- Реестры (registry), содержащие репозитории (repository) образов, – сетевые хранилища образов. Могут быть как приватными, так и общедоступными. Самым известным реестром является Docker Hub [3].
Рисунок 1. Архитектура Docker в GNU/Linux
Для изоляции контейнеров в операционных системах GNU/Linux используются стандартные технологии ядра Linux, такие как:
- Пространства имен (Linux Namespaces).
- Контрольные группы (Cgroups).
- Средства управления привилегиями (Linux Capabilities).
- Дополнительные, мандатные системы обеспечения безопасности, такие как AppArmor или SELinux.
Рассмотрим перечисленные технологии чуть более подробно.
Механизм контрольных групп (Cgroups) предоставляет инструмент для тонкого контроля над распределением, приоритизацией и управлением системными ресурсами. Контрольные группы реализованы в ядре Linux. В современных дистрибутивах управление контрольными группами реализовано через systemd, однако сохраняется возможность управления припомощи библиотеки libcgroup и утилиты cgconfig. Основные иерархии контрольных групп (их также называют контроллерами) перечислены ниже:
- blkio – задает лимиты на операции ввода-вывода и на доступ к блочным устройствам;
- cpu – используя планировщик процессов, распределяет процессорное время между задачами;
- cpuacct – создает автоматические отчеты по использованию ресурсов центрального процессора. Работает совместно с контроллером cpu, описанным выше;
- cpuset – закрепляет за задачами определенные процессоры и узлы памяти;
- devices – регулирует доступ задачам к определенным устройствам;
- freezer – приостанавливает или возобновляет задачи;
- memory – устанавливает лимиты и генерирует отчеты об использовании памяти задачами контрольной группы;
- net_cls – осуществляет тегирование сетевых пакеты идентификатором класса (classid). Это позволяет контроллеру трафика (команда tc) и брандмауэру (iptables) учитывать этитэги при обработке трафика;
- perf_event – позволяет производить мониторинг контрольных групп при помощи утилиты perf;
- hugetlb – позволяет использовать виртуальные страницы памяти большого размера и применять к ним лимиты.
Пространства имен, в свою очередь, контролируют не распределение ресурсов, а доступ к структурам данных ядра. Фактически это означает изоляцию процессов друг от друга ивозможность иметь параллельно «одинаковые», но не пересекающиеся друг с другом иерархии процессов, пользователей и сетевых интерфейсов. При желании разные сервисы могут иметь даже свои собственные loopback-интерфейсы.
Примеры пространств имен, используемых Docker:
- PID, Process ID – изоляция иерархии процессов.
- NET, Networking – изоляция сетевых интерфейсов.
- PC, InterProcess Communication – управление взаимодействием между процессами.
- MNT, Mount – управление точками монтирования.
- UTS, Unix Timesharing System – изоляция ядра и идентификаторов версии.
Механизм под названием Capabilities позволяет разбить привилегии пользователя root на небольшие группы привилегий и назначать их по отдельности. Данный функционал вGNU/Linux появился начиная с версии ядра 2.2. Изначально контейнеры запускаются уже с ограниченным набором привилегий.
При помощи опций команды docker можете разрешать и запрещать:
- операции монтирования;
- доступ к сокетам;
- выполнение части операций с файловой системой, например изменение атрибутов файлов или владельца.
Подробнее ознакомиться с привилегиями можно при помощи man-страницы CAPABILITIES(7).
Статью целиком читайте в журнале «Системный администратор», №1-2 за 2017 г. на страницах 36-40.
PDF-версию данного номера можно приобрести в нашем магазине.
- Силаков Д. Проект Docker. Управляем виртуальными окружениями. // «Системный администратор», №3, 2015 г. – С. 4-7 (http://samag.ru/archive/article/2887).
- Силаков Д. Open Containers Initiative. Стандартизация в мире контейнеров. // «Системный администратор», №7-8, 2016 г. – С. 6-8 (http://samag.ru/archive/article/3229).
- Docker Hub – https://hub.docker.com.
- Описание изменений версии Docker от Red Hat – http://www.projectatomic.io/docs/docker_patches.
- Официальный сайт Docker – https://www.docker.com.
- Статья Дэна Уолша об установке Docker в CentOS – http://www.projectatomic.io/blog/2015/08/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|