Ansible управление хостами linux

Содержание
  1. Установка и настройка Ansible в Ubuntu 18.04
  2. Как работает Ansible?
  3. Требования
  4. 1: Установка Ansible
  5. 2: Настройка SSH-доступа к хостам Ansible
  6. 3: Настройка хостов Ansible
  7. 4: Простые команды Ansible
  8. Заключение
  9. Что такое Ansible и как его использовать
  10. Что такое Ansible и как его использовать
  11. Ключевые особенности программы Ansible
  12. Установка и запуск
  13. Структура Ansible
  14. Модули
  15. Плагины
  16. Инвентаризация хостов
  17. Playbooks
  18. group_vars
  19. Обработчики
  20. Демо «Реальное приложение»
  21. Последовательность действий для создания и запуска Laravel APP:
  22. Создание экземпляра Ubuntu Lightsail
  23. Установка зависимостей Ansible на нашем VPS
  24. Добавление SSH-ключей в Git
  25. Сборка хостов и ansible.cfg
  26. Определение роли в Ansible
  27. Определение обработчика
  28. Установка модулей PHP
  29. Установка Nginx
  30. Добавление default-конфигурации Nginx
  31. vars.yml
  32. Как использовать Ansible-Vault
  33. Создание базы данных MySql, имени пользователя и пароля
  34. Клонирование кодовой базы
  35. Генерирование .env
  36. Создание playbook
  37. Запуск playbook
  38. Полная структура проекта
  39. Дополнительные материалы для начинающих изучать Ansible

Установка и настройка Ansible в Ubuntu 18.04

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

Существует множество систем управления конфигурациями, предназначенных для Linux (например, Chef или Puppet), но они довольно сложные. Ansible – простое альтернативное решение, не требующее большого количества ресурсов.

Данный мануал поможет установить Ansible на Ubuntu 18.04 и разобраться в базовых понятиях.

Как работает Ansible?

Ansible настраивает клиентские машины с компьютера, на котором установлены все компоненты программы.

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

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

Конфигурационные файлы в основном записываются в формате YAML. Ansible может взаимодействовать с клиентами через инструменты командной строки или с помощью сценариев (которые также называются Playbooks).

Требования

  • Сервер Ubuntu 18.04 (инструкции по начальной настройке можно найти здесь).
  • SSH-ключи (настроить их вам поможет мануал Установка SSH-ключей в Ubuntu 18.04).

1: Установка Ansible

Установите пакет Ansible на машину, которая будет использоваться для централизованного управления.

Используйте для установки PPA-репозиторий. Сначала обновите индекс пакетов и установите software-properties-common, пакет, который упрощает управление независимыми программными репозиториями.

sudo apt update
sudo apt install software-properties-common

Теперь можно добавить репозиторий PPA Ansible:

sudo apt-add-repository ppa:ansible/ansible

Нажмите Enter, чтобы принять PPA.

Обновите индекс пакетов системы, чтобы получить доступ к добавленному архиву, а затем установите программу:

sudo apt update
sudo apt install ansible

2: Настройка SSH-доступа к хостам Ansible

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

На сервере Ansible используйте команду cat, чтобы отобразить открытые ключи SSH в терминале:

Скопируйте результат в буфер обмена, затем откройте новый терминал и подключитесь в нем к клиенту Ansible по SSH:

Читайте также:  Exfat для загрузочной флешки windows 10

Перейдите в сессию пользователя root:

Откройте файл authorized_keys:

Вставьте в файл SSH-ключи, скопированные с сервера, а затем сохраните и закройте файл (CTRL + X, Y, Enter). Затем введите exit, чтобы вернуться в сессию обычного пользователя.

Поскольку для запуска модулей Ansible использует интерпретатор python, который находится в /usr/bin/python, вам нужно установить на хост Python 2 (иначе Ansible не сможет взаимодействовать с ним). Запустите следующие команды:

sudo apt update
sudo apt install python

Закройте подключение к клиенту:

Повторите этот процесс для каждого клиента Ansible.

3: Настройка хостов Ansible

Ansible отслеживает все серверы, указанные в файле hosts. Чтобы система Ansible могла взаимодействовать с остальными машинами, нужно отредактировать этот файл.

sudo nano /etc/ansible/hosts

В файле хранится множество настроек и примеров конфигурации. В данном случае все они не подходят. Закомментируйте их, добавив символ # в начало.

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

Закомментировав все настройки, добавьте в файл свои хосты.

Файл hosts довольно гибкий. В данном случае используйте такой синтаксис:

[group_name] alias ansible_ssh_host=your_server_ip

Тег group_name позволяет ссылаться сразу на несколько серверов; alias задаёт имя сервера.

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

При этом система не должна запрашивать паролей. Предположим, серверы называются host1, host2 и host3 и имеют следующие IP-адреса: 203.0.113.1, 203.0.113.2 и 203.0.113.3 соответственно. Группа будет называться servers.

Чтобы настроить управление этими серверами, нужно добавить в файл такие строки:

[servers] host1 ansible_ssh_host=203.0.113.1
host2 ansible_ssh_host=203.0.113.2
host3 ansible_ssh_host=203.0.113.3

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

Если на данный момент попробовать подключиться к одному из хостов при помощи Ansible, команда вернёт ошибку (если только вы не работаете в сессии root). Это происходит потому, что SSH-ключи настроены для пользователя root, а система Ansible, как правило, подключается как текущий пользователь системы. Потому при подключении появится ошибка:

host1 | UNREACHABLE! => <
«changed»: false,
«msg»: «Failed to connect to the host via ssh.»,
«unreachable»: true
>

На компьютере Ansible в данном случае используется пользователь 8host. Потому Ansible попытается подключиться к серверам как ssh 8host@server. Это не сработает, если пользователя 8host не существует в удалённой системе.

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

Создайте каталог в структуре настроек Ansible под названием group_vars. В этой папке создайте файлы в формате YAML для каждой группы.

sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/servers

Сюда можно поместить настройки.

Примечание: Файлы YAML начинаются с —.

Сохраните и закройте файл.

В файле /etc/ansible/group_vars/all можно указать конфигурации для каждого сервера независимо от группы. Индивидуальные настройки хостов можно поместить в каталог /etc/ansible/host_vars.

4: Простые команды Ansible

Теперь хосты настроены и готовы к работе. Попробуйте запустить первую команду, например, ping.

ansible -m ping all
host1 | SUCCESS => <
«changed»: false,
«ping»: «pong»
>
host3 | SUCCESS => <
«changed»: false,
«ping»: «pong»
>
host2 | SUCCESS => <
«changed»: false,
«ping»: «pong»
>

Читайте также:  Почтовые конверты portable windows 10

Этот базовый тест позволяет убедиться в том, что Ansible взаимодействует со всеми хостами. Параметр all значит «все хосты». Вместо него можно задать группу:

ansible -m ping servers

Или отдельный хост:

ansible -m ping host1

Чтобы указать несколько хостов, разделите их с помощью двоеточий

ansible -m ping host1:host2

Параметры команды -m ping указывают, что система Ansible должна использовать модуль ping. Эти команды можно запускать на удалённых хостах. Модуль ping в большинстве случаев работает как обычная утилита Linux, но в системе Ansible он проверяет взаимодействие между серверами.

Модуль ping не требует никаких аргументов. Попробуйте запустить другую команду с аргументом –а.

Модуль shell позволяет отправлять команды на удалённый хост и получать вывод. К примеру, чтобы узнать уровень использования памяти на машине host1, нужно ввести:

ansible -m shell -a ‘free -m’ host1
host1 | SUCCESS | rc=0 >>
total used free shared buffers cached
Mem: 3954 227 3726 0 14 93
-/+ buffers/cache: 119 3834
Swap: 0 0 0

Заключение

Теперь сервер Ansible взаимодействует с другими серверами и может управлять ими с помощью простых команд.

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

Источник

Что такое Ansible и как его использовать

Что такое Ansible и как его использовать

Что такое Ansible? Это ПО с открытым исходным кодом, которое автоматизирует поставку программного обеспечения, управление конфигурацией и развёртывание приложений. Ansible помогает DevOps-специалистам автоматизировать сложные задачи.

Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.

Ключевые особенности программы Ansible

  • Безагентное. В клиенте не установлено программное обеспечение или агент, который общается с сервером.
  • Идемпотентное. Независимо от того, сколько раз вы вызываете операцию, результат будет одинаковым.
  • Простое и расширяемое. Программа Ansible написанa на Python и использует YAML для написания команд. Оба языка считаются относительно простыми в изучении.

Установка и запуск

Инструкцию по установке на другие ОС можно найти здесь.

Структура Ansible

Модули

Это небольшие программы, выполняющие определённую работу на сервере. Например, вместо запуска этой команды:

Мы можем использовать модуль apt и установить htop:

Использование модуля даст вам возможность узнать, установлен он или нет.

Плагины

Ansible поставляется с несколькими удобными плагинами, и вы можете легко написать свой собственный.

Инвентаризация хостов

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

В простейшем виде он может содержать одну строку:

Playbooks

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

group_vars

Файл содержит набор переменных, например имя пользователя и пароль базы данных.

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

Обработчики

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

Читайте также:  Windows 10 compact активатор

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

Демо «Реальное приложение»

Цель этой демонстрации — установить приложение Laravel в VPS. Для этого используем Lightsail.

Последовательность действий для создания и запуска Laravel APP:

Рассмотрим каждый пункт подробнее.

Создание экземпляра Ubuntu Lightsail

Перейдите на панель управления Lightsail и нажмите «Создать экземпляр».

Выберите свою любимую ОС.

Выберите «Добавить скрипт запуска», который запускается после создания вашего экземпляра. Не забудьте получить SSH-ключ.

Установка зависимостей Ansible на нашем VPS

Добавьте эти sh-команды для установки зависимостей:

Теперь у нас есть готовый экземпляр, перейдём к построению Ansible Project.

Добавление SSH-ключей в Git

Вы должны добавить свой сервер id_rsa.pub к своим ключам GitHub SSH, войдя в свой сервер.

Сборка хостов и ansible.cfg

Определение роли в Ansible

Используем модуль Ping, чтобы убедиться, что хост работает, после чего нужно обновить все пакеты и установить два модуля: git и htop.

Определение обработчика

Установка модулей PHP

Чтобы вызвать обработчик, мы должны использовать notify: Restart PHP-FPM, имена обработчиков должны быть уникальными.

В этом руководстве мы определили php как тег, поэтому, например, если вы хотите запустить только эту задачу из своего playbook, вам необходимо выполнить её с —tags = ”php”, которая будет исполнять только её.

Установка Nginx

Добавление default-конфигурации Nginx

vars.yml

Примечание: Рекомендуется использовать ansible-vault для шифрования и дешифрования переменных.

Как использовать Ansible-Vault

Создайте секретный файл хранилища, содержащий ключ шифрования, который шифрует ваши переменные.

Чтобы зашифровать переменные, используйте:

Чтобы расшифровать переменные, используйте:

Создание базы данных MySql, имени пользователя и пароля

mysql_user и mysql_pass определены внутри vars.yml.

Клонирование кодовой базы

repo_git_url и app_work_dir определены внутри vars.yml.

Генерирование .env

Ansible использует шаблонизатор Jinja2 для динамических выражений и доступа к переменным. Создадим файл env.conf.

Определим role , чтобы переместить этот шаблон в директорию нашего приложения.

Создание playbook

Как видно, мы определили aws как хост для этого playbook, и sudo yes даёт нам возможность выполнять команду как пользователю sudo. У нас есть vars_files, где мы храним наши vars. Мы установили roles, каждая role выполняет определённую задачу. И, наконец, у нас есть handlers, которые содержат все обработчики проекта.

Запуск playbook

Полная структура проекта

Дополнительные материалы для начинающих изучать Ansible

  • Репозиторий на GitHub, который содержит полный исходный код.
  • Этот сайт запущен и работает с использованием этой кодовой базы.
  • Советы по использованию Ansible playbooks.
  • Описание архитектуры программы Ansible.
  • Статья «How to Use Ansible to Automate Initial Server Setup on Ubuntu».
  • О других инструментах сисадмина и DevOps читайте в нашей подборке.

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации

Источник

Оцените статью