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

Как установить и настроить 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.)

  1. sudo apt-get update
  2. sudo apt-get install software-properties-common

После установки пакета мы можем добавить 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-ключи

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

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

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

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

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

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

  1. ssh-keygen

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

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

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

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

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

  1. cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

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

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

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

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

На компьютере, где вы настроили аутентификацию по SSH-ключу для своих дроплетов, получите открытый ключ, набрав:

  1. cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

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

  1. mkdir ~/.ssh

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

  1. chmod 700 ~/.ssh

Теперь перейдите в каталог и откройте файл с именем id_rsa.pub в текстовом редакторе:

  1. cd ~/.ssh
  2. nano id_rsa.pub

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

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

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

  1. chmod 644 id_rsa.pub

Теперь вернитесь на свой локальный компьютер, настроенный для доступа по ключу SSH, введите:

  1. 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:

  1. 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-----

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

Нам нужно изменить разрешения, чтобы сохранить этот файл в безопасности:

  1. chmod 600 id_rsa

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

Настройка хостов 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, чтобы выполнить это:

[droplets]
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. Это не сработает, если демонстрационный пользователь не находится в удаленной системе.

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

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

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

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

---
ansible_ssh_user: root

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

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

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

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

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