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

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

В этом руководстве объясняется, как использовать Ansible для автоматизации шагов, содержащихся в нашем руководстве по Установке и использованию Docker в Ubuntu 22.04. 

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

Предварительные требования

Для выполнения автоматической настройки, предоставленной playbook в этом руководстве, вам понадобится:

  • Один узел управления Ansible: компьютер Ubuntu 22.04 с установленным и настроенным Ansible для подключения к вашим хостам Ansible с помощью SSH-ключей. Убедитесь, что на управляющем узле есть обычный пользователь с разрешениями sudo и включенным брандмауэром, как описано в нашем руководстве по начальной настройке сервера. Чтобы настроить Ansible, пожалуйста, следуйте нашему руководству о том, как установить и настроить Ansible в Ubuntu 22.04.
  • Один или несколько хостов Ansible: один или несколько удаленных серверов Ubuntu 22.04, предварительно настроенных в соответствии с руководством по использованию Ansible для автоматизации начальной настройки сервера в Ubuntu 22.04.

Прежде чем продолжить, вам сначала необходимо убедиться, что ваш узел управления Ansible способен подключаться и выполнять команды на вашем хосте (ах) Ansible. Для проверки подключения ознакомьтесь с Шагом 3 из Инструкции по установке и настройке Ansible в Ubuntu 22.04.

Что делает этот playbook?

Это руководство по Ansible предоставляет альтернативу ручному выполнению процедуры, описанной в нашем руководстве по Установке и использованию Docker в Ubuntu 22.04. Настройте playbook один раз и используйте его для каждой последующей установки.

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

  1. Установите aptitude, который Ansible предпочитает в качестве альтернативы apt менеджеру пакетов.
  2. Установите необходимые системные пакеты.
  3. Установите ключ Docker GPG APT.
  4. Добавьте официальный репозиторий Docker в apt исходные тексты.
  5. Установите Docker.
  6. Установите модуль Python Docker через pip.
  7. Извлеките образ по умолчанию, указанный default_container_image, из Docker Hub.
  8. Создайте количество контейнеров, определенных в container_count переменной, каждый с использованием образа, определенного в default_container_image, и выполните команду, определенную в default_container_command в каждом новом контейнере.

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

Для начала войдите под именем sudo разрешенного пользователя на вашем сервере Ansible control node server.

Подготовка вашего playbook

В playbook.yml файле определены все ваши задачи. Задача — это наименьшая единица действия, которую вы можете автоматизировать с помощью Ansible playbook. Но сначала создайте файл playbook, используя предпочитаемый вами текстовый редактор:

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

playbook.yml

Почти каждый playbook, с которым вы сталкиваетесь, состоит из переменных: 

  • hosts объявляет, на какие серверы узел управления Ansible будет нацелен с помощью этого playbook. 
  • become указывает, будут ли все команды выполняться с повышенными привилегиями root.
  • vars позволяет хранить данные в переменных. Если вы решите изменить их в будущем, вам нужно будет отредактировать только эти отдельные строки в вашем файле. Вот краткое объяснение каждой переменной:
  • container_count: Количество создаваемых контейнеров.
  • default_container_name: Имя контейнера по умолчанию.
  • default_container_image: Образ Docker по умолчанию, который будет использоваться при создании контейнеров.
  • default_container_command: Команда по умолчанию для запуска в новых контейнерах.

Примечание: Если вы хотите увидеть файл playbook в его окончательном готовом виде, перейдите к шагу 5. Файлы YAML могут отличаться особой структурой отступов, поэтому вам может потребоваться перепроверить playbook после добавления всех ваших задач.

Добавление задач по установке пакетов в ваш Playbook

По умолчанию задачи Ansible выполняются синхронно в порядке сверху вниз в вашем playbook. Это означает, что порядок выполнения задач важен, и вы можете с уверенностью предположить, что выполнение одной задачи завершится до начала выполнения следующей.

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

Добавьте свои первые задачи по установке aptitude, инструмента для взаимодействия с менеджером пакетов Linux и установки необходимых системных пакетов. Ansible гарантирует, что эти пакеты всегда будут установлены на вашем сервере.:

playbook.yml

Здесь вы используете apt встроенный в Ansible модуль, чтобы направить Ansible на установку ваших пакетов. Модули в Ansible — это ярлыки для выполнения операций, которые в противном случае вам пришлось бы запускать как необработанные команды bash. Ansible безопасно возвращается к apt для установки пакетов, если aptitude он недоступен, но исторически предпочтение отдавалось Ansible aptitude.

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

Добавление задач по установке Docker в ваш Playbook

Ваша задача — установить последнюю версию Docker из официального репозитория. Добавлен GPG-ключ Docker для подтверждения загрузки, добавлен официальный репозиторий в качестве источника нового пакета, и Docker будет установлен. Кроме того, также будет установлен модуль Docker для Python:

playbook.yml

Вы увидите, что apt_key и apt_repository встроенные модули Ansible сначала указывают на правильные URL-адреса, а затем им поручается убедиться в их наличии. Это позволяет установить последнюю версию Docker, а также использовать pip для установки модуля для Python.

Добавление образа Docker и контейнерных задач в вашу Playbook

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

playbook.yml

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

with_sequence это способ Ansible для создания цикла, и в этом случае он будет выполнять цикл создания ваших контейнеров в соответствии с указанным вами количеством. Это базовый цикл подсчета, поэтому item переменная здесь предоставляет число, представляющее текущую итерацию цикла. Это число используется здесь для присвоения имен вашим контейнерам.

Просмотр полного руководства по playbook

Ваш playbook должен выглядеть примерно следующим образом, с небольшими отличиями в зависимости от ваших настроек:

playbook.yml

Не стесняйтесь изменять это руководство, чтобы оно наилучшим образом соответствовало вашим индивидуальным потребностям в рамках вашего собственного рабочего процесса. Например, вы могли бы использовать модуль docker_image для отправки изображений в Docker Hub или модуль docker_container для настройки контейнерных сетей.

Примечание: Это ненавязчивое напоминание о том, что следует помнить о своих отступах. Если вы столкнулись с ошибкой, весьма вероятно, что виновником является она. YAML предлагает использовать 2 пробела в качестве отступа, как было сделано в этом примере.

После того, как вы будете удовлетворены своей игрой, вы можете выйти из текстового редактора и сохранить.

Запуск Playbook

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

Чтобы запустить playbook только на server1, подключившись как sammy, вы можете использовать следующую команду:

Флаг -l указывает ваш сервер, а флаг -u указывает, к какому пользователю входить на удаленном сервере. Вы получите результат, аналогичный этому:

Примечание: Для получения дополнительной информации о том, как запускать Ansible playbooks, ознакомьтесь с руководством по Ansible.

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

Когда playbook будет завершен, войдите по SSH на сервер, предоставленный Ansible, чтобы проверить, успешно ли были созданы контейнеры.

Войдите на удаленный сервер с помощью:

И перечисления ваших контейнеров Docker на удаленном сервере:

Вы должны увидеть вывод, подобный этому:

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

Источник