Управляем серверами локально через Ansible

21/04/2019


Количество серверов (физических и виртуальных), которыми необходимо управлять, как правило, у каждого администратора месяц от месяца только прибавляется. Даже если у Вас нету в организации сервисов, которые работают по понятиям HighLoad, то наверняка количество IT систем постоянно растет. Для того, чтобы оставаться эффективным в современных условиях, использование какой-либо из систем управления конфигурациями просто необходимо. Ansible – одна из таких систем, которая по моему мнению, по своим возможностям и архитектурным особенностям лучшая на сегодняшний день.

Использовать этот программный продукт можно как на сервере, так и с локального ноутбука или настольного компьютера. Из основных требований – наличие интерпретатора Python и нескольких модулей для корректной работы Ansible. Мне бы хотелось тут показать, как можно настроить это ПО таким образом, чтобы без использвоания учетной записи root, выполнять любые действия на своих серверах на локальном компьютере без необходимости вводить пароли.

Настройка серверов

Прежде всего, нам необходимо, на наших серверах создать выделенного пользователя, под которым будут производиться действия на них от системы Ansible. Например, назовем этого пользователя ansibled. После этого нужно разрешить данному пользователю подключаться к серверам без использования пароля. Для этого надо поместить наш rsa public ключ в файл /home/ansibled/.ssh/authorized_keys на сервере. Ansible в первую очередь нацелен на работу с удаленными хостами через ssh ключи. Возможно, также и использование парольного доступа, но это создаст дополнительные неудобства при работе. Заключительным штрихом в настройке серверов будет конфигурация файла /etc/sudoers. Нам потребуется резрешить использование привиллегированного режима пользователем ansibled через sudo без пароля. Пример данной настройки представлен ниже.

# User privilege specification 
root ALL=(ALL:ALL) ALL
ansibled ALL=(ALL) NOPASSWD:ALL

Все, наши сервера готовы для использования совместно с Ansible. Никаких дополнительных агентов или утилит на них устанавливать не придется. Все остальное можно делать локально на машине администратора с установленным ПО Ansible.

Настройка хоста администратора

Теперь время настроить сам Ansible на нашем административном хосте. Базовая настройка не занимает много времени. Устанавливаем Ansible с помощью #pip install ansible. Далее делаем настройку файлов /etc/ansible/ansible.cfg и /etc/ansible/hosts. Не буду перечислять множество переменных в файле ansible.cfg. Для начального использования, скорее всего, Вам нужно будет указать SSH порт, который исползуется на Ваших серверах. И пожалуй все. В файлике /etc/ansible/hosts нужно будет указать более конкретные параметры серверов, которыми мы хотим управлять. Пример ниже

[all:vars]
# SSH user, this user should allow ssh based auth without requiring a
# password. If using ssh key based auth, then the key should be managed by an
# ssh agent.
ansible_user=ansibled

# If ansible_user is not root, ansible_become must be set to true and the
# user must be configured for passwordless sudo
ansible_become=True

###############################################################################
# Required configuration variables                                            #
###############################################################################
#openshift_kubeconfig_path="~/.kube/config"
#openshift_pull_secret_path="~/pull-secret.txt"

[myservers]
xx.xx.xx.xx
yy.yy.yy.yy
zz.zz.zz.zz

[dc1]
xx.xx.xx.xx

[dc2]
yy.yy.yy.yy   

После этого мы сможем управлять нашими серверами локально. Достаточно использовать команды #ansible и #ansible-playbook. С помощью первой мы можем выполнять какую-то конкретную команду сразу на группе наших серверов. А с помощью второй выполнять целые сценарии или плейбуки, которые описывают последовательность команд на серверах.

Пример выполнения команды ping в ansible представлен далее. С помощью него мы можем проверить правильность нашей базовой настройки и доступность сервера

# ansible -m ping xx.xx.xx.xx
xx.xx.xx.xx | SUCCESS => {
    "changed": false,
    "ping": "pong"
}    

На этом, базовая настройка закончена. Теперь мы можем полноценно работать со всеми удаленными серверами через локальную консоль. Впереди поиск необходимых ansible ролей в Интернете для наших серверов и составление подходящих плейбуков, которые смогут автоматизировать часто выполняемые задачи на оборудовании.

Управляем серверами локально через Ansible: 1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *