Как установить и настроить Ansible в Ubuntu 16.04

Вступление

Системы управления конфигурациями предназначены для упрощения управления большим количеством серверов для администраторов и рабочих групп. Они позволяют вам автоматически управлять многими различными системами из одного центрального места.

Хотя существует много популярных систем управления конфигурацией, доступных для систем Linux, таких как Chef и Puppet, они часто являются более сложными, чем многие люди хотят или нуждаются. Ansible - отличная альтернатива этим параметрам, поскольку для начала он требует гораздо меньших накладных расходов.

В этом руководстве мы обсудим, как установить Ansible на сервере Ubuntu 16.04, а также рассмотрим некоторые основы использования программного обеспечения.

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

Ansible работает путем настройки клиентских компьютеров с компьютера с установленными и настроенными компонентами Ansible.

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

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

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

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

Файлы конфигурации в основном записаны в формате сериализации данных YAML из-за его выразительной природы и сходства с популярными языками разметки. Ansible может взаимодействовать с клиентами либо с помощью инструментов командной строки, либо с помощью скриптов конфигурации, называемых Playbooks.

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

  • Один сервер Ubuntu 16.04 с пользователем sudo без полномочий root и ключами SSH, которые вы можете настроить, выполнивthis initial server setup tutorial, включая шаг 4

[[step-1 -—- install-ansible]] == Шаг 1. Установка Ansible

Чтобы начать изучать Ansible как средство управления нашими различными серверами, нам нужно установить программное обеспечение Ansible хотя бы на одну машину. Для этого раздела мы будем использовать сервер Ubuntu 16.04.

Лучший способ получить Ansible для Ubuntu - добавить PPA (личный архив пакетов) в вашу систему. Мы можем добавить Ansible PPA, введя следующую команду:

sudo apt-add-repository ppa:ansible/ansible

НажмитеENTER, чтобы принять добавление PPA.

Затем нам нужно обновить индекс пакета нашей системы, чтобы он знал о пакетах, доступных в PPA. После этого мы можем установить программное обеспечение:

sudo apt-get update
sudo apt-get install ansible

Как мы упоминали выше, Ansible в основном связывается с клиентскими компьютерами через SSH. Хотя он, безусловно, способен обрабатывать SSH-аутентификацию на основе пароля, ключи SSH помогают упростить процесс. Вы можете следовать руководству, указанному в предварительных условиях, чтобы настроить ключи SSH, если вы этого еще не сделали.

Теперь у нас есть все программное обеспечение, необходимое для администрирования наших серверов через Ansible.

[[step-2 -—- configuring-ansible-hosts]] == Шаг 2. Настройка Ansible Hosts

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

Откройте файл с правами root следующим образом:

sudo nano /etc/ansible/hosts

Вы увидите файл с множеством примеров конфигураций, ни одна из которых на самом деле не будет работать для нас, так как эти хосты составлены. Итак, для начала, закомментируем все строки в этом файле, добавив «#» перед каждой строкой.

Мы будем хранить эти примеры в файле, чтобы помочь нам с настройкой, если мы хотим реализовать более сложные сценарии в будущем.

Как только все строки закомментированы, мы можем начать добавление наших реальных хостов.

Файл hosts довольно гибкий и может быть настроен несколькими различными способами. Синтаксис, который мы собираемся использовать, выглядит примерно так:

Пример файла hosts

[group_name]
alias ansible_ssh_host=your_server_ip

Имя_группы - это организационный тег, который позволяет вам ссылаться на любые серверы, перечисленные под ним, одним словом. Псевдоним - это просто имя для ссылки на этот сервер.

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

ssh root@your_server_ip

Вам не нужно запрашивать пароль, если вы правильно его настроили. Предположим, что IP-адреса наших серверов:192.0.2.1,192.0.2.2 и192.0.2.3. Мы настроим это так, чтобы мы могли обращаться к ним по отдельности какhost1,host2 иhost3 или как к группе какservers.

Это блок, который мы должны добавить в наш файл hosts, чтобы выполнить это:

[servers]
host1 ansible_ssh_host=192.0.2.1
host2 ansible_ssh_host=192.0.2.2
host3 ansible_ssh_host=192.0.2.3

Хосты могут быть в нескольких группах, и группы могут настраивать параметры для всех своих членов. Давайте попробуем это сейчас.

С нашими текущими настройками, если мы попытаемся подключиться к любому из этих хостов с помощью Ansible, команда потерпит неудачу (при условии, что вы не работаете как пользователь root). Это потому, что ваш SSH-ключ встроен для пользователя root в удаленных системах, и Ansible по умолчанию попытается подключиться как ваш текущий пользователь. Попытка подключения получит эту ошибку:

Ошибка соединения

host1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

На сервере Ansible мы используем пользователяdemo. Ansible попытается подключиться к каждому хосту сssh demo@server. Это не будет работать, если демонстрационный пользователь не находится в удаленной системе.

Мы можем создать файл, который сообщает всем серверам в группе «серверы», что нужно подключиться с помощью пользователя root.

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

sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/servers

Мы можем поставить нашу конфигурацию здесь. Файлы YAML начинаются с «-», поэтому убедитесь, что вы не забыли эту часть.

/etc/ansible/group_vars/servers

---
ansible_ssh_user: root

Сохраните и закройте этот файл, когда вы закончите.

Если вы хотите указать детали конфигурации для каждого сервера, независимо от групповой ассоциации, вы можете поместить эти детали в файл по адресу/etc/ansible/group_vars/all. Отдельные хосты можно настроить, создав файлы в каталоге/etc/ansible/host_vars.

[[step-3 -—- using-simple-ansible-commands]] == Шаг 3 - Использование простых команд Ansible

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

Пропингуйте все серверы, которые вы настроили, набрав:

ansible -m ping all

Вывод пинга

host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

host3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Это основной тест, чтобы убедиться, что Ansible имеет соединение со всеми своими хостами.

«Все» означает всех хостов. Мы могли бы так же легко указать группу:

ansible -m ping servers

Мы также можем указать отдельный хост:

ansible -m ping host1

Мы можем указать несколько хостов, разделив их двоеточиями:

ansible -m ping host1:host2

Часть команды-m ping - это инструкция для Ansible использовать модуль «ping». Это в основном команды, которые вы можете запускать на своих удаленных хостах. Модуль ping работает во многом как обычная утилита ping в Linux, но вместо этого он проверяет наличие соединения Ansible.

Модуль ping на самом деле не принимает никаких аргументов, но мы можем попробовать другую команду, чтобы увидеть, как это работает. Мы передаем аргументы в сценарий, набирая-a.

Модуль «shell» позволяет нам отправить команду терминала на удаленный хост и получить результаты. Например, чтобы узнать использование памяти на нашей машине host1, мы могли бы использовать:

ansible -m shell -a 'free -m' host1

Выход оболочки

host1 | SUCCESS | rc=0 >>
             total       used       free     shared    buffers     cached
Mem:          3954        227       3726          0         14         93
-/+ buffers/cache:        119       3834
Swap:            0          0          0

Заключение

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

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

Related