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

Дата: 27.07.2018 Автор Admin

В данной статье мы рассмотрим как установить Ansible на Ubuntu server 18.04 и настроить playbook с автоматической установкой обновлений на Windows и Ubuntu хосты.
Также рассмотрим простой пример как поднять веб сервер с nginx,php7,mysql и поднять роли iis, fileserver на Windows хостах с помощью playbook Ansible.

Поехали!

Добавим ключ от репозитория Ansible

Добавим сам репозиторий

Обновим список пакетов и установим Ansible

Ansible использует ssh для подключения к Linux серверам.

Поэтому создадим ключ ssh на сервере Ansible

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

В данной команде измените root на своего пользователя и test-ubuntu1 на hostname вашего сервера

Ansible использует python для управления linux хостами, поэтому подклюючимся к каждой ноде с Ubuntu и установим на них python командой:

Теперь вернемся на сервер Ansible и откроем файл /etc/ansible/hosts

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

Например:

Теперь проверим можем ли мы подключиться к добавленным хостам

Запустим ping

Вывод должен быть таким:

Также можно изменить команду ping следующим образом:

Теперь проверим связь по ssh

Выполним команду , которая выведет нам кол-во свободной памяти на наших серверах с Ubuntu

Вывод должен быть примерно таким:

Если команда выполнилась на серверах значит у нас все ок, и соединение по ssh работает.

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

Для этого создаем папку — /etc/ansible/group_vars командой ниже:

Далее создаем в ней файл с названием нашей группы серверов

и внесем в него следующую переменную, сам файл необходимо создавать в формате YAML.

Содержимое файла будет следующее:

Вместо root укажите своего пользователя.

 

Теперь перейдем к самому интересному, создадим свой первый Playbook, который будет устанавливать обновления на Ubuntu.

Создадим папку для Playbook

Создадим новый Playbook

Открываем файл ~/ansible/playbooks/update_ubuntu.yml и заполняем его следующим образом:

 

Проверим Playbook

Вывод команды должен быть таким:

Запустим Playbook

Вывод команды должен быть таким:

Сервера успешно обновились.
Строку fatal: [test-ubuntu2]: UNREACHABLE! мы получили из-за того что Ansible отправил сервера на перезагрузку , т.к. в сценарии Playbook мы указали проверить есть ли хостах файл /var/run/reboot-required

Если перезагрузка серверов не требуется можно использовать следующий Playbook:

 

Обратите внимание, тут я использую немного другой синтаксис apt , он тоже корректный.
Более подробно о синтаксисе можно почитать тут — https://docs.ansible.com/ansible/latest/modules/apt_module.html#examples

Теперь создадим Playbook устанавливающий Nginx, PHP и Mysql на наши сервера с Ubuntu

Сам Playbook будет выглядеть так:

Проверим Playbook

Запустим Playbook

Playbook Успешно отработал, если зайти на хосты мы увидим что nginx, php и mysql успешно установились.

На этом этапе базовая настройка Playbook для хостов Ubuntu закончена перейдем к настройке хостов под управлением Windows.

Для работы с Windows хостами Ansible использует Powershell и winrm , версия Powershell требуется не ниже 3.0 , а net framework не ниже 4.

Для обновления Powershell и net framework можно использовать следующий скрипт:

Далее запустите следующий скрипт для активации WINRM

После того как скрипты успешно отработали на ваших Windows хостах перейдем к настройке самого Ansible.

Переходим в консоль Ansible и запускаем команды для установки поддержки приложений python

Откроем файл /etc/ansible/hosts и добавим Windows Хосты.

Обратите внимание что кроме самих хостов были добавлены переменные с логином и паролем для подключения и включено игнорирование проверки ssl сертификата.

Теперь запустим ping до Windows хостов командой:

Вывод должен быть следующим:

Теперь создадим новый Playbook, который будет устанавливать обновления на Windows хосты.

Сам Playbook будет следующий:

Проверим Playbook

Вывод должен быть таким:

Запустим Playbook

Вывод должен быть примерно таким:

Обновления успешно установились на сервер test-ansible-iis , а для сервера test-ansible нет новых обновлений.

Теперь создадим Playbook для установки роли веб сервера IIS.

Создаем Playbook

Сам Playbook будет следующего содержания:

Запустим проверку нашего Playbook

Вывод должен быть следующий:

Теперь запустим Playbook

Вывод должен быть таким:

На сервере test-ansible IIS уже был установлен, поэтому для него изменения не применились, а вот на сервер test-ansible-iis успешно установилась роль веб сервера IIS.

Более подробно о модуле win_feature можно почитать тут — https://docs.ansible.com/ansible/2.5/modules/win_feature_module.html

Сам список доступных фич можно получить Powershell командой Get-WindowsFeature , которую нужно выполнить на хосте с Windows.

Рассмотрим еще один пример, установим роли файлового сервера и ISCSI Target.

Создаем Playbook

Сам Playbook будет следующий:

Теперь запустим Playbook

Результат:

Роли файлового сервера и ISCSI Target успешно установились на сервера.

Обратите внимание что роли в playbook указываются из графы Name, команды Get-WindowsFeature.

Ниже пример вывода команды Get-WindowsFeature и список доступных ролей и фич Windows Server

На этом базовое ознакомление с Ansible можно считать законченным)

Удачной установки!


Комментарии

Роман

А можно ли с помощью подобного этого ПО изменять конфиги сразу на множестве серверов?

    Admin

    Можно, также создаете группу хостов и пишите для них playbook.
    Но на мой взгляд удобнее для этих целей использовать Puppet, я на днях планирую опубликовать статью о настройке связки Foreman + Puppet.

Добавить комментарий

Ваш адрес email не будет опубликован.