Автоматизация с Ansible: основы настройки и управления
Что такое Ansible и зачем он нужен
Ansible - это программа, которая позволяет настраивать и управлять множеством компьютеров из одного места.
Представь, что у тебя дома стоит 5 компьютеров. Чтобы установить на них какое-то ПО или изменить настройки, придется подходить к каждому и делать всё вручную. А с Ansible достаточно отдать одну команду - и он всё сделает сам на всех компьютерах!
Кроме установки ПО, с помощью Ansible можно deploy'ить (развернуть) web-приложения, настроить сеть, обновить системы и многое другое.
Ansible работает по принципу оркестровщика - он как дирижер в оркестре, управляет процессами на всех компьютерах из одного центра.
По сути, Ansible автоматизирует рутинные задачи по администрированию и экономит кучу времени. Поэтому знание Ansible - важный навык для сисадминов и девопсов.
Установка Ansible
Чтобы использовать Ansible, нужно установить его на компьютер, с которого будет осуществляться управление.
sudo apt update sudo apt install ansible
brew install ansible
На Windows можно установить Ansible в WSL или с помощью pip.
ansible --version
Должна вывестись информация о версии. Значит, Ansible работает!
Первые шаги в Ansible
Перед началом работы в Ansible нужно определить список управляемых хостов (компьютеров). Это делается в файле inventory (инвентаризации).
- Компьютеры web1, web2 - с установленным веб-сервером nginx.
- Компы db1, db2 - с СУБД PostgreSQL.
- Компы net1, net2 - маршрутизаторы.
Тогда в inventory прописываем:
[webservers] web1 web2 [dbservers] db1 db2 [netservers] net1 net2
Теперь Ansible знает все управляемые хосты и можно писать playbook (плейбук) - набор инструкций для настройки систем.
Например, плейбук для установки nginx на веб-серверах:
- hosts: webservers tasks: - name: Install nginx apt: name: nginx state: latest
ansible-playbook playbook.yml
Ansible соединится с хостами web1 и web2 и установит на них nginx!
Модули в Ansible
Всю работу в Ansible выполняют модули - готовые "куски кода" для конкретных задач.
- command - выполнить команду в системе
- shell - запустить shell команды
- git - работа с git
- file - управление файлами
- template - работа с шаблонами файлов
- name: Install Figlet command: apt install figlet
- name: Clone repository git: repo: https://github.com/user/repo.git dest: /home/user/repo
Склонирует указанный репозиторий git.
Таких модулей огромное количество, для любой задачи есть готовое решение.
Переменные и шаблоны
Часто нужно, чтобы плейбуки были более гибкими. Для этого используют переменные.
Например, установим nginx, используя переменные:
- hosts: webservers vars: nginx_version: 1.14 tasks: - name: Install nginx version {{ nginx_version }} apt: name: nginx={{ nginx_version }}
При запуске Ansible подставит значение вместо {{ nginx_version }}.
Шаблоны позволяют генерировать файлы с нужным содержимым.
Например, шаблон index.html.j2:
<html> <title>Website</title> <body> {{ custom_text }} </body> </html>
А в плейбуке передаем переменную custom_text, чтобы подставить нужный текст.
Группы хостов и управление
В больших инфраструктурах хосты объединяют в группы - например, группа веб-серверов, группа баз данных.
Это позволяет выполнять playbook только для нужной группы:
- hosts: webservers tasks: - command: echo 'This will run on webservers' - hosts: dbservers tasks: - command: echo 'This will run on dbservers'
Также можно использовать теги.
- hosts: webservers tags: - nginx tasks: - name: Install Nginx apt: name: nginx - hosts: dbservers tags: - postgres tasks: - name: Install Postgres apt: name: postgresql
ansible-playbook playbook.yml --tags nginx
Запустится только таск с тегом nginx. Теги позволяют выборочно запускать части playbook.
Деплой веб-приложений
Одна из распространенных задач - развертывание веб-приложений на серверах.
Допустим, есть Git репозиторий с кодом приложения.
Тогда плейбук может выглядеть так:
- hosts: webservers tasks: - name: Clone repository git: repo: https://github.com/user/webapp.git dest: /var/www/webapp - name: Install dependencies command: npm install cwd: /var/www/webapp - name: Start application command: npm start cwd: /var/www/webapp
- Склонирует репозиторий в /var/www/webapp
- В папке приложения выполнит установку зависимостей
- Запустит приложение командой npm start
Таким образом можно легко автоматизировать разворачивание веб-приложений на серверах!
Обновление систем с Ansible
Еще один распространенный случай - автоматизация обновлений ПО и систем.
Например, плейбук для обновления Ubuntu:
- hosts: all tasks: - name: Update repositories cache apt: update_cache: yes - name: Upgrade all packages apt: upgrade: dist - name: Remove unused packages apt: autoremove: yes
Он обновит репозитории, выполнит обновление пакетов и удалит ненужные пакеты.
Также можно перезагружать сервисы, перезагружать систему и выполнять другие действия после обновлений.
Заключение
Примерно так Ansible помогает автоматизировать администрирование и экономит много времени. Я рассказал про основные возможности и показал примеры плейбуков для разных задач.