Автоматизация с помощью Ansible играет ключевую роль в современном мире DevOps философии. С распространением облачных вычислений, DevOps, непрерывной интеграции и доставки спрос на инструменты автоматизации растет в геометрической прогрессии. 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 }}"
YAML- 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.
YAML- Roles. Роли — это наборы задач и переменных, которые можно повторно использовать в нескольких плейбуках.
- Templates. Шаблоны — это файлы, которые можно настроить для каждого хоста во время выполнения плейбука.
- Files. Файлы копируются с управляющего узла на целевые хосты во время выполнения плейбука.
- Conditional statements. Условные операторы позволяют плейбуку выполнять задачи только при соблюдении определенных условий.
Как установить Ansible
Ansible можно установить в любой операционной системе, но в этом руководстве я покажу, как установить Ansible на Ubuntu.
Установка
sudo apt-add-repository ppa:ansible/ansible
sudo apt update
sudo apt install ansible
ZshФайл конфигурации содержит данные о хостах, управляемых Ansible. В нем можно указать от одного до нескольких сотен серверов, группируя их. Файл инвентаризации также используется для установки переменных, действительных только для определенных хостов или групп, применяемых в плейбуках и шаблонах.
Для редактирования инвентаризации Ansible откройте файл /etc/ansible/hosts
через текстовый редактор на контрольном узле Ansible.
sudo nano /etc/ansible/hosts
ZshВ нем содержатся примеры, которые можно использовать при настройке. Пример ниже определяет группу [servers] с тремя серверами (server1, server2, server3). Замените выделенные IP-адреса на адреса ваших хостов.
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
[all:vars]
ansible_python_interpreter=/usr/bin/python3
YAMLПодгруппа all:vars
устанавливает параметр ansible_python_interpreter
для всех хостов в инвентаризации. Этот параметр обеспечивает исполнение /usr/bin/python3
на удаленном сервере вместо /usr/bin/python
(Python 2.7), отсутствующего в современных версиях Ubuntu.
После внесения изменений сохраните файл (CTRL+X, Y, ENTER). Для проверки конфигурации выполните:
ansible-inventory --list -y
ZshУвидите примерно такой вывод с конфигурацией вашей инфраструктуры, определенной в конфигурационном файле:
Output
all:
children:
servers:
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}
YAMLТеперь у вас есть все необходимое для проверки соединения с хостами Ansible.
Настройка аутентификацию на основе ключей SSH
ssh-keygen
ZshЭто создаст файл открытого ключа (~/.ssh/id_rsa.pub
) и файл закрытого ключа (~/.ssh/id_rsa
) в вашем домашнем каталоге.
Скопируйте открытый ключ на управляемые узлы.
ssh-copy-id root@203.0.113.111
ssh-copy-id root@203.0.113.112
Zshroot
— это имя пользователя на управляемом узле, а 192.1.10.123 и 191.1.10.124 — IP-адрес управляемого узла.
Проверьте SSH-соединение
ssh root@192.1.10.123
ssh root@192.1.10.124
ZshВы сможете войти в управляемый узел без запроса пароля.
Проверьте, может ли Ansible подключаться к управляемым хостам.
ansible all -m ping -u root
ZshЕсли все настроено правильно, вы должны увидеть вывод, подобный следующему:
Output
server1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ZshВыполнение Ad-Hoc Команд (По желанию)
После проверки связи между управляющим узлом Ansible и хостами, можно начать выполнение ad-hoc команд и плейбуков на серверах.
Любую команду, которую обычно выполняют на удаленном сервере по SSH, можно выполнить с помощью Ansible. Например, вы можете проверить использование диска на всех серверах:
ansible all -a "df -h" -u root
ZshOutput
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
...
ZshКоманду df -h
можно заменить на любую другую по вашему выбору.
Также можно использовать модули Ansible через ad-hoc команды, как мы делали ранее с модулем ping для тестирования соединения. Например, так можно использовать модуль apt для установки последней версии vim на всех серверах:
ansible all -m apt -a "name=vim state=latest" -u root
ZshТакже можно указывать индивидуальные хосты, а также группы и подгруппы при выполнении команд Ansible. Например, так можно проверить uptime каждого хоста в группе servers:
ansible servers -a "uptime" -u root
ZshМожно указывать несколько хостов, разделяя их двоеточием
ansible server1:server2 -m ping -u root
ZshДля более подробной информации о том, как использовать Ansible, включая выполнение плейбуков для автоматизации настройки сервера, вы можете посмотреть наше Руководство по Ansible.
Пример использования 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
YAMLname: 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
ZshГде:
ansible-playbook
Это команда Ansible для запуска плейбука.-i hosts
Указывает файл инвентаризации, содержащий целевой сервер (серверы), на котором будет работать этот плейбук 192.1.10.123 и 192.1.10.124.open-port-playbook.yml
Это имя файла плейбука для запуска.
Заключение
Ansible — это мощный инструмент автоматизации с открытым исходным кодом, который позволяет вам управлять несколькими серверами и настраивать их с одной управляющей машины. Он использует простой синтаксис на основе YAML для определения плейбуков, которые автоматизируют широкий спектр задач, включая установку программного обеспечения, настройку служб и управление параметрами сети. С помощью Ansible вы можете сократить число ошибок, совершаемых вручную, повысить эффективность и стандартизировать конфигурацию инфраструктуры во всей организации. Независимо от того, управляете ли вы небольшой или крупной IT-средой, Ansible может помочь вам оптимизировать процессы и повысить производительность. Итак, если вы ищете надежный инструмент автоматизации, который может упростить ваши повседневные операции, определенно стоит рассмотреть Ansible.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.