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

В этом посте мы рассмотрим, как Ansible может помочь вам автоматизировать всё в вашей инфраструктуре.

Что такое Аnsible?

Аnsible — это инструмент автоматизации с открытым исходным кодом, который предоставляет простой и мощный способ автоматизации IT-задач. Ansible был разработан Red Hat и теперь является частью IBM. Он позволяет пользователям автоматизировать такие задачи, как управление конфигурацией, развертывание приложений и оркестрацию на нескольких серверах и устройствах. Это делает его незаменимым инструментом для команд DevOps.

Ansible использует декларативный язык YAML для определения задач, что упрощает чтение и понимание. Он безагентный, то есть не требует установки какого-либо программного обеспечения на целевых серверах или устройствах. Вместо этого он использует SSH (Secure Shell) или WinRM (удаленное управление Windows) для подключения к целевым устройствам и выполнения задач.

Ansible позволяет пользователям автоматизировать практически любой процесс: от простых действий, таких как создание учетных записей пользователей, до крупных многоуровневых развертываний приложений. Ansible предоставляет удобный интерфейс для разработки, обслуживания и выполнения процессов автоматизации благодаря простому и понятному синтаксису. Это делает его идеальным инструментом для IT-специалистов, команд DevOps и системных администраторов, которые хотят оптимизировать свои рабочие процессы и сэкономить время и силы на управлении своей инфраструктурой.

Архитектура Ansible

Архитектура Ansible
Архитектура 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». Старт потока — 5 июня.

Записаться на курс ???? на нашем сайте.

Комментарии (7)


  1. Pab10
    30.05.2023 15:39
    +1

    Ну и Galaxy было бы неплохо упомянуть :) Ато это типа как рассказать про GHA и не сказать что экшены можно делать свои и шарить.


    1. alitenicole Автор
      30.05.2023 15:39

      Спасибо за поправку, учтем :)


  1. Yusmit
    30.05.2023 15:39
    +6

    Зачем на Хабре сотая обзорная статья про Ansible?


    1. alitenicole Автор
      30.05.2023 15:39
      +1

      Судя по количеству сохранений, тема все-таки актуальная для некоторых специалистов)
      А что вы бы хотели видеть по Ansible на Хабре?
      Могу с этим пойти к экспертам, чтобы выпустить достойный материал :)


    1. k4ir05
      30.05.2023 15:39

      Очевидно, исключительно для рекламы курса.


  1. Sanes
    30.05.2023 15:39

    Может я чего не знаю. Но вроде нельзя передать hosts через --extra-vars


  1. sanchezzzhak
    30.05.2023 15:39

    Проще использовать Jenkins и без ansible.