Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. DevOps

Автоматизируйте все с помощью Ansible: часть первая

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Automate All the Things With Ansible.
Automate All the Things With Ansible: Part Two

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Обзор

Это первая часть руководства из двух частей по Ansible. В этой части вы узнаете, что такое Ansible, как его установить и настроить, и как установить локальный кластер Vagrant для его тестирования. Затем вы найдете инвентарь, модули, специальные команды, книги, стратегии запуска, блоки и хранилище.

Что такое Ansible?

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

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

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

Начало работы с Ansible

Ansible работает на управляющей машине и может управлять серверами под управлением любой операционной системы, но управляющая машина не может быть машиной Windows на данный момент. Я буду использовать Mac OS X в этом руководстве в качестве контрольной машины.

Установка

Ansible требует Python 2.6 или 2.7. Чтобы установить его, введите:

pip install ansible

В Mac OS X рекомендуется увеличить количество дескрипторов файлов:

sudo launchctl limit maxfiles 1024 unlimited

Если вы видите ошибку типа «Слишком много открытых файлов», вам, вероятно, нужно это сделать.

Чтобы проверить правильность установки Ansible, введите ansible --version. Вы увидите следующее:

Конечно, номер версии может быть другим.

Файл конфигурации Ansible

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

  • ANSIBLE_CONFIG (переменная окружения)
  • ansible.cfg (в текущем каталоге)
  • .ansible.cfg (в домашнем каталоге)
  • /etc/ansible/ansible.cfg

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

Проверьте документацию Ansible, чтобы узнать обо всех вариантах.

Настройте Кластер Vagrant

Чтобы по-настоящему понять всю мощь Ansible, вам нужно несколько серверов для управления. В этом руководстве я буду использовать кластер Vagrant из 3 виртуальных машин, но для Ansible это всего лишь несколько хостов, которыми он должен управлять. Чтобы узнать больше о Vagrant, ознакомьтесь с разделом Введение в Vagrant.

Сначала установите VirtualBox и Vagrant. Затем поместите следующее в файл с именем Vagrantfile в рабочем каталоге.

Затем наберите vagrant up. Vagrant создаст для вас три виртуальные машины, доступные как larry, curly и moe. Чтобы проверить, введите vagrant status. Вы должны увидеть:

Чтобы убедиться, что вы можете использовать SSH на хостах кластера, введите: vagrant ss >> ~ / .ssh / config.

Теперь вы можете использовать SSH на любом из ваших виртуальных серверов, используя их имя хоста. Например: ssh curly. Это позволит Ansible подключаться к хостам вашего кластера через SSH без каких-либо проблем с именами пользователей, паролями или ключами.

Инвентарь

Теперь, когда у нас есть кластер, нам нужно рассказать об этом Ansible. Это делается с помощью инвентарного файла. Файл инвентаризации - это список имен хостов, организованных в группы с использованием формата файла INI. Поместите следующее в файл с именем 'hosts' в вашей рабочей директории.

Я поместил «larry» в группу «funny», а остальные хосты в группу «funnier». Эта организация позволит нам выполнять действия в отношении этих групп. Вы также можете выполнять действия на отдельных хостах и на всех хостах.

Модули

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

Специальные команды

Пришло время взяться за дело. Простейший способ использования Ansible - запуск специальных команд. Специальные команды используют модули. Формат специальной команды:

ansible -i -m [-a , ... ]

Например, чтобы увидеть, все ли хосты в вашем инвентаре работают, вы можете использовать модуль ping (без аргументов):

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

Playbooks

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

Пример Playbook

Давайте посмотрим на то, как выглядит типичный playbook, прежде чем мы перейдем к деталям.

В playbook есть раздел hosts, в котором вы указываете хосты из файла инвентаризации. В этом случае название группы "funnier". Затем есть раздел задач с двумя задачами, которые устанавливают Nginx и Python 3. Наконец, есть раздел обработчиков, где Nginx запускается после его установки.

Запуск Playbooks

Вы запускаете playbook с помощью команды ansible-playbook. Вам все еще нужно предоставить файл инвентаря и книгу воспроизведения, которую вы хотите запустить. Сохраните playbook в файл с именем "playbook.yml" в вашем рабочем каталоге. Давайте попробуем:

О нет. Что случилось? Ansible выдает приличное сообщение об ошибке здесь: «Не удалось заблокировать apt для исключительной операции». Многие playbooks требуют привилегий sudo. Этот playbook не является исключением. Чтобы запустить playbook с правами sudo, просто добавьте флаг --sudo:

Ansible является идемпотентом, что означает, что если что-то уже находится в желаемом состоянии, то Ansible оставит это в покое. В выводе ansible-playbook вы можете увидеть, какие задачи были успешными или неудачными, а какие были изменены.

Давайте снова запустим ту же playbook. Ничто не должно быть изменено:

Стратегии запуска

До Ansible 2.0 playbook выполнялись линейно, задача за задачей. Все целевые хосты выполнили первое задание. Только когда все узлы были выполнены с первым заданием, они могли начать второе задание.

В Ansible 2.0 добавлена концепция стратегий запуска. В настоящее время существует две стратегии: «линейная» стратегия, которую я описал выше, которая является стратегией по умолчанию, и «свободная» стратегия, при которой хосты могут выполнять задачи в сборнике playbook по-прежнему в порядке, но не в стопах с другими хостами.

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

Свободная стратегия кажется превосходной в большинстве ситуаций. Вы просто добавляете strategy: free пару ключ-значение в playbook.

Блоки

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

С блоками вы можете сгруппировать все эти задачи отладки и поставить условие « when» на уровне блока.

Хранилище

Ansible связывается с удаленными компьютерами по SSH, но в плейбуках могут содержаться такие секреты, как имя пользователя, пароли и ключи API. Поскольку вы обычно храните playbooks в системах контроля версий, таких как git, эта информация будет видна всем, кто имеет доступ для чтения.

Ansible помогает с программой ansible-vault, которая позволяет создавать, редактировать и повторно шифровать зашифрованные файлы. Эти файлы могут быть расшифрованы на лету при запуске playbook, указав пароль. Если вы добавите флаг --vault-ask-pass в ansible-playbook, он запросит пароль хранилища.

Кроме того, вы можете добавить --vault-password-file <файл-пароля>, и Ansible прочитает пароль из вашего файла. Если вы используете файл паролей, не храните его в системе контроля версий!

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

Заключение

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

Оставайтесь с нами для второй части.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.