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

Вступление

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

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

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

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

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

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

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

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

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

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

Установите Ansible в Ubuntu 14.04

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

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

Чтобы сделать это эффективно, нам нужно установить пакет + software-properties-common +, который даст нам возможность легко работать с PPA. (Этот пакет назывался + python-software-properties в более старых версиях Ubuntu.)

sudo apt-get update
sudo apt-get install software-properties-common

После установки пакета мы можем добавить Ansible PPA, введя следующую команду:

sudo apt-add-repository ppa:ansible/ansible

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

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

sudo apt-get update
sudo apt-get install ansible

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

Настройка ключей SSH

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

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

Создать новую пару ключей SSH

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

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

Как пользователь, которым вы будете управлять Ansible, создайте пару ключей RSA, набрав:

ssh-keygen

Вам будет предложено указать местоположение файла созданной пары ключей, пароль и подтверждение пароля. Нажмите клавишу ВВОД, чтобы принять значения по умолчанию.

Ваши новые ключи доступны в каталоге вашего пользователя + ~ / .ssh +. Открытый ключ (тот, которым вы можете поделиться) называется + id_rsa.pub. Закрытый ключ (тот, который вы храните в безопасности) называется + id_rsa +.

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

Для этого нажмите на ссылку «SSH Keys» в левом меню навигации. На новом экране нажмите кнопку «Добавить ключ SSH» в правом верхнем углу:

изображение: https: //assets.digitalocean.com/articles/basic_ansible/add_ssh.png [ключ добавления DigitalOcean]

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

cat ~/.ssh/id_rsa.pub

Пример открытого ключа

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

Возвращаемая вам строка - это то, что вам нужно вставить во второе поле панели управления DigitalOcean:

изображение: https: //assets.digitalocean.com/articles/basic_ansible/ansible_key.png [ключ DigitalOcean Ansible]

Нажмите «Создать ключ SSH», чтобы добавить ключ на панель управления. Теперь, всякий раз, когда вы создаете новую каплю, вы сможете встраивать свой открытый SSH-ключ в новый сервер, позволяя вам общаться с вашим экземпляром Ansible. Вам просто нужно выбрать ключ в разделе «Добавление дополнительных ключей SSH» в процессе создания капли:

изображение: https: //assets.digitalocean.com/articles/basic_ansible/embed_key.png [Ключ для встраивания DigitalOcean]

Перенос существующей пары ключей SSH в Ansible

Если у вас уже есть пара ключей 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

Вставьте вывод вашего открытого ключа с вашего домашнего компьютера в этот файл:

Пример 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

Внутри вставьте результаты предыдущей команды на локальный компьютер:

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 Hosts

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

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

sudo nano /etc/ansible/hosts

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

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

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

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

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

[]
alias ansible_ssh_host=

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

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

ssh root@

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

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

[droplets]
host1 ansible_ssh_host=
host2 ansible_ssh_host=
host3 ansible_ssh_host=

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

С нашими текущими настройками, если мы попытаемся подключиться к любому из этих хостов с помощью 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 +. Это не будет работать, если демонстрационный пользователь не находится в удаленной системе.

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

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

sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/droplets

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

/ и т.д. / анзибль / group_vars / капли

---
ansible_ssh_user: root

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

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

Использование простых 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 droplets

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

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