Поиск по сайту:

Как установить и настроить 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 с пользователем без полномочий root и ключами SSH, которые можно настроить, следуя этому руководству по начальной настройке сервера, включая шаг 4.

Шаг 1 — Установка Ansible

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

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

  1. sudo apt-add-repository ppa:ansible/ansible

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

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

  1. sudo apt-get update
  2. sudo apt-get install ansible

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

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

Шаг 2 — Настройка хостов Ansible

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

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

  1. sudo nano /etc/ansible/hosts

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

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

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

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

[group_name]
alias ansible_ssh_host=your_server_ip

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

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

  1. ssh root@your_server_ip

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

Это блок, который мы должны добавить в наш файл 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 для каждой группы, которую мы хотим настроить:

  1. sudo mkdir /etc/ansible/group_vars
  2. sudo nano /etc/ansible/group_vars/servers

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

---
ansible_ssh_user: root

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

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

Шаг 3 — Использование простых команд Ansible

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

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

  1. ansible -m ping all
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

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

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

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

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

  1. ansible -m ping servers

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

  1. ansible -m ping host1

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

  1. ansible -m ping host1:host2

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

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

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

  1. 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 для автоматизации настройки удаленных компьютеров.