Резервное копирование и восстановление контейнеров Docker с Bacula

Резервное копирование и восстановление контейнеров Docker с использованием Bacula Enterprise Edition

Введение

ИТ-компаниям постоянно требуются различного рода решения резервного копирования, гарантирующие низкую стоимость владения соответствующим ПО. В этом документе представлены различные стратегии по созданию резервных копий и восстановлению системных контейнеров, управляемых инструментами Docker, с использованием модуля Bacula Docker. Модуль Bacula Enterprise Docker позволяет создавать резервную копию и образ, а также быстро и просто восстанавливать бэкапы.

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

Сценарий использования

Модуль Docker от Bacula Systems предназначен для использования в локальных системах, в которых развёрнута инфраструктура Docker. В частности модуль подходить для резервного копирования и при необходимости восстановления постоянных контейнеров, используемых инфраструктурными сервисами и хранилищами данных. Управление временными контейнерами, создаваемыми из существующих шаблонов, запускаемых, останавливаемых и уничтожаемых по мере необходимости, не содержащими постоянных данных, как правило, происходит иным образом.

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

Краткие характеристики

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

Термины и выражения

Docker компьютерная программа, которая выполняет функцию виртуализации на уровне операционной системы, также известную как «контейнеризация».

Образ шаблон, доступный только для чтения, с инструкциями по созданию Docker контейнера.

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

Docker ID уникальный идентификатор (на базе алгоритма SHA256), используемый для идентификации контейнера или образов системы в среде Docker. Для обозначения уникального идентификатора используется короткая или полная шестнадцатеричная строка SHA256. Полная строка состоит из 64 шестнадтиричных кодов символов, а короткая – из 12 от начала полной строки.

Обзор резервного копирования контейнера

Резервное копирование образа с использованием модуля Docker

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

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

Bacula Enterprise – первое в мире решение для создания резервных копий и восстановления корпоративного уровня, которое позволяет осуществлять расширенное автоматическое резервное копирование контейнеров Docker. Модуль Docker существенно упрощает использование контейнеров.

Модуль интегрируется через Docker API, а это значит, что пользователи могут быстро и легко создавать резервные копии нескольких контейнеров без установки агента внутри каждого контейнера. Такое решение для автоматического резервного копирования Docker контейнеров представляет собой первый шаг компании Bacula на пути к полной интеграции системы, о которой будет объявлено уже в ближайшем будущем. Инструмент доступен практически для всех уровней подписки на Bacula Enterprise и не требует дополнительных затрат.

С помощью модуля Docker Bacula Enterprise можно сохранять полный образ контейнера, включая все уровни, доступные только для чтения и записи, как единый образ архива. Можно также создавать бэкап Docker образа, который затем, по мере необходимости, может быть использован для создания новых контейнеров.

Передовая технология Bacula не требует установки агента Bacula File Daemon внутри каждого контейнера. Таким образом, резервная копия контейнеров может создаваться из обычного репозитория образов. Модуль Bacula Docker связывается с Docker службой для чтения и сохранения  содержимого любого образа системы или образа контейнера с помощью снапшотов (поведение по умолчанию) и выгружает его с использованием Docker API. Ключевой особенностью модуля является его эффективность. ПО Bacula не нужно «просматривать» всю файловую систему контейнера, чтобы открыть, прочитать и закрыть файлы. Поэтому она потребляет гораздо меньше ресурсов Docker инфраструктуры, чем стандартное решение для резервного копирования на уровне системы.

Операции резервного копирования и восстановления

Примечание: пользователи данного раздела должны иметь представление о системе Linux

Резервное копирование

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

  1. Сохранение текущего состояния контейнера в новый образ ( создание снапшота).
  2. Запуск утилиты Docker и сохранение данных.
  3. Удаление сохранённого снапшота для высвобождения ресурсов.

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

В процессе резервного копирования будет создан единый (.tar) файл для любого сохранённого контейнера или Docker-образа. Внутри системы Bacula данная процедура будет выглядеть следующим образом.

  • /@docker/container/<name-label>/<id>.tar для резервного копирования контейнера
  • /@docker/image/<repository:tag>/<id>.tar для резервного копирования образа

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

Для создания списка доступных Docker контейнеров или системных образов используется режим создания списка, описанный в разделе 6.1 на странице 12.

Восстановление

Docker-модуль позволяет осуществлять процедуру восстановления двумя способами, то есть :

  • Восстанавливать бэкап в Docker службу.
  • Восстанавливать бэкап как файловый архив в локальный каталог.
Восстановление в Docker

Чтобы воспользоваться данным режимом восстановления, необходимо использовать команду restore совместно с параметром where= или where=/.

Архив Docker контейнера будет отправлен в Docker службу и восстановлен как образ. А затем будет создан контейнер, в случае, если задан параметр container_create (по умолчанию). Если параметр container_create не задан, любой контейнер будет восстановлен только до уровня образа, и пользователю придётся создать или запустить контейнер вручную. Если параметр восстановления container_run задан (по умолчанию “no”), тогда восстановленный контейнер будет запущен сразу же после успешного восстановления.

Архив Docker образа будет загружен в Docker службу в качестве исходного Docker образа и перезапишет существующий. Система ведёт себя так по умолчанию и такое поведение невозможно изменить. Вы можете пропустить восстановление уже существующего Docker образа с помощью функции «Replace» в команде restore.

Изменить используемые по умолчанию имя контейнера или метку образа контейнера можно во время восстановления, используя параметры восстановления container_defaultnames или container_imageid (раздел 4.2 страница 8).

Восстановление в локальный каталог

Чтобы использовать данный режим, параметру where=/some/path нужно задать полный путь сервера, на котором установлен Docker модуль. Если путь не задан, его создаст модуль Bacula Docker.

Установка

Агент Bacula и его Docker модуль запускаются на хосте Docker службы. Систему Docker можно устанавливать на различных ОС и дистрибутивах, поэтому нужно использовать агент Bacula Enterprise File Daemon, соответствующий выбранной ОС и платформе.

Конфигурация модуля

Модуль конфигурируется с использованием параметров модуля (Module Parameters), заданных в разделе FileSets Include в файле конфигурации Bacula Enterprise Director.

Параметры задач оценки и резервного копирования

Опциональные параметры, описанные ниже, используются только для выполнения задач  оценки и резервного копирования:

  • Выбор Docker контейнера для создания бэкапа

С помощью параметра container=<. . . > можно задать несколько контейнеров. Если контейнер с именем <name-label> не может быть найден, тогда будет сгенерирована единичная ошибка выполнения задачи, а процесс резервного копирования продолжится со следующего контейнера, если не был задан параметр abort_on_error, который прерывает завершённую задачу резервного копирования.

Для выбора нужного контейнера с целью создания бэкапа можно использовать имена Docker контейнеров (<name-label>) или идентификаторы (<id>).

  • Выбор Docker образа для создания бэкапа

С помощью параметра image=<. . . > можно задать несколько образов. Если образ с меткой <repository:tag> не может быть найден, будет сгенерирована единичная ошибка выполнения задачи, а процесс резервного копирования продолжится со следующего образа, если не был задан параметр abort_on_error, который прерывает завершённую задачу резервного копирования.

Для выбора нужного образа с целью создания бэкапа можно использовать имена меток репозиратрия образов Docker (<repository:tag>) или идентификаторы (<id>). Это опциональные параметры.

  • Выбор списка имён Docker контейнеров для создания резервной копии с использованием синтаксиса регулярных выражений.

Для создания бэкапа будут выбраны все контейнеры с именами, совпадающими с регулярными выражениями. Допускается включение нескольких параметров include_container=<…>. Если ни один из контейнеров не совпадёт с  заданным именем-выражением, процесс резервного копирования продолжится с использованием следующего параметра или успешно завершится без создания резервной копии контейнера. Параметр abort_on_error не приведёт к прекращению задачи в случае не нахождения контейнеров с использованием функции совпадения имени.

  • Выбор списка имён репозиратиев образов Docker для создания резервной копии с использованием синтаксиса регулярных выражений.

Для создания бэкапа будут выбраны все образы, имена репозитариев которых совпадут с регулярным выражением. Допускается включение нескольких параметров include_images=<. . . >. Если ни один из образов не совпадёт с заданным именем-выражением репозитария, процесс резервного копирования продолжится с использованием следующего параметра или успешно завершится без создания резервной копии образа. Параметр abort_on_error не приведёт к прекращению задачи в случае не нахождения образов  с использованием команды совпадения имени репозитария.

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

Будут исключены все контейнеры с именами, совпадающими с заданными регулярными выражениями, выбранные для создания бэкапа с помощью параметра include_container=<…>. Данный параметр не влияет на какие-либо контейнеры, выбранные для создания бэкапа с помощью параметра container=<. . . >. Также можно указать несколько параметров exclude_container=<. . . >.

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

Будут исключены все образы с именами репозитариев, совпадающими с регулярными выражениями, выбранные для создания бэкапа с помощью параметра include_image=<…>. Данный параметр не влияет на какие-либо образы, выбранные для создания бэкапа с помощью параметра image=<…>. Также можно указать несколько параметров исключения exclude_image=<…>.

Параметры модуля восстановления

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

container_create: <yes|no> позволяет указать необходимость создания контейнера службой восстановления Docker контейнера. По умолчанию контейнер создаётся при восстановлении. Если контейнеры необходимо восстановить как образы, необходимо присвоить данному параметру значение no.

container_run: <yes|no> позволяет указать необходимость создания и запуска контейнера службой восстановления Docker контейнера. По умолчанию контейнер не запускается автоматически при восстановлении. Если предполагается, что контейнер должен быть запущен незамедлительно после восстановления данному параметру необходимо присвоить значение yes. Если параметру присвоено значение  yes, тогда параметр container_create будет проигнорирован.

container_imageid: <yes|no> позволяет указать необходимость использования значений идентификатора образа для создания и запуска контейнера службой восстановления Docker контейнера. По умолчанию используются значения репозитария образа и метки. Параметр буде проигнорирован, если параметрам container_create и container_run присвоены значения no, так как не будет выполняться процедура создания и запуска контейнера.

container_defaultnames: <yes|no> позволяет указать необходимость настройки модулем Docker имени контейнера на основе исходного имени и значений JobId, используемого по умолчанию. Если параметру присвоено значение yes, служба Docker сформирует имена по умолчанию для создаваемых и запускаемых контейнеров.

Примеры FileSet

В примере ниже показано создание бэкапа всех Docker контейнеров и образов.

В примере ниже показано создание бэкапа одного Docker контейнера с именем-меткой “mcache1”.

Тот же пример, что и выше, но с использованием идентификатора контейнера:

В примере ниже показано создание бэкапа всех Docker контейнеров, содержащих в имени ‘ngnix’.

Ниже приведён последний пример, в котором показано создание бэкапа всех Docker контейнеров, чьи имена начинаются с «test».

Восстановление

Восстановление в службу Docker

Для восстановления контейнера или образа в службу Docker администратор должен выполнить команду restore, указав параметр where как показано в примере ниже:

А затем задать прочие необходимые параметры восстановления. В примере ниже показано, что опции плагина восстановления container_run присвоено значение «Да» («Yes»):

Лог файл задачи восстановления покажет восстанавливаемый контейнер и созданный идентификатор нового контейнера:

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

Восстановление в локальный каталог

Можно восстановить данные образа контейнера или шаблона Docker в файл без их загрузки в сервис Docker. Чтобы осуществить данное действие, необходимо чтобы опция where указывала локальный каталог, в который необходимо произвести восстановление:

Пожалуйста, обратите внимание на строку «Docker local restore» в примере ниже:

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

Прочая информация

Список ресурсов

Модуль (плагин) Bacula Enterprise Docker поддерживает функцию Listing Bacula Enterprise. Данный режим позволяет отображать определённую полезную информацию о доступных ресурсах, такую как ( в случае модуля Docker):

  • Список имён-меток контейнеров
  • Список гостевых VMIDов ВМ
  • Список хранилищ Docker
  • Список ресурсных пулов Docker

Ниже представлен рисунок, на котором показана основная архитектура Bacula Enterprise и ее модульное исполнение.

Рисунок 1. Архитектура Bacula Enterprise

На рисунке ниже представлен обзор совокупного набора функций Bacula Enterprise.

Рисунок 2. Набор функций Bacula Enterprise