Автоматизуємо і прискорюємо процес налаштування хмарних серверів з Ansible. Частина 1: Введення

Ansible — популярний інструмент для автоматизації установки і розгортання ІТ-інфраструктури.

Основні завдання, які вирішує Ansible:
  • Управління конфігураціями. Максимально швидка і правильна настройка серверів до описаної конфігурації.
  • Провижнинг. Управління процесом розгортання нових хмарних серверів (наприклад через API, за допомогою Docker або LXC).
  • Розгортання. Інсталяція і оновлення ваших програм без простою найкращим чином.
  • Оркестрация. Координація компонентів вашої інфраструктури для виконання розгортання. Наприклад перевірка, що веб-сервер відключений від балансувальника навантаження, до апгрейду на сервері.
  • Моніторинг та попередження.
  • Логгирование. Централізований збір логів.


У порівнянні з іншими популярними інструментами автоматизації іт-інфраструктури, Ansible не вимагає установки клієнтських додатків на обслуговувані сервера, що може скоротити час налаштування перед розгортанням інфраструктури. Для роботи Ansible підключається до обслуговуваних серверів по SSH.

Важливість подібних інструментів лише збільшується в хмарі з появою можливості швидко створювати необхідні сервера, розгортати ЗА необхідне, використовувати і видаляти, коли необхідність відпала, оплачуючи тільки використовувані ресурси. У нашій статті ми розглянемо основну функціональність Ansible в контексті практичного використання на хмарних серверах InfoboxCloud.

Що нам буде потрібно для налаштування

Ми сподіваємося, що у вас вже є обліковий запис InfoboxCloud. Якщо ще ні — створити.

Для роботи Ansible нам знадобиться керуючий сервер. Створіть його (рекомендується використовувати Ubuntu 14.04 або CentOS 7). Також створити як мінімум пару серверів Linux, які будуть створюватися за допомогою Ansible. Дані для доступу до серверів будуть відправлені на ваш email.

Підключіться до керуючого сервера по SSH.

Установка Ansible

Ubuntu 14.04 LTS
Для установки, на керуючому сервері введіть:
apt-key update && apt-get update && apt-get-y upgrade && apt-get-y install python-software-properties && apt-get-y install software-properties-common && apt-add-repository-y ppa:rquillo/ansible && apt-get update && apt-get-y install ansible

CentOS 7
Для установки, на керуючому сервері введіть:
ням-y update && yum-y install epel-release && yum-y install ansible


Як працює Ansible

Основна ідея Ansible — наявність одного або кількох керуючих серверів, з яких ви можете відправляти команди або набори послідовних інструкцій (playbooks) на віддалений сервер, підключаючись до них по SSH.


Файл Host inventory містить інформацію про обслуговуються серверах, де команди будуть виконані. Файл конфігурації Ansible може бути корисний для вказівки налаштувань вашого оточення.

Набори інструкцій (playbooks) складаються з однієї або більше задач, які описуються з допомогою функціональність модуля ядра Ansible або сторонніх модулів, які можуть знадобитися в специфічних ситуаціях. Самі по собі набори інструкцій — послідовні набори команд, в яких можуть бути перевірки умов: якщо умова не виконується, визначені команди можуть пропускатися.

Також ви можете використовувати Ansible API для запуску скриптів. Якщо скрипту-обгортці (wrapper) може знадобитися запустити playbook, це можна зробити через API. Самі playbooks описуються декларативно у форматі YAML. Ansible підтримує сценарії розгортання нових хмарних серверів і конфігурування їх на підставі ролей. Частина роботи може бути проведена в локальному режимі на керуючому сервері, а решта — на створеному сервері після його першого завантаження. Ведеться робота над модулем провижнинга для InfoboxCloud.

Налаштування Ansible

Файл конфігурації описується в INI-форматі. Ви можете перевизначити частину або всю конфігурацію в параметрах playbook або змінних оточення.
При виконанні команд Ansible перевіряє наявність файлу конфігурації в таких розташуваннях:
  1. Перевіряється змінна оточення ANSIBLE_CONFIG, яка може вказувати на файл конфігурації.
  2. ./ansible.cfg — у поточній директорії
  3. ~/.ansible.cfg — в домашній директорії
  4. /etc/ansible/ansible.cfg — в каталозі, створеному при установці ansible через менеджер пакунків.
Настройка через змінні оточення
Більшість параметрів конфігурації можна встановити через змінні оточення, використовуючи префікс ANSIBLE_ перед назвою параметра конфігурації (великими літерами).
Наприклад:
export ANSIBLE_SUDO_USER=root
Після цього змінна ANSIBLE_SUDO_USER може бути використана в playbook.

Налаштування в ansible.cfg
Параметрів конфігурації Ansible багато. Давайте розглянемо деякі з них:
  • hostfile: Параметр вказує на шлях до inventory file, в якому міститься список адрес хостів, до яких Ansible може підключитися.
    Наприклад: hostfile = /etc/ansible/hosts
  • library: Шлях до директорії, де зберігаються модулі Ansible. Наприклад: library = /usr/share/ansible
  • forks: Кількість процесів, які може породити Ansible. За замовчуванням встановлено 5 процесів.
    Наприклад: forks = 5
  • sudo_user: Користувач за замовчуванням, від якого Ansible запускає команди на віддалених серверах.
    Наприклад: sudo_user = root
  • remote_port: Порт для з'єднання з SSH (за замовчуванням 22).
    Наприклад: remote_port = 22
  • host_key_checking: Параметр дозволяє відключити перевірку SSH-ключа на хості. За замовчуванням перевірка виконується.
    Наприклад: host_key_checking = False
  • timeout: Значення таймауту спроби підключення SSH.
    Наприклад: timeout = 60
  • log_path: Шлях для зберігання файлів логів. За замовчуванням Ansible не зберігає їх зовсім, але вказавши цей параметр можна активувати запис логів.
    Наприклад: log_path = /var/log/ansible.log
Пишемо перший файл конфігурації Ansible
Давайте створимо наш перший файл конфігурації Ansible в InfoboxCloud. Підключіться по SSH до створеного керуючого сервера з встановленим Ansible. Створіть директорію для наших експериментів 'ansible' і перейдіть до неї:
mkdir ~/ansible
cd ~/ansible

Також створіть папку для зберігання модулів Ansible і папку для зберігання логів:
mkdir ~/ansible/modules
mkdir ~/ansible/logs

Створіть файл ansible.cfg з наступним вмістом:
[defaults]
hostfile = ~/ansible/inventory
sudo_user = root
log_path = ~/ansible/logs/ansible.log

Вказуємо обслуговуються сервера host inventory
Для експериментів раніше ми створили декілька серверів, які і будемо налаштовувати. Потрібно повідомити Ansible їх адреси та згрупувати їх. Для цього створіть файл inventory нашої директорії ~/ansible/inventory з наступним вмістом:
[experiments]
ір_первой_машины
ір_второй_машины

ір_адреса серверів можна подивитися в панелі управління InfoboxCloud.


Зверніть увагу, що для використання керуючого сервера Ansible з серверами в одному регіоні можна вказати локальні IP-адреси і працювати з внутрішньої мережі.



Необхідно згенерувати на керуючому сервері ключ, який буде використовуватися для доступу до налаштованим серверів.
Це робиться за допомогою команди:
ssh-keygen

На всі питання можна просто натиснути Enter.

Тепер необхідно скопіювати публічний ключ на настроювані сервера. Це можна зробити за допомогою утиліти ssh-copy-id керуючого сервера Ansible для кожного настроюваного сервера:
ssh-copy-id root@ір_адрес_настраиваемого_сервера



Перевірити коректність можна, залогувавшись у в настроюється сервер з керуючого по SSH. Якщо пароль більше не питається — все в порядку.

InfoboxCloud можна створювати нові сервера вже зазначеним публічним ключем. Для цього створіть чистий сервер. Скопіюйте на нього публічний SSH-ключ, як показано вище. Далі створіть образ ОС:



Тепер в розділі «Образи серверів» панелі управління можна при необхідності натиснути «Створити сервер» на нашому образі і отримати готову до конфігурації машину для Ansible.



Тепер Давайте перевіримо коректність установки Ansible повністю.
Можна попинговать обслуговуються сервера:
ansible experiments-m ping



або відправити у echo «Hello World»:
ansible experiments-a "/bin/echo " Hello, World!"



Управління конфігураціями

Працюємо з playbooks
Виконання Playbooks — одна з основних завдань Ansible. Playbooks містять списки завдань. Кожна задача всередині Ansible використовує шматок коду-модуля. Самі Playbooks описуються у форматі YAML, але модулі можуть бути написані на будь-якій мові програмування. Важливо, щоб формат повідомлень від модулів був в JSON.

YAML
Playbook пишеться на YAML. Давайте подивимося на основні правила написання YAML-файлів.

Для Ansible практично кожен YAML файл починається зі списку. Кожен елемент списку — список пар «ключ-значення», часто звана словником.

Всі YAML файли повинні починатися з "---". Це частина формату YAML і означає початок документа.

Всі члени списку повинні знаходиться з однаковим відступом від початку рядка, і повинні починатися з пробілу або "-". Коментарі починаються з "#".
Наприклад:
---
#Message
- Hosting
- Cloud

Словник представлений у вигляді «ключ:» (двокрапка і пробіл) «значення»:
---
#Message
site: habr
blog: іnfobox

При необхідності словники можуть бути представлені у скороченій формі:
---
#Comment
{site: habr, blog: іnfobox}

Можна вказати логічні значення (так/ні) так:
---
need_access: no
use_service: yes
file_conf: TRUE
read_value: True
kill_process: false

Цілком наш приклад YAML-файлу буде виглядати так:
---
#Blog About
site: habr
blog: іnfobox
must_read: True
themes:
- hosting
- cloud
- it
- geeks
brands:
- іnfobox
- infoboxcloud

Для змінних Ansible використовує "{{ var }}". Якщо значення після двокрапки починається з "{", то YAML буде думати, що це словать.
Для використання змінних потрібно укласти дужки, лапки:
word: "{{ variable }}"

Цього достатньо для початку написання playbooks.

Пишемо наш перший playbook
Playbooks може складатися зі списку обслуговуються серверів, змінних користувача, завдань, обробників (хендлеров) і т. д. Більшість настройок конфігурації можна перевизначити в playbook. Кожен playbook складається з одного або більше дії (ігри) в списку.

Мета гри — пов'язати групу хостів з зумовленими ролями, представленими як виклик завдань Ansible.

В якості прикладу розглянемо процес установки nginx.
Створимо директорію, де будуть зберігається playbooks:
mkdir ~/ansible/playbooks

Створимо файл setup_nginx.yml в директорії playbooks з наступним змістом:
---
- hosts: experiments
завдання:

- name: Install package nginx
apt: name=nginx update_cache=yes
sudo: yes

- name: Starting nginx service
service: name=nginx state=started
sudo: yes

Давайте розглянемо вміст:
  • hosts: Список хостів або група, на якій ви запускаєте завдання. Це поле обов'язкове і кожен playbook повинен мати його, за винятком ролей. Якщо вказана хост-група, спочатку Ansible її шукає в playbook, а потім у файлі inventory. Дізнатися, на яких хостах буде відбуватися робота, можна командою:
    ansible-playbook <playbook> --list-host
    , де — шлях до вашого playbook (playbooks/setup_nginx.yml).
  • завдання: Завдання. Всі playbooks містять завдання. Завдання — це список дій, які ви хочете виконати. Поле завдання містить ім'я завдання (довідкова інформація про задачу для користувача playbook), модуль, який повинен бути виконаний і аргументи, необхідні для модуля. Параметр «name» опціональний, але рекомендований.
Інші параметри конфігурації, такі, як remote_user, беруться з ansible.cfg.

При виконанні playbook ми використовуємо 2 модуля: apt і service. В першому ми вказуємо, що потрібно виконати apt-get update до установки nginx, у другому вказуємо назву процесу і стан, який повинен отримати процес. Так само зазначено, що потрібні права суперкористувача для обох завдань.

Ansible не підтримує єдине опис менеджера пакетів для всіх дистрибутивів, т. к. спосіб їх роботи і назва самих пакетів в різних дистрибутивах може відрізнятися (наприклад Apache в CentOS 7 називається httpd, а в Ubuntu 14.04: apache2). Поточний менеджер пакетів ОС міститься у змінній ansible_package_manager.

Запустіть playbook з директорії ~/ansible:
cd ~/ansible
ansible-playbook playbooks/setup_nginx.yml



Переконайтеся, що nginx коректно встановлений на обидва сервера.



Вітаємо! Ви успішно запустили свій перший playbook!
У наступній статті ми проведемо розбір виведення цього playbook і продовжимо вивчення Ansible.

Висновок

При вивченні Ansible корисною буде книга "Learning Ansible" і звичайно офіційна документація.

Ви можете отримати пробну версію InfoboxCloud для експериментів з Ansible. Для цього пришлите нам ваш email, ім'я та прізвище. Ми надамо безкоштовну пробну версію хмари на 15 днів.

Якщо ви виявили помилку у статті, автор її з задоволенням виправить. Будь ласка напишіть в ЛС або на пошту про неї. Туди ж можна задавати питання по Ansible для освітлення в наступних статтях. Посилання на такі статті будуть додані в кінець цієї статті, тому можна просто зберегти її на майбутнє.

Успішної роботи!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.