0

ansible

Знакомство с Ansible. Часть 1: Введение

Ansible – одна из систем управления конфигурациями (автоматизации настройки и развертывания серверов).

Особенность Ansible – наличие управляющего сервера, с которого отправляются команды или наборы инструкций (playbooks) на удаленные хосты посредством протокола SSH.

Ansible успешно решает следующие задачи:

  • правильная и быстрая настройка серверов до нужной конфигурации;
  • управление развертыванием облачных серверов (через API, с помощью Docker);
  • установка и обновление приложений;
  • координация звеньев инфраструктуры для выполнения развертываний;
  • централизованный сбор логов.

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

Чтобы «пощупать» Ansible потребуется один управляющий сервер и несколько хостов для настройки. На управляющем сервере у нас установлена операционная система Debian Wheezy, на удаленных хостах — Ubuntu 14.04.

Установка Ansible не должна вызывать трудностей:

  • перед установкой обновим имеющиеся в системе пакеты:
apt-get update && apt-get upgrade
  • непосредственно установка Ansible:
echo 'deb http://http.debian.net/debian wheezy-backports main' > /etc/apt/sources.list.d/backports.list
apt-get update
apt-get -t wheezy-backports install "ansible"

Для настройки Ansible используется файл конфигурации ansible.cfg, который может находиться в таких местах:

  • ./ansible.cfg – в текущем каталоге;
  • ~/.ansible.cfg — в домашнем каталоге;
  • /etc/ansible/ansible.cfg — в каталоге, созданном при установке через менеджер пакетов (наш случай).

Примечание. Некоторые параметры или даже всю конфигурацию также можно переопределить в playbook или переменных окружения.

Параметров настройки Ansible довольно много, вот некоторые из наиболее часто используемых:

  • hostfile: — путь к inventory file, содержит список ip-адресов (или имен) хостов для подключения;
  • library: — путь к модулям Ansible;
  • forks: — кол-во потоков, которые может создать Ansible;
  • sudo_user: — пользователь, от которого запускаются команды/инструкции на удаленных хостах;
  • remote_port: — порт для подключения по протоколу SSH;
  • host_key_checking: — включить/отключить проверку SSH–ключа на удаленном хосте;
  • timeout: — таймаут подключения по SSH;
  • log_path: — путь к файлу логов.

Перечислим имена удаленных хостов, с которыми будем проводить эксперименты в файле /etc/ansible/hosts. Для этого:

  • переходим в каталог /etc/ansible:
cd /etc/ansible
  • переименуем существующий файл hosts:
mv hosts hosts.orig
  • и создадим новый файл hosts:
touch hosts

Содержимое файла будет следующим:

[test]
test-1
test-2

Также нужно сгенерировать на управляющем сервере ключ для доступа к удаленным хостам по SSH, для этого используем утилиту ssh-keygen. Копируем публичный ключ на удаленные хосты утилитой ssh-copy-id.

Для проверки правильности настройки Ansible делаем следующее:

  • пингуем удаленные хосты:
ansible test -m ping
test-1 | success >> {
    "changed": false, 
    "ping": "pong"
}

test-2 | success >> {
    "changed": false, 
    "ping": "pong"
}
  • просмотрим информацию об использовании оперативной памяти на удаленных хостах:
ansible test -a "free -h"
test-1 | success | rc=0 >>
             total       used       free     shared    buffers     cached
Mem:          7.6G       6.4G       1.2G       471M        64M       1.2G
-/+ buffers/cache:       5.2G       2.4G
Swap:         4.0G       616M       3.4G

test-2 | success | rc=0 >>
             total       used       free     shared    buffers     cached
Mem:          3.9G       3.3G       573M       333M       4.8M       442M
-/+ buffers/cache:       2.9G       1.0G
Swap:         4.0G       1.7G       2.3G

Работа с наборами инструкций (playbooks) — главная задача Ansible. Наборы инструкций содержат задачи и должны быть описаны в формате YAML. Задача использует часть кода-модуля, который может быть написан на любом языке программирования (но есть одно важное требование — сообщения от модулей должны быть в формате JSON).

Несколько слов о правилах написания YAML-файлов:

  • все YAML-файлы должны начинаться с ---. Эта часть формата YAML означает начало документа;
  • члены списка должны начинаться с пробела или - и иметь одинаковые отступы от начала строки;
  • комментарии начинаются с символа #;
  • словарь описывается в виде ключ: значение и может быть представлен в сокращенной форме.

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

Давайте разберемся с синтаксисом конкретного набора инструкций на примере установки web-сервера nginx:

  • создаем каталог, для хранения наших playbooks:
mkdir /etc/ansible/playbooks
  • в каталоге /etc/ansible/playbooks создаем файл install_nginx.yml:
touch /etc/ansible/playbooks/install_nginx.yml

Содержимое файла следующее:

---
- hosts: test
  tasks:
 
  - name: Install package nginx
    apt: name=nginx update_cache=yes
    sudo: yes
 
  - name: Starting service nginx
    service: name=nginx state=started
    sudo: yes

В данном примере поле hosts: содержит группу, на которой будет запущена задача (test).

Узнать, на каких хостах будет происходить работа, можно командой:

ansible-playbook <имя_набора_инструкций> --list-host

Поле tasks: содержит имена задач (Install package nginx и Starting service nginx), имена модулей, которые должны выполняться (apt и service) и аргументы, необходимые для выполнения модуля (для первого это name=nginx update_cache=yes, для второго — name=nginx state=started). Дополнительно указано, что для выполнения задач необходимы права суперпользователя (sudo: yes).

Запустить только что созданный набор инструкций можно следующей командой:

ansible-playbook install_nginx.yml 

PLAY [test] ****************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [test-1]
ok: [test-2]

TASK: [Install package nginx] ************************************************* 
changed: [test-1]
changed: [test-2]

TASK: [Starting service nginx] ************************************************ 
ok: [test-1]
ok: [test-2]

PLAY RECAP ******************************************************************** 
test-1                 : ok=3    changed=1    unreachable=0    failed=0   
test-2                 : ok=3    changed=1    unreachable=0    failed=0   

После выполнения набора инструкций убедимся что nginx корректно установлен перейдя в браузере на ip-адрес удаленных хостов. На этом все, в следующей статье разберем вывод данного playbook и продолжим разбираться с Ansible.

Облачная платформа

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

1 ansible

Знакомство с Ansible. Часть 4: модули

Мы уже справились установкой системы управления конфигурациями Ansible, написали первый набор инструкций (playbook) и разобрали результат его выполнения, а также ознакомились с использованием переменных в Ansible. В этой части
3 ansible

Знакомство с Ansible. Часть 3: переменные

В первой части знакомства с Ansible мы успешно установили систему управления конфигурациями и написали первый playbook, во второй части разобрали результат выполнения нашего набора инструкций и научились повторно
network tonnel
Previous Story

GRE, IPIP – mikrotik

ansible
Next Story

Знакомство с Ansible. Часть 2: разбор вывода playbook

Latest from Blog

Проброс портов в роутере MikroTik 2

Проброс портов в роутере MikroTik (port forwarding) позволяет организовать удаленный доступ из интернета к какому-нибудь устройству внутри вашей локальной сети (к IP-камере, Web, FTP или игровому серверу). В данной статье мы рассмотрим пример, как

How to set up WireGuard Client on Debian?

WireGuard is an extremely simple yet fast and modern VPN. Setting up the WireGuard VPN client on Debian is straightforward. In this tutorial, we will set up WireGuard VPN client on Debian
Go toTop

Don't Miss

ansible

Ansible: ввод sudo-пароля при выполнении playbook

Большинство действий в наборах инструкций системы управления конфигурациями Ansible следует выполнять с
ansible

Добавление учетных записей с помощью Ansible

Ранее мы уже рассматривали несколько вариантов использования системы управления конфигурациями Ansible,