Настройка ansible centos 8
Системы управления конфигурациями предназначены для контроля настроек и операций большого количества серверов. Они позволяют централизованно управлять различными системами в автоматическом режиме. Существует множество систем управления конфигурациями, предназначенных для Linux (например, Chef или Puppet), но они довольно сложные. Ansible – простое альтернативное решение, не требующее большого количества ресурсов.
Ansible настраивает клиентские машины с компьютера, на котором установлены все компоненты программы. Ansible извлекает данные с удалённых машин, выполняет команды и копирует файлы по обычным каналам SSH. Потому для корректной работы системы Ansible не требуется дополнительного программного обеспечения на клиентах. Любой сервер с открытым SSH-портом можно добавить в систему Ansible.
Ansible применяет модульный подход, благодаря чему система легко расширяется и может использовать функциональные возможности основной системы для решения конкретных сценариев. Модули могут быть написаны на любом языке и взаимодействовать в формате JSON.
Конфигурационные файлы в основном записываются в формате YAML. Ansible может взаимодействовать с клиентами через инструменты командной строки или с помощью сценариев (которые также называются Playbooks).
Данное руководство поможет установить Ansible на сервер CentOS 7 и разобраться в базовых настройках.
Требования
- Сервер CentOS 7 (инструкции по начальной настройке можно найти здесь).
- Пользователь с доступом к sudo.
1: Установка Ansible
Установите пакет Ansible на машину, которая будет использоваться для централизованного управления.
Используйте для установки репозиторий EPEL. Чтобы добавить EPEL в CentOS 7, введите:
sudo yum install epel-release
Затем установите Ansible:
sudo yum install ansible
2: Настройка хостов Ansible
Ansible отслеживает все серверы, указанные в файле hosts. Чтобы система Ansible могла взаимодействовать с остальными машинами, нужно отредактировать этот файл.
Откройте его в текстовом редакторе:
sudo vi /etc/ansible/hosts
В файле хранится множество настроек и примеров конфигурации. Все они закомментированы. Не стоит удалять из файла примеры конфигураций, поскольку они могут пригодиться в дальнейшей работе.
Файл hosts довольно гибкий. В данном случае используйте такой синтаксис:
[group_name] alias ansible_ssh_host=your_server_ip
Тег group_name позволяет ссылаться сразу на несколько серверов; alias задаёт имя сервера.
Предположим, в данной настройке есть три сервера, которые нужно добавить в Ansible. Ansible взаимодействует с серверами по SSH. Чтобы получить доступ к этим серверам с сервера Ansible, введите:
При этом система не должна запрашивать паролей. Потому нужно настроить аутентификацию на основе SSH-ключей.
Предположим, серверы называются host1, host2 и host3 и имеют следующие IP-адреса: 192.0.2.1, 192.0.2.2 и 192.0.2.3 соответственно. Группа будет называться servers.
Чтобы настроить управление этими серверами, нужно добавить в файл такие настройки:
[servers] host1 ansible_ssh_host=192.0.2.1
host2 ansible_ssh_host=192.0.2.2
host3 ansible_ssh_host=192.0.2.3
Хосты можно делить на несколько групп, каждая из которых будет использовать разные параметры настроек.
По умолчанию Ansible пытается подключиться к удалённым хостам как текущий пользователь системы. Если такого пользователя на удалённых хостах не существует, Ansible вернёт ошибку:
host1 | UNREACHABLE! => "changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
>
Настройте Ansible для подключения к группе servers с помощью пользователя demo. Создайте в структуре Ansible каталог group_vars:
sudo mkdir /etc/ansible/group_vars
В нем нужно создать YAML-файлы для каждой группы хостов.
sudo nano /etc/ansible/group_vars/servers
Добавьте в файл такой код:
Сохраните и закройте файл. Теперь Ansible будет подключаться к группе servers как пользователь demo.
В файле /etc/ansible/group_vars/all можно указать параметры конфигурации для каждого сервера независимо от группы. Индивидуальные настройки хостов можно поместить в каталог /etc/ansible/host_vars.
3: Простые команды Ansible
Теперь хосты настроены и готовы к работе. Попробуйте запустить первую команду, например, ping
ansible -m ping all
host1 | SUCCESS => "changed": false,
"ping": "pong"
>
host3 | SUCCESS => "changed": false,
"ping": "pong"
>
host2 | SUCCESS => "changed": false,
"ping": "pong"
>
Этот базовый тест позволяет убедиться в том, что Ansible взаимодействует со всеми хостами.
Параметры команды -m ping указывают, что система Ansible должна использовать модуль ping. Эти команды можно запускать на удалённых хостах. Модуль ping в большинстве случаев работает как обычная утилита Linux, но в системе Ansible он проверяет взаимодействие между серверами.
Параметр all значит «все хосты». Вместо него можно задать группу:
ansible -m ping servers
Также можно задать отдельный хост:
ansible -m ping host1
или несколько хостов (разделите их с помощью двоеточий).
ansible -m ping host1:host2
Модуль shell позволяет отправлять команды на удалённый хост и получать вывод. К примеру, чтобы узнать уровень использования памяти на машине host1, нужно ввести. Чтобы задать аргумент, используется флаг –a:
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 – использования сценариев Playbooks. Информацию об этом можно найти в таких статьях:
Мы рассмотрим простую устаноку Ansible на Linux. Инструкция подойдет для Ubuntu, а также CentOS версий 8 и 7.
Установка
Установка для Ubuntu и CentOS выполняется, немного, по-разному. Рассмотрим оба варианта.
Ubuntu
apt-get install ansible
CentOS
По умолчанию Ansible нет в репозитории CentOS — устанавливаем EPEL:
yum install epel-release
После устанавливаем сам сервер управления:
yum install ansible
* система автоматически обновит список пакетов с учетом нового репозитория и начнет установку Ansible. Если появится запрос на подтверждение, отвечаем Y.
Начальная настройка и тестовый запуск Ansible
Откроем на редактирование файл с серверами, которыми хотим управлять:
и приведем его к следующему виду:
[test_servers]
192.168.1.100
192.168.1.101
* в данном примере создана группа серверов test_servers, в которую добавлены два сервера с IP-адресами 192.168.1.100 и 192.168.1.101.
Открываем конфигурационный файл ansible:
Снимаем комментарий с опции host_key_checking, приведя ее к виду:
* данная настройка позволит нашему серверу управления автоматически принимать ssh fingerprint, избавляя нас от необходимости постоянно вводить yes, когда мы впервые конфигурируем новый сервер.
Также в секцию defaults добавим:
[defaults]
.
interpreter_python = auto_silent
* данная опция указывает, чтобы ansible автоматически искал python на целевом хосте без показа предупреждений.
Теперь выполним проверку доступности добавленных серверов:
ansible -m ping test_servers -u root -kK
* данная команда проверит доступность по сети двух серверов из группы test_servers от учетной записи root.
Будет запрошен пароль от учетной записи (в нашем случае, root). После будет запрошен пароль суперпользователя на серверах.
На экране должно появиться, примерно, следующее:
Наш сервер управления готов к работе.
Если не заработало
Если на экране появится ошибка, введите с сервера ansible следующую команду:
* в данном случае, мы пытаемся подключиться к серверу 192.168.1.100 по SSH от пользователя root.
Если подключиться к серверу 192.168.1.100 вышеописанной командой не удалось, возможно введен неправильный пароль или доступ по SSH от root запрещен. В этом случае, создайте служебную учетную запись на сервере 192.168.1.100 и используйте ее для подключения по SSH. Например, на удаленном сервере вводим:
* в даном примере мы создали учетную запись ansible и задали ей пароль.
Теперь вводим нашу команду для проверки:
ansible -m ping test_servers -u ansible -kK
* обратите внимание, что мы выполняем теперь запрос от пользователя ansible.
Установка Ansible в CentOS/RedHat
Чтобы установить ansible для начала, стоит подключить репозиторий EPEL, вот статья как это сделать:
После чего, обновим ОС:
Устанавливаем ansible из пакета:
Установка Ansible в Fedora
После чего, обновим ОС:
Устанавливаем ansible из пакета:
Или можно установить ansible как описывалось для Centos.
Установка Ansible в Debian/Ubuntu
Для Ubuntu 14.04 LTS
Для установки, на управляющем сервере введите:
Здесь мы будем использовать официальный Ansible PPA репозиторий, по этому, добавляем его:
И собственно, выполняем установку:
Установка Ansible на Mac OS X
Нашел пакет ansible в репозитории homebrew, попробовал установить:
Установку можно выполнить и через python:
Чтобы обновить, используйте:
Вы можете проверить, если у вас уже есть инструменты для разработчиков, выполнив:
Если инструменты не установлены, вы увидите этот вывод:
Установка ansible через GIT
Так же, вы можете установить ансибл из github.
Клонируем ansible с github-а:
Проверяем, загрузились ли модули:
Установить некоторые необходимые модули:
Собираем и устанавливаем:
Установим environment для ансибл:
Вы можете убедиться, что вы используете альтернативный путь к ансибл с помощью команды:
Проверка версии ansible
Проверяем версию ansible:
Как работает ansible?
Настройка Ansible в Unix/Linux
Сам конфигурационный файл описывается в формате INI. Так же, имеется возможность переопределения части конфигурации( можно даже всего конфига) в параметрах playbook или в переменных окружения.
При выполнении команд, Ansible выполняет проверку и ищет наличия файла с конфигурациями в следующих расположениях:
Параметр ANSIBLE_CONFIG проверяется переменная окружения, который может быть указывать на файл конфигурации.
Настройка через переменные окружения
Много опций, можно задать с помощью переменного окружения, для этого стоит использовать префикс ANSIBLE_ перед названием самого параметра с конфигурацией (большими буквами). Например:
После чего переменная ANSIBLE_SUDO_USER может быть использована в playbook.
Настройка в ansible.cfg
Самих параметров в Ansible конфигурации много, но основные я перечислю:
- hostfile: Данная опция указывает на путь к inventory file. В нем хранится список ваших хостов, к которым Ansible сможет выполнить подключение.
Например: hostfile = /etc/ansible/hosts - library: Путь к папке. В ней сохранены все модули Ansible.
Например: library = /usr/share/ansible - forks: Задается количество процессов, которые может породить Ansible. По-умолчанию параметр установлен в 5.
Например: forks = 5 - sudo_user: Пользователь который будет использоватся по умолчанию и от которого Ansible собственно будет выполнять запуск команд на удаленных нодах.
Например: sudo_user = root - remote_port: Порт для соединения по SSH к нодам (по умолчанию использует стандартный 22-й порт).
Например: remote_port = 22 - host_key_checking: Данная опция дает возможность выключить проверку SSH–ключа на хосте, но по-умолчанию даная проверка включена.
Например: host_key_checking = False - timeout: Данная опция задает таймаут ( время попытки подключения по SSH).
Например: timeout = 60 - log_path: Путь для сохранения лог-файлов. По-умолчанию Ansible не сохранит их вообще.
Например: log_path = /var/log/ansible.log
Пишем первый файл конфигурации Ansible
Сейчас я создам первый конфигурационный файл для Ansible. Для этого нужно выполнить подключение по SSH к серверу где установлен Ansible. Я создам папку для всех моих проектов и после чего, перейду в нее:
Также создаем директорию для сохранения всех модулей для Ansible и так же, директорию для сохранения всех логов (куда же без них):
Подошло время к созданию файл ansible.cfg:
В него прописываем:
Указываем обслуживаемые сервера в host inventory
Как я описывал раньше, данный файл, служит для внесения IP адресов всех имеющихся нод ( те, которые будут обслуживаться) и так же, сгруппирую их. Для этого создаем файл inventory:
И добавляем IP всех удаленных хостов:
Возьму для примера, один сервер на локальной машине с 192.168.1.216.
Генерация ключа для ansible
Как я говорил ранее, ansible использует подключение SSH по ключу (для доступа к настраиваемым серверам), по этому, нужно сгенерировать его:
Или более расширенный вариант:
Заблокирую доступ к SSH каталогу, что только вы cмогли читать или писать в данную папку:
Нужно изменить разрешения, чтобы сохранить этоти файлы в безопасности:
Создаем простой ключ, все пропускаем (нажимаем enter на все вопросы). После того как ключ сгенерировали, нужно его передать на все имеющийся ноды, для этого есть команда:
PS: И так для каждой управляемой ноды!
Выставим правильные права:
Чтобы проверить работает ли все хорошо, можно подключится на сервер по SSH и если не спросит пароль, то все работает хорошо ( можно и выполнить ПИНГ на удаленный хост с сервера ансибл).
Можно попинговать обслуживаемые сервера:
Можно пингануть и проверить все сервера:
Можно так же, выполнить пинг по группированной группе:
Можно бы также указать индивидуальный хост:
We can specify multiple hosts by separating them with colons:
Проверка аптайма на серверах:
Проверить hostname и архитектуру на всех нодах:
Если нам нужен выход в файл, то можно и это сделать:
Управление ansible конфигурациями
Работаем с playbook-ами
На playbook-ах основан собственно весь ansible, так как они служат ( содержат) для выполнения разных задач. Каждая написанная задача внутри самого Ansible использует кусок кода-модуля. Плейбуки, используют формат YAML, но собственно, любые другие ваши модули могут быть написаны на любом языке программирования.
YAML
Каждый плейбук пишется на языке YAML и для ансибл, почти каждый YAML файл начинается с некоторого списка, а этот элемент данного списка — список пар «ключ-значение»(иногда зовут словарем).
Словарь представлен в виде «ключ:» (двоеточие и пробел) «значение»:
При необходимости словари могут быть представлены в сокращенной форме:
Можно указать логические значение (истина/ложь) так:
Целиком наш пример YAML–файла будет выглядеть так:
Этого достаточно для начала написания playbooks.
Пишем наш первый playbook
Playbooks может состоять из списка обслуживаемых серверов, переменных пользователя, задач, обработчиков (хендлеров) и т.д. Большинство настроек конфигурации можно переопределить в playbook. Каждый playbook состоит из одного или более действия (игры) в списке.
Цель игры — связать группу хостов с предопределенными ролями, представленными как вызов задач Ansible.
В качестве примера давайте рассмотрим процесс установки nginx.
Создадим директорию, где будут хранится playbooks:
Создадим файл setup_nginx.yml в директории playbooks:
со следующим содержанием:
Давайте рассмотрим содержимое:
Команды
playbook для ansible
Выполнение плейбука с названием test_job.yml для определенного хоста или группы хостов (прописано в файле):
Можно задавать так званые метки для некоторых задач и потом выполнять их по этим заданным меткам. Можно сделать задачу чтобы она выполнялась в любых условиях, независимо от меток. Это может быть сделано путем добавления:
Примеры
Теперь, если хотите скопирывать ТОЛЬКО MY_FILE_HERE_1, выполните:
Если хотите наоборот, скопировать все, НО КРОМЕ MY_FILE_HERE_1, запустите:
Пример хэш-цикла в ансибль:
Копируем файл на удаленный сервер:
Мы же создадим чистую роль:
PS: У меня запускается с текущей директории ( где находится проект с ансиблом).
2 thoughts on “ Установка и настройка Ansible в Unix/Linux ”
Приветствую тебя. Сперва хочу поблагодарить тебя за проделанный труд. От души! Ну а теперь к делу. Скажи пожалуйста, как установить определенную версия ansible? Возможно ли это? Или всегда будет устанавливаться последняя? И еще, может ли быть какое-либо противоречие, если например писал playbook в одной версии, а пытаешься выполнить в другой?
Спасибо за статью! Но для чайников можно было подробней расписать использование утилиты ssh-copy-id. Как минимум то, что при ее использовании надо перейти в каталог .ssh затем уже ее использовать с опцией -i [ ssh-copy-id -i *.pub root@root@ip_адрес_настраиваемого_сервера ]
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Ansible — бесплатное ПО для конфигурирования и управления компьютерами, сочетает в себе развертывание многоузлового программного обеспечения, выполнения различных задач и управление конфигурациями. Он управляет нодами (которые должны иметь поддержку Python 2.4 или более поздней версии) через SSH . Модули работают над JSON и стандартный вывод может быть написан на любом языке программирования. Система использует YAML для написании функций (задач выполнения). Главная цель Ansible — это с одного (можно сделать и пару) серверов с ансиблом можно было управлять всеми другими нодами. С такого сервера можно отправлять различные команды (набор некоторых инструкций, так называемых playbooks) на любую из подключенных нод на сервере. Выполнение команд выполняется путем подключения сервера к ноде через публичный ключ по SSH .
В файле «Host inventory» содержится информация о обслуживаемых нодах ( где собственно все команды будут исполнены). Конфигурационный файл с Ansible может быть использован для настройки переменного окружения.
В ansible, используются playbooks — это набор инструкций и они состоят из задач. Плейбуки описываются с помощью функциональности модуля ядра самого Ansible ( так же, могут использовать сторонние модули). Playbooks — последовательность или набор команд в которых так же, может использоваться различные проверки: если условие не выполняется, то определенные команды могут пропускаться. Данные кукбуки, описываются в формате YAML .
Установка Ansible в CentOS/RedHat
Чтобы установить ansible для начала, стоит подключить репозиторий EPEL
Устанавливаем ansible из пакета:
yum -y install ansible
Проверка версии ansible
Проверяем версию ansible:
Настройка Ansible в Unix/Linux
Сам конфигурационный файл описывается в формате INI . Так же, имеется возможность переопределения части конфигурации( можно даже всего конфига) в параметрах playbook или в переменных окружения.
При выполнении команд, Ansible выполняет проверку и ищет наличия файла с конфигурациями в следующих расположениях:
Параметр ANSIBLE_CONFIG проверяется переменная окружения, который может быть указывать на файл конфигурации.
Настройка через переменные окружения
Много опций, можно задать с помощью переменного окружения, для этого стоит использовать префикс ANSIBLE_ перед названием самого параметра с конфигурацией (большими буквами). Например:
export ANSIBLE_SUDO_USER =root
После чего переменная ANSIBLE_SUDO_USER может быть использована в playbook.
Настройка в ansible.cfg
Самих параметров в Ansible конфигурации много, но основные я перечислю:
- hostfile: Данная опция указывает на путь к inventory file. В нем хранится список ваших хостов, к которым Ansible сможет выполнить подключение.
Например: hostfile = /etc/ansible/hosts - library: Путь к папке. В ней сохранены все модули Ansible.
Например: library = /usr/share/ansible - forks: Задается количество процессов, которые может породить Ansible. По-умолчанию параметр установлен в 5.
Например: forks = 5 - sudo_user: Пользователь который будет использоватся по умолчанию и от которого Ansible собственно будет выполнять запуск команд на удаленных нодах.
Например: sudo_user = root - remote_port: Порт для соединения по SSH к нодам (по умолчанию использует стандартный 22-й порт).
Например: remote_port = 22 - host_key_checking: Данная опция дает возможность выключить проверку SSH –ключа на хосте, но по-умолчанию даная проверка включена.
Например: host_key_checking = False - timeout: Данная опция задает таймаут ( время попытки подключения по SSH ).
Например: timeout = 60 - log_path: Путь для сохранения лог-файлов. По-умолчанию Ansible не сохранит их вообще.
Например: log_path = /var/log/ansible.log
Первый файл конфигурации Ansible
Для этого нужно выполнить подключение по SSH к серверу где установлен Ansible. Я создам папку для всех моих проектов и после чего, перейду в нее
Также создаем директорию для сохранения всех модулей для Ansible и так же, директорию для сохранения всех логов
Создадим конфиг файл
nano
В него прописываем:
[defaults]
become_user = root
log_path =
/ansible/logs/ansible.log
inventory = /etc/ansible/hosts
В новой версии ansible поля «hostfile» нет, за место его, есть другое:
Указываем обслуживаемые сервера в host inventory
Как я описывал раньше, данный файл, служит для внесения IP адресов всех имеющихся нод ( те, которые будут обслуживаться) и так же, сгруппирую их, добавляем в /etc/ansible/hosts
[test1]
192.168.1.16
Генерация ключа для ansible
ansible использует подключение SSH по ключу (для доступа к настраиваемым серверам), по этому, нужно сгенерировать его:
ssh-keygen -t rsa -b 4096 -C "admin@centos"
Создаем простой ключ, все пропускаем (нажимаем enter на все вопросы). После того как ключ сгенерировали, нужно его передать на все имеющийся ноды, для этого есть команда:
ssh-copy-id root@ip_адрес_настраиваемого_сервера
у меня это:
ssh-copy-id [email protected]
И так для каждой управляемой ноды!
Можно попинговать обслуживаемые сервера:
ansible test1 -m ping
192.168.1.16 | SUCCESS => "changed": false,
"ping": "pong"
>
Читайте также: