Программирование • 05 августа 2024 • 5 мин чтения

Ansible для начинающих: инструкции и команды

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

Что такое Ansible

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

Обычным способом нужно вручную прописывать каждую команду или скрипт и по кругу запускать их на серверах. Когда серверов много, это процесс становится сложным и трудоёмким. C помощью Ansible всю настройку можно прописать в одном конфигурационном файле, который программа разошлёт на большое количество машин. Такой метод работы называют IaC — infrastructure as a code («инфраструктура как код»).

Для чего используют Ansible

Ansible используют сетевые администраторы, DevOps-инженеры, разработчики ПО и системные администраторы. Вот основные функции программы:

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

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

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

● Управление облачной инфраструктурой. Ansible поддерживает множество провайдеров облачных услуг, включая AWS, Azure и Google Cloud. Он позволяет создавать, изменять и удалять облачные ресурсы, включая виртуальные машины, сети, хранилища и другие компоненты.

● Управление контейнерами. Контейнеры — это небольшие самодостаточные единицы, которые включают всё необходимое для выполнения приложения: код, зависимости, библиотеки и конфигурационные файлы. Они обеспечивают изоляцию приложения от системы, на которой оно работает, что позволяет легко переносить и запускать приложения в различных средах. Ansible интегрируется с Docker и Kubernetes, что позволяет автоматизировать развёртывание и масштабирование контейнеризированных приложений, а также управление ими.

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

● Мониторинг и оповещение. Ansible помогает в настройке систем мониторинга, таких как Prometheus, Nagios, Zabbix, и управлении ими, а также в настройке систем оповещения. Он помогает провести установку агентов мониторинга, настройку метрик и создание уведомлений.

● Резервное копирование и восстановление. Ansible можно использовать для автоматизации процессов резервного копирования и восстановления данных. Это включает настройку задач для регулярного создания резервных копий и автоматизированное восстановление данных в случае сбоя.

● Управление пользователями и группами. Ansible упрощает управление учётными записями пользователей и группами на серверах, что важно для соблюдения политик безопасности и управления доступом.

● Создание тестовых и разработческих сред. Ansible позволяет быстро и легко создавать и настраивать тестовые и разработческие среды, обеспечивая их идентичность продуктивным системам. Это помогает разработчикам и тестировщикам работать в условиях, максимально приближенных к реальным.

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

Инструкция по установке Ansible

Для работы с Ansible необходима операционная система на базе UNIX (например, Linux или macOS) и доступ к интернету для загрузки пакетов.

Например, для установки Ansible на Ubuntu необходимо:

1) обновить список пакетов с помощью команды

sudo apt update;

2) установить Ansible командой

sudo apt install ansible -y.

Для установки Ansible на CentOS нужно:

1) установить EPEL репозиторий с помощью команды

sudo yum install epel-release -y;

2) установить Ansible командой

sudo yum install ansible -y.

Основные понятия Ansible

Inventory (инвентарь)

Inventory — это файл, содержащий список хостов и групп хостов, которыми управляет Ansible. По умолчанию Ansible использует файл /etc/ansible/hosts, но можно указать любой другой файл с помощью параметра -i.

Пример инвентаря Ansible

Модули

Модули Ansible — это единицы кода, выполняющие конкретные действия, такие как установка пакетов, копирование файлов, управление сервисами и многое другое. Ansible включает сотни встроенных модулей для выполнения различных задач. Примеры модулей: apt, yum, copy, service.

Playbook

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

Пример простого плейбука Ansible

Ad hoc команды

Ad hoc команды Ansible позволяют выполнять одноразовые задачи на хостах без необходимости создания плейбуков.

Пример ad hoc команды для проверки доступности хостов:

ansible all -m ping.

Файлы конфигурации

Основной файл конфигурации Ansible — ansible.cfg. В нём можно указать различные параметры, такие как путь к инвентарю, настройки SSH и многое другое. Пример минимальной конфигурации:

[defaults]
inventory = ./inventory

Инструкция по работе с Playbook

Playbook в Ansible — это основной файл конфигурации, который используется для автоматизации задач управления и настройки системы. Playbook состоит из одного или нескольких play («игр»), которые описывают, как должны быть настроены или развёрнуты узлы в серверной инфраструктуре. Каждый play в playbook выполняет набор задач на определённых хостах или группах хостов.

Среди основных компонентов Playbook:

1. Hosts (хосты). Указывают, на каких серверах или группах серверов Ansible будет выполнять задачи. Хосты могут быть определены в файле инвентаризации Ansible или непосредственно в playbook.
2. Variables (переменные). Позволяют задавать значения, которые могут быть использованы в различных частях playbook. Переменные Ansible могут быть объявлены в playbook, файлах переменных или переданы из командной строки.
3. Tasks (задачи). Основная часть playbook, которая выполняет конкретные действия. Каждая задача включает в себя модуль (например, apt, yum, service), который выполняет действие, и описание задачи.
4. Handlers (обработчики). Специальные задачи, которые выполняются только в случае, если одна из задач в playbook изменила состояние системы. Обычно используются для перезапуска сервисов после внесения изменений.
5. Roles (роли). Позволяют структурировать playbook в повторно используемые и организованные модули. Роли могут включать задачи, обработчики, переменные и шаблоны, которые могут быть использованы в различных playbook.
6. Templates (шаблоны). Используются для генерации файлов конфигурации на основе переменных и данных, определённых в playbook. Шаблоны обычно написаны с использованием Jinja2.
7. Includes (включения). Позволяют включать другие playbook или задачи в текущий playbook для лучшей организации и повторного использования кода.

Jinja2 — это шаблонизатор для Python, который используется для генерации текстов на основе шаблонов. Он широко применяется для создания конфигурационных файлов, HTML-документов и других текстовых файлов, где требуется вставка переменных и логики.

Для написания playbook используется формат YAML — YAML Ain't Markup Language («YAML не язык разметки»). YAML — это простой удобочитаемый формат сериализации данных, который используется для представления данных в структурированном виде благодаря своей простоте и читаемости.

Создание Playbook

Пример создания простого playbook для установки и настройки веб-сервера Nginx.

1. Создание файла nginx.yml:

Пример создания файла nginx.yml

2. Запуск playbook с помощью команды:

ansible-playbook nginx.yml.

Команды в Playbook

● hosts: webservers — указывает, что задачи будут выполнены на хостах из группы webservers.
● become: yes — указывает Ansible использовать привилегии суперпользователя для выполнения задач.
● tasks: — список задач, которые будут выполнены на указанных хостах:
- name: установка Nginx — описание задачи;
- apt: — использование модуля apt для установки пакета Nginx;
- service: — использование модуля service для обеспечения запуска и автоматического старта Nginx.

Условные операторы

Ansible позволяет использовать условные операторы для выполнения задач в зависимости от различных условий.

Пример установки пакета только на определённой операционной системе

Циклы

Ansible поддерживает выполнение задач в цикле.

Пример установки нескольких пакетов

Шаблоны Jinja2

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

1. Создание шаблона nginx.conf.j2:

Пример создания конфигурационного файла Nginx

2. Использование шаблона в playbook:

Пример шаблона в playbook

Хранение переменных

Переменные в Ansible можно хранить в различных местах: внутри playbook, в отдельных файлах или в инвентаре.

1. Создание файла vars.yml:

Пример хранения переменных в отдельном файле

2. Использование переменных в playbook:

Пример использования переменных

Удалённое выполнение команд

Ansible позволяет выполнять команды на удалённых хостах. Например, выполнить команду для проверки свободного места на диске можно с помощью команды:

ansible all -m shell -a 'df -h'.

all — группа хостов, на которых выполняется команда;
-m shell — использование модуля shell для выполнения команды;
-a 'df -h' — сама команда для выполнения.

Расширенные возможности Ansible

Роли

Роли — это способ организации и повторного использования кода в Ansible. Роль содержит набор задач, переменных и файлов, необходимых для выполнения определённой задачи. Рассмотрим пример создания роли для установки и настройки Nginx:

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

ansible-galaxy init nginx_role.

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

Пример добавления задач в nginx_role/tasks/main.yml

3. Использование роли в playbook:

Пример использования роли

Роли Ansible имеют определённую структуру, включающую семь основных стандартных каталогов. Необходимо включить по крайней мере один из этих каталогов в каждую роль. Любые каталоги, которые роль не использует, можно опустить.

Структура каталогов роли в Ansible

Заключение

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

Статью подготовили:
Сергей Галкин
Яндекс Практикум
Редактор
Анастасия Павлова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться

Успейте начать учебу в Практикуме до конца ноября со скидкой 20%

Tue Nov 12 2024 12:48:09 GMT+0300 (Moscow Standard Time)