Тариф успешно добавлен в корзину
В корзину

Ansible: что это такое и как его использовать

Cистемные администраторы и DevOps-инженеры управляют десятками и даже сотнями серверов. Ежедневно приходится разворачивать на них новые сервисы, обновлять ПО и следить за безопасностью. Ручное решение этих задач на каждой машине отнимает время и может привести к ошибкам. 

Для автоматизации рутины разработали специальное ПО, которое помогает упростить процесс настройки и управления. Один из таких инструментов — система управления конфигурациями Ansible. В статье разберёмся, что такое Ansible, как он устроен и для каких задач используется.

Что такое Ansible

Это инструмент автоматизации с открытым исходным кодом. Он позволяет выполнять действия на множестве серверов одновременно. С помощью платформы можно вносить на целевые хосты любые изменения: устанавливать ПО, управлять пользователями, делать бэкапы и многое другое. 

Пример некоторых задач, которые решает Ansible:

  • Управление конфигурацией. Например, нужно установить nginx на 10 серверов, создать пользователя и скопировать конфигурационный файл. С Ansible не придётся разворачивать инфраструктуру вручную на каждой машине: достаточно один раз написать сценарий (внести изменения в Playbook), который выполнит все шаги автоматически.
  • Установка приложений. Ansible автоматизирует процесс развёртывания нового ПО на серверах. Например, компания выпустила новую версию: нужно остановить старую версию, скачать новый код из системы контроля Git, установить зависимости и запустить приложение. С помощью Ansible можно разворачивать новые версии приложений на всех серверах одновременно или по очереди.
  • Сбор информации о хосте. ПО можно использовать для автоматического сбора данных об устройстве: версии ОС, оперативной памяти, диске, процессоре и других компонентах системы.

В отличие от многих систем управления конфигурациями, например, Puppet и Chef, Ansible работает без агентов, используя для установки соединения и управления целевыми хостами стандартный, криптографически защищённый протокол SSH. Такой подход минимизирует затраты на внедрение, снижает нагрузку на систему и исключает уязвимости, связанные с работающим сторонним ПО на сервере.

Как работает Ansible

Архитектура программы состоит из четырёх ключевых компонентов:

  1. Control Node (Управляющий узел). Сервер, на котором установлен Ansible. Управляющим узлом может быть домашний или рабочий ноутбук, выделенный или облачный сервер с ОС Linux или UNIX. На ОС Windows возможна установка через компонент WSL.
  2. Inventory (Файл инвентаризации). В нём указывают список  управляемых хостов.
  3. Playbook. Содержит упорядоченный список задач, которые необходимо выполнить на группе серверов из инвентарного файла. Пишется на языке разметки YAML.
  4. Modules (Модули). Код для решения разных задач. Например, компонент copy используется для копирования файла, user — для работы с пользователями, service — со службами. Существует множество компонентов, работающих с облачными провайдерами (AWS, GCP, Azure), Docker, базами данных, сетевым оборудованием и т. д.

Ansible работает по следующему принципу. Пользователь создаёт сценарии на языке YAML и описывает, какие действия нужно выполнить на серверах. При запуске Ansible подключается к целевым хостам по SSH-протоколу и выполняет модули — последовательно решает задачи. Каждый модуль возвращает результат в формате JSON, а Ansible анализирует эти данные и отображает ход выполнения. 

Ключевая особенность платформы — принцип идемпотентности: если система соответствует нужной конфигурации, изменения не вносятся. Такой принцип работы делает процессы предсказуемыми и безопасными даже при многократном запуске одного сценария.

Ansible отслеживает результат выполнения каждой задачи и сообщает о статусе: было ли действие успешным, привело ли к изменениям в системе или завершилось ошибкой.

Установка Ansible

Рассмотрим процесс установки на ОС Ubuntu 24.04, Debian 13, CentOS 9 и macOS.

Установка на Ubuntu 24.04

  1. Для работы понадобится интерпретатор Python. Сначала проверьте его предустановку. Для этого выведите его версию с помощью команды:  

    python3 --version 
  2. Если команда вернула версию, Python установлен. Сообщение об ошибке Command 'python3' not found означает, что его нужно установить. Для этого установите пакет software-properties-common:

    sudo apt update && sudo apt -y install python3 software-properties-common
  3. Установите Ansible с помощью официального репозитория от разработчиков. Для этого добавьте репозиторий в систему: 

    sudo add-apt-repository --yes --update ppa:ansible/ansible
  4. Установите пакет Ansible:

    sudo apt -y install ansible
  5. Проверьте корректность установки с помощью вывода версии Ansible:

    ansible --version

Установка на Debian 13

  1. Проверьте, установлен ли интерпретатор Python в системе: 

    python3 --version

    При необходимости установите его с помощью команды:

    sudo apt update && sudo apt -y install python3
  2. Установите Ansible из официального репозитория Debian:

    sudo apt -y install ansible
  3. Проверьте корректность установки с помощью вывода версии Ansible:

    ansible --version

Установка на CentOS 9

  1. Проверьте, установлен ли Python в системе: 

    python3 --version

    При его отсутствии установите интерпретатор с помощью команд: 

    sudo dnf -y install python3
  2. По умолчанию Ansible отсутствует в официальном репозитории CentOS. Но он есть в пакетном репозитории epel. Установите пакет epel-release:

    sudo dnf -y install epel-release
  3. Установите Ansible:

    sudo dnf -y install ansible
  4. Проверьте корректность установки с помощью вывода версии Ansible:

    ansible --version

Установка на macOS

Установить Ansible на операционной системе macOS можно только с помощью пакетного менеджера Homebrew.

  1. Установите Homebrew, выполнив команду в терминале:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. Установите Ansible с помощью команды:

    brew install ansible
  3. Проверьте корректность установки с помощью вывода версии Ansible:

    ansible --version

Настройка Ansible

  1. Чтобы Ansible смог подключаться к управляемым серверам, сгенерируйте SSH-ключ:

    ssh-keygen
  1. Скопируйте публичный ключ на управляемый сервер:

    ssh-copy-id root@5.129.252.55
  1. Откройте основной конфигурационный файл — ansible.cfg с помощью любого текстового редактора, например, nano. Он находится в директории /etc/ansible.

    nano /etc/ansible/ansible.cfg
  2. Настройте его конфигурацию: 

    [defaults]
    inventory = /etc/ansible/hosts
    remote_user = root
    private_key_file = ~/.ssh/id_ed25519
    host_key_checking = False
    pipelining = True
    deprecation_warnings = True

    Параметры конфигурации:

    • inventory = /etc/ansible/hosts

      Путь к файлу инвентаризации. Содержит адреса серверов для выполнения задач Ansible. В примере Ansible будет искать хосты в файле /etc/ansible/hosts.

    • remote_user = root

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

    • private_key_file = ~/.ssh/id_ed25519

      Путь к файлу приватного SSH-ключа. Ansible использует этот ключ для аутентификации на управляемых хостах.

    • host_key_checking = False

      Отключает проверку SSH-хост-ключа, что позволяет автоматически подключаться к любым серверам без подтверждения их подлинности. Это критически важно для автоматизации в динамических средах (например, в CI/CD), где постоянно создаются новые инстансы.

    • pipelining = True

      Включает конвейеризацию SSH. Вместо того чтобы копировать Python-скрипт на удалённый хост, запускать его и удалять, Ansible передаёт скрипт через stdin в открытую SSH-сессию. Опция предназначена для увеличения производительности.

    • deprecation_warnings = True

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

  3. Настройте файл инвентаризации. Для этого откройте на редактирование файл hosts:

    nano /etc/ansible/hosts

    Укажите IP-адрес сервера, сохраните изменения и выйдите из файла.

  4. Проверьте доступность хоста с помощью встроенного модуля ping в Ansible:

    ansible all -m ping

    Если подключение по SSH настроено корректно, то Ansible вернёт успешный ответ, как на скриншоте.

Что такое Playbook в Ansible

Playbook — это файл, где пользователь прописывает инструкцию, что и как нужно сделать на сервере. Ключевые элементы плейбука:

Tasks (Задачи). Задача вызывает модуль и выполняет определённое действие. Пример задачи, которая устанавливает nginx, используя модуль apt:

 tasks:
  - name: Install Nginx with apt
    apt:                            
      name: nginx
      state: present

Variables (Переменные). Это контейнеры для хранения значений различных типов данных. Переменные можно использовать повторно и адаптировать под разные окружения, например, разработку, тестирование, продакшен.

Переменные решают следующие задачи:

  • Параметризация. Пользователь меняет конкретные значения в плейбуке на ссылки к переменным. Это позволяет запустить один и тот же плейбук с разными данными без изменения его исходного кода.
  • Разделение кода и конфигурации. Критически важные данные (пароли, IP-адреса, имена конкретных серверов) выносятся из плейбука в отдельные файлы. Это повышает безопасность и упрощает управление конфигурацией.

Объявлять переменные можно не только в теле плейбука, но и в инвентарном файле (inventory), в файлах переменных (например, в форматах YAML или JSON), а также напрямую через аргументы командной строки во время запуска плейбука. 

В качестве примера рассмотрим переменную с именем http_port, которой присвоено целочисленное значение 80, определяющее номер сетевого порта.

vars:
  http_port: 80
tasks:
  - name: Copy customized index.html
    copy:
      content: "Welcome to server on port {{ http_port }}"
      dest: /var/www/html/index.html

Handlers (Обработчики). Это специальные задачи, которые запускаются только по уведомлению от других задач. Чаще всего используются для перезагрузки служб после изменения их конфигурации. Пример — команда handler, которая перезапускает службу nginx.

tasks:
  - name: Copy Nginx config
    template:
      src: nginx.conf.j2
      dest: /etc/nginx/nginx.conf
    notify: Restart Nginx

handlers:
  - name: Restart Nginx
    service:
      name: nginx
      state: restarted

Популярные модули

Рассмотрим примеры популярных модулей Ansible.

copy
Копирует файлы или директории с управляющего узла на серверы.

- name: Copy a file
  copy:
    src: /root/configs/index.html
    dest: /var/www/html/index.html
    owner: root
    mode: '0644

apt/dnf

Управляет пакетами в Debian-based системах (Ubuntu, Linux Mint) и RHEL (CentOS, Fedora).

- name: Install the latest version of tree
  apt:
    name: tree
    state: latest

- name: Install the latest version of htop
  dnf:
    name: htop
    state: latest

service
Управляет состоянием служб (start, stop, restart, enable).

- name: Ensure Nginx is running and enabled
  service:
    name: nginx
    state: started
    enabled: yes

Запускаем свой первый плейбук Ansible

Для наглядной работы Ansible создадим и запустим плейбук, который выполнит следующие действия:

  • установит пакеты: net-tools, tree, mc, htop;
  • создаст нового пользователя с именем new-user1;
  • создаст текстовый файл с именем ansible-file-create.txt и содержимым «Hello from Ansible!».

Пошаговая последовательность действий:

  1. Создайте директорию, где будут храниться файлы плейбука, и перейдите в неё:

    mkdir first-playbook && cd first-playbook
  2. Создайте основной файл плейбука:

    nano playbook-tasks.yml
  3. Введите конфигурацию:

    ---
    - name: Установка пакетов и настройка системы
      hosts: all
      become: yes
      tasks:
        - name: Установка пакетов
          package:
            name:
              - net-tools
              - tree
              - mc
              - htop
            state: present
          tags: packages
    
        - name: Создание нового пользователя new-user1
          user:
            name: new-user1
            state: present
            create_home: yes
            shell: /bin/bash
          tags: user
    
        - name: Создание текстового файла с содержимым
          copy:
            content: "Hello from Ansible!"
            dest: /home/new-user1/ansible-file-create.txt
            owner: new-user1
            group: new-user1
            mode: '0644'
          tags: file
  4.  При запуске плейбука  укажите файл инвентаризации из директории /etc/ansible, который мы использовали ранее в разделе «Установка и настройка Ansible». Итоговая команда для запуска:

     ansible-playbook -i /etc/ansible/hosts playbook-tasks.yml
  1. Когда плейбук  завершит свою работу, можно проверить результаты:
ansible all -i /etc/ansible/hosts -a "dpkg -l net-tools tree mc htop"
ansible all -i  /etc/ansible/hosts -a "id new-user1"
ansible all -i /etc/ansible/hosts -a "cat /home/new-user1/ansible-file-create.txt"

Коротко об Ansible: что это и как работает

Ansible — это инструмент автоматизации с открытым исходным кодом, который позволяет выполнять действия на множестве серверов одновременно.

Основу системы составляют три компонента: инвентарь со списком серверов, понятные YAML-сценарии (плейбуки) и богатая коллекция модулей. Ansible не использует дополнительные агенты на серверах, а подключается к ним напрямую по протоколу SSH. Вместо ручной установки специального ПО на управляемые машины Ansible отправляет на них небольшие команды (модули), которые выполняют нужные действия. 

Возможно, вам будет интересно

Было интересно?

Назад к списку
Скидка новым клиентам
Закажите сервер сегодня и получите скидку на первый месяц аренды!
Наш сайт использует cookies Вы можете отключить их в настройках браузера, но это может ограничить функционал. Оставаясь на сайте, вы соглашаетесь с использованием cookies.