В современном мире автоматизация — важная часть стратегии любой организации. С распространением облачных вычислений, DevOps, непрерывной интеграции и доставки спрос на инструменты автоматизации вырос в геометрической прогрессии. Ansible — инструмент автоматизации с открытым исходным кодом, который стал одним из самых популярных решений для автоматизации управления инфраструктурой, развертывания приложений и управления конфигурацией.
В этом посте мы рассмотрим, как Ansible может помочь вам автоматизировать всё в вашей инфраструктуре.
Что такое Аnsible?
Аnsible — это инструмент автоматизации с открытым исходным кодом, который предоставляет простой и мощный способ автоматизации IT-задач. Ansible был разработан Red Hat и теперь является частью IBM. Он позволяет пользователям автоматизировать такие задачи, как управление конфигурацией, развертывание приложений и оркестрацию на нескольких серверах и устройствах. Это делает его незаменимым инструментом для команд DevOps.
Ansible использует декларативный язык YAML для определения задач, что упрощает чтение и понимание. Он безагентный, то есть не требует установки какого-либо программного обеспечения на целевых серверах или устройствах. Вместо этого он использует SSH (Secure Shell) или WinRM (удаленное управление Windows) для подключения к целевым устройствам и выполнения задач.
Ansible позволяет пользователям автоматизировать практически любой процесс: от простых действий, таких как создание учетных записей пользователей, до крупных многоуровневых развертываний приложений. Ansible предоставляет удобный интерфейс для разработки, обслуживания и выполнения процессов автоматизации благодаря простому и понятному синтаксису. Это делает его идеальным инструментом для IT-специалистов, команд DevOps и системных администраторов, которые хотят оптимизировать свои рабочие процессы и сэкономить время и силы на управлении своей инфраструктурой.
Архитектура Ansible
Из рисунка видно, что архитектура Ansible включает: control node (узел управления), playbook (плейбук), inventory (файл инвентаризации), SSH для подключения к управляемым/целевым узлам.
Узел управления — это место, где установлен Ansible и откуда выполняются задачи автоматизации. Управляемые/целевые узлы — это серверы, которыми управляет Ansible.
Чтобы начать использовать Ansible, необходимо сначала установить Ansible на управляющем узле. После того как вы установили Ansible, вам нужно будет зарегистрировать целевые/управляемые хосты в файле инвентаризации Ansible. Файл инвентаризации — это файл, содержащий список всех хостов, которыми вы хотите управлять с помощью Ansible, а также их IP-адреса или имена хостов. После этого вы можете создавать плейбуки. Они представляют собой YAML-файлы, содержащие ряд задач, которые должны выполняться на управляемых узлах. Эти задачи могут включать в себя широкий спектр операций, таких как установка программного обеспечения, настройка служб и управление сетевыми параметрами.
Когда playbook запускается с управляющего узла, Ansible устанавливает безопасный канал связи с управляемыми узлами с помощью SSH. Затем Ansible выполняет задачи, определенные в плейбуке на управляемых узлах.
Компоненты Ansible Playbook
Name. Имя используется для идентификации плейбука.
Hosts. Хосты из файла инвентаризации. Это может быть список хостов и их атрибутов. Файл инвентаризации обычно располагается по адресу /etc/ansible/hosts, но может располагаться в любом месте узла управления и называться как угодно.
Become. Здесь указывается пользователь или метод повышения привилегий для выполнения задачи.
Variables. Переменные используются для определения значений, которые можно повторно использовать в плейбуке. Вот несколько примеров определения переменных:
---
- name: Example playbook
hosts: all
vars:
my_var: "Hello, World!"
tasks:
- name: Print message
debug:
msg: "{{ my_var }}"
Tasks. Единица работы, выполняемая на целевом хосте. Задачи определяются в плейбуке и могут включать в себя различные действия, такие как установка пакетов, изменение файлов конфигурации или запуск и остановка служб.
Handlers. Обработчики — это задачи, которые выполняются только при соблюдении определенных условий, например, после внесения изменений. Они часто используются для перезапуска служб или перезагрузки файлов конфигурации после внесения изменений. Обработчики определены в плейбуке и запускаются директивой «уведомить» в задаче. Обработчики определяются так же, как и задачи, но с другим именем. Вот пример:
tasks:
- name: Update web server configuration
template:
src: web.conf.j2
dest: /etc/httpd/conf.d/web.conf
notify: Restart web server
handlers:
- name: Restart web server
service:
name: httpd
state: restarted
In this example, the "template" task updates the web server configuration file and notifies the "Restart web server" handler. The handler task uses the "service" module to restart the web server. If the configuration file was not changed, the handler task will not be executed.
Roles. Роли — это наборы задач и переменных, которые можно повторно использовать в нескольких плейбуках.
Templates. Шаблоны — это файлы, которые можно настроить для каждого хоста во время выполнения плейбука.
Files. Файлы копируются с управляющего узла на целевые хосты во время выполнения плейбука.
Conditional statements. Условные операторы позволяют плейбуку выполнять задачи только при соблюдении определенных условий.
Как установить Ansible
Ansible можно установить в любой операционной системе, но в этом руководстве я покажу, как установить Ansible на CentOS 7.
Убедитесь, что ваша система CentOS 7 обновлена, выполнив команду:
sudo yum update
Затем добавьте репозиторий EPEL (Extra Packages for Enterprise Linux), выполнив команду:
sudo yum install epel-release
Затем установите Ansible, запустив команду:
sudo yum install ansible
После установки Ansible убедитесь, что установка прошла успешно, выполнив команду:
ansible --version
Настройте хосты Ansbile
Отредактируйте конфигурацию хостов с помощью этой команды vi/etc/ansible/hosts
, затем добавьте управляемые IP-серверы в этот файл конфигурации:
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
# - Comments begin with the '#' character
# - Blank lines are ignored
# - Groups of hosts are delimited by [header] elements
# - You can enter hostnames or ip addresses
# - A hostname/ip can be a member of multiple groups
# Ex 1: Ungrouped hosts, specify before any group headers.
## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10
# Ex 2: A collection of hosts belonging to the 'webservers' group
## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110
# If you have multiple hosts following a pattern you can specify
# them like this:
## www[001:006].example.com
# Ex 3: A collection of database servers in the 'dbservers' group
## [dbservers]
##
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56
## 10.25.1.57
# Here's another example of host ranges, this time there are no
# leading 0s:
## db-[99:101]-node.example.com
[servers]
192.1.10.123
192.1.10.124
Настройте аутентификацию на основе ключей SSH
ssh-keygen
Это создаст файл открытого ключа (~/.ssh/id_rsa.pub
) и файл закрытого ключа (~/.ssh/id_rsa
) в вашем домашнем каталоге.
Скопируйте открытый ключ на управляемые узлы.
ssh-copy-id root@192.1.10.123
ssh-copy-id root@192.1.10.124
root
— это имя пользователя на управляемом узле, а 192.1.10.123 и 191.1.10.124 — IP-адрес управляемого узла.
Проверьте SSH-соединение
ssh root@192.1.10.123
ssh root@192.1.10.124
Вы сможете войти в управляемый узел без запроса пароля.
Проверьте, может ли Ansible подключаться к управляемым хостам.
ansible -m ping all
Если все настроено правильно, вы должны увидеть вывод, подобный следующему:
Пример использования Ansible
В целях демонстрации примера использования я покажу вам, как автоматизировать процесс открытия портов брандмауэра 9200 и 5601 для нескольких серверов. В этом сценарии рассматриваемые серверы имеют IP-адреса 192.1.10.123 и 192.1.10.124.
Перейдите в
/etc/ansible/
и создайте playbook с помощью этой командыvi open-port-playbook.yml
и напишите playbook со следующим содержимым:
- name: Configure Firewall
hosts: servers
become: true
tasks:
- name: Allow Elasticsearch port 9200/tcp
firewalld:
port: 9200/tcp
permanent: yes
state: enabled
zone: public
- name: Allow Kibana port 5601/tcp
firewalld:
port: 5601/tcp
permanent: yes
state: enabled
zone: public
- name: Configure Firewall
Эта строка определяет имя плейбука Ansible.hosts: server
Эта строка указывает имя группы инвентаризации Ansible, которая содержит серверы, куда будет выполняться плейбук. Это 192.1.10.123 и 192.1.10.124, мы настроили их в /etc/ansible/hosts.become: true
Эта строка указывает, что Ansible должен повысить привилегии, чтобы стать root-пользователем на целевом сервере, чтобы изменить настройки брандмауэра.tasks:
Этот раздел определяет задачи, которые будет выполнять плейбук.- name: Allow Elasticsearch port 9200/tcp
Эта строка определяет имя первой задачи, которая должна разрешить доступ к порту 9200/tcp.firewalld:
Эта строка указывает модуль Ansible, который будет использоваться для изменения настроек брандмауэра.port: 9200/tcp
Эта строка указывает порт и протокол, которые необходимо открыть.permanent: yes
Эта строка указывает, что правило брандмауэра будет сохраняться после перезагрузки.state: enabled
Эта строка указывает, что правило брандмауэра должно быть включено.zone: public
Эта строка указывает зону брандмауэра, в которой будет добавлено правило.name: Allow Kibana port 5601/tcp
Эта строка определяет имя второй задачи, которая должна разрешить доступ к порту 5601/tcp.firewalld:
Эта строка указывает модуль Ansible, который будет использоваться для изменения настроек брандмауэра.port: 5601/tcp
строка указывает порт и протокол, которые должны быть открыты для Kibana.permanent: yes
Эта строка указывает, что правило брандмауэра для Kibana будет сохраняться при перезагрузке. Если вы хотите временно открыть порты, установитеpermanent: no
.state: enabled
Эта строка указывает, что правило брандмауэра для Kibana должно быть включено.zone: public
Эта строка указывает зону брандмауэра, в которой будет добавлено правило для Kibana.
Сохраните файл и в том же каталоге выполните следующую команду:
ansible-playbook -i hosts open-port-playbook.yml
Где:
ansible-playbook
Это команда Ansible для запуска плейбука.-i hosts
Указывает файл инвентаризации, содержащий целевой сервер (серверы), на котором будет работать этот плейбук 192.1.10.123 и 192.1.10.124.open-port-playbook.yml
Это имя файла плейбука для запуска.
Заключение
Ansible — это мощный инструмент автоматизации с открытым исходным кодом, который позволяет вам управлять несколькими серверами и настраивать их с одной управляющей машины. Он использует простой синтаксис на основе YAML для определения плейбуков, которые автоматизируют широкий спектр задач, включая установку программного обеспечения, настройку служб и управление параметрами сети. С помощью Ansible вы можете сократить число ошибок, совершаемых вручную, повысить эффективность и стандартизировать конфигурацию инфраструктуры во всей организации. Независимо от того, управляете ли вы небольшой или крупной IT-средой, Ansible может помочь вам оптимизировать процессы и повысить производительность. Итак, если вы ищете надежный инструмент автоматизации, который может упростить ваши повседневные операции, определенно стоит рассмотреть Ansible.
Узнать больше про плейбуки и деплой с помощью Ansible можно в Слёрме на курсе «Ansible: Infrastructure as Code». Ближайший старт потока — 30 сентября. Для читателей Хабра – скидка 15% по промокоду ansiblehabr.
Записаться на курс? На нашем сайте.