Установка и настройка Ansible в Ubuntu 14.04
Ubuntu | Комментировать запись
Системы управления конфигурациями предназначены для контроля настроек и операций большого количества серверов. Они позволяют централизованно управлять различными системами в автоматическом режиме.
Существует множество систем управления конфигурациями, предназначенных для Linux (например, Chef или Puppet), но они довольно сложные. Ansible – простое альтернативное решение, не требующее большого количества ресурсов.
Данное руководство поможет установить Ansible на Ubuntu 14.04 и разобраться в базовых понятиях.
Как работает Ansible?
Ansible настраивает клиентские машины с компьютера, на котором установлены все компоненты программы.
Ansible извлекает информацию с удалённых машин, выполняет команды и копирует файлы по обычным каналам SSH. Потому для корректной работы системы Ansible не требуется дополнительного программного обеспечения на клиентах. Любой сервер с открытым SSH-портом можно добавить в систему Ansible, независимо от того
Ansible может управлять любым компьютером, которым можно управлять через SSH.
Ansible применяет модульный подход, благодаря чему система легко расширяется и может использовать функциональные возможности основной системы для решения конкретных сценариев. Модули могут быть написаны на любом языке и взаимодействовать в формате JSON.
Конфигурационные файлы в основном записываются в формате XML. Ansible может взаимодействовать с клиентами через инструменты командной строки или с помощью так называемых сценариев (которые также называются Playbooks).
Установка Ansible
Установите пакет Ansible на машину, которая будет использоваться для централизованного управления.
Используйте для установки PPA-репозиторий.
Сначала нужно установить пакет software-properties-common, который обеспечивает поддержку таких репозиториев.
sudo apt-get update
sudo apt-get install software-properties-common
Теперь добавьте репозиторий РРА для Ansible.
sudo add-apt-repository ppa:rquillo/ansible
Обновите индекс пакетов и установите программу:
sudo apt-get update
sudo apt-get install ansible
Создание SSH-ключей
Как говорилось ранее, Ansible в большинстве случаев взаимодействует с клиентами по SSH. Рекомендуется настроить использование SSH-ключей. Для этого можно создать новую пару ключей или переместить уже существующие ключи в Ansible.
Создание новых SSH-ключей
Если у вас ещё нет пары ключей для системы Ansible, создайте их на машине Ansible в сессии пользователя, при помощи которого будет запускаться система Ansible.
Чтобы создать пару RSA-ключей, введите:
ssh-keygen
Вам будет предложено указать местоположение файлов пары ключей, а также выбрать и подтвердить пароль. Чтобы принять значения по умолчанию, просто нажмите ENTER на все запросы.
Теперь ключи доступны в каталоге ~/.ssh. Открытый ключ (которым можно делиться) называется id_rsa.pub, а закрытый ключ (который следует держать в секрете) – id_rsa.
Теперь можно добавить их на серверы при помощи панели управления. Найдите в панели опцию SSH Keys (или другую похожую опцию) и нажмите Add SSH Key.
Чтобы извлечь содержимое файла открытого ключа, введите:
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0
Вставьте в настройки сервера открытый ключ:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0
Примечание: Более подробную информацию о SSH-ключах можно найти в этом руководстве.
Перемещение существующего ключа
Если же у вас есть готовая пара ключей, можно просто переместить учётные данные на сервер Ansible.
Перейдите на сервер, на котором хранятся SSH-ключи, и извлеките открытый ключ:
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0
Перейдите на сервер Ansible. Создайте скрытый каталог для хранения ключей; назовите его .ssh, чтобы программа SSH знала, где искать ключи:
mkdir ~/.ssh
Заблокируйте общий доступ к этому каталогу.
chmod 700 ~/.ssh
Перейдите в этот каталог и откройте файл id_rsa.pub в текстовом редакторе:
cd ~/.ssh
nano id_rsa.pub
Вставьте в него открытый ключ:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0
Сохраните и закройте файл.Установите новые права доступа к файлу:
chmod 644 id_rsa.pub
Вернитесь на локальный компьютер, поддерживающий SSH, и введите:
cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD
N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ
kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU
ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq
. . .
. . .
cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7
1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT
qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo
-----END RSA PRIVATE KEY-----
Вернитесь на сервер Ansible и создайте новый файл в каталоге ~/.ssh.
nano id_rsa
Вставьте в него следующий ключ:
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD
N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ
kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU
ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq
. . .
. . .
cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7
1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT
qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo
-----END RSA PRIVATE KEY-----
Важно! Если пропустить первую и последнюю строки (отметки), такой ключ будет недействительным.
Сохраните и закройте файл.
Измените права доступа к файлу:
chmod 600 id_rsa
Теперь Ansible может использовать SSH-ключи для взаимодействия с серверами.
Настройка хостов Ansible
Ansible отслеживает все серверы, указанные в файле hosts. Чтобы система Ansible могла взаимодействовать с остальными машинами, нужно настроить этот файл.
sudo nano /etc/ansible/hosts
В файле хранится множество настроек и примеров конфигурации. В данном случае все они не подходят. Закомментируйте их, добавив символ # в начало.
Не стоит удалять из файла примеры конфигураций, поскольку они могут пригодиться в дальнейшем.
Закомментировав все настройки, добавьте в файл свои хосты.
Файл hosts довольно гибкий. В данном случае используйте такой синтаксис:
[group_name]
alias ansible_ssh_host=your_server_ip
Тег group_name позволяет ссылаться сразу на несколько серверов; alias задаёт имя сервера.
Предположим, в данной настройке есть три сервера. Чтобы получить доступ к этим серверам с сервера Ansible, наберите:
ssh root@your_server_ip
После этого система запросит пароль. Предположим, серверы называются host1, host2 и host3 и имеют следующие IP-адреса: 192.0.2.1, 192.0.2.2 и 192.0.2.3 соответственно. Группа будет называться servers.
Чтобы настроить управление этими серверами, нужно добавить в файл такие настройки:
[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 | FAILED => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue
На компьютере Ansible в данном случае используется пользователь demo. Потому Ansible попытается подключиться к серверам как ssh demo@server. Это не сработает, если пользователя demo не существует в удалённой системе. Чтобы исправить это, можно создать отдельный файл, благодаря которому все серверы в группе servers будут подключаться как пользователь root.
Создайте каталог в структуре настроек Ansible под названием group_vars. В этой папке создайте файлы в формате YAML для каждой группы.
sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/droplets
Сюда можно поместить настройки.
Примечание: Файлы YAML начинаются с —.
---
ansible_ssh_user: root
Сохраните и закройте файл.
Можно указать параметры конфигурации для каждого сервера вне зависимости от группы в файле /etc/ansible/group_vars/all. Индивидуальные настройки хостов можно поместить в каталог /etc/ansible/host_vars.
Простые команды Ansible
Теперь хосты настроены и готовы к работе. Попробуйте запустить первую команду, например, ping.
ansible -m ping all
host1 | success >> {
"changed": false,
"ping": "pong"
}
host3 | success >> {
"changed": false,
"ping": "pong"
}
host2 | success >> {
"changed": false,
"ping": "pong"
}
Этот базовый тест позволяет убедиться в том, что Ansible может взаимодействовать с хостами. Параметр all значит «все хосты». Вместо него можно задать группу:
ansible -m ping droplets
Также можно указать отдельный хост:
ansible -m ping host1
Чтобы указать несколько хостов, разделите их при помощи двоеточий.
ansible -m ping host1:host2
Параметры команды -m ping указывают, что система Ansible должна использовать модуль ping. Эти команды можно запускать на удалённых хостах. Модуль ping в большинстве случаев работает как обычная утилита Linux, но в системе Ansible он проверяет взаимодействие между серверами.
Модуль ping не требует никаких аргументов. Попробуйте запустить другую команду с аргументом –а.
Модуль 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 взаимодействует с другими серверами и может управлять ими.
Tags: Ansible, SSH, Ubuntu 14.04