Управління серверами Vscale через Ansible



Проект Vscale було запущено всього півроку тому, і зараз він дуже активно розвивається. Інтенсивний розвиток багато в чому стало можливим завдяки спільноті: величезний внесок у розвиток сервісу вносять користувачі, які створюють бібліотеки для роботи з API і діляться ними з широкою аудиторією на GitHub. У числі цікавих розробок — клієнти на Go, Ruby, Java, а також плагін для Docker Machine.

Зі свого боку ми хотіли б запропонувати спільноті ще один корисний інструмент: модуль для системи управління конфігураціями Ansible, за допомогою якого можна розгортати віртуальну інфраструктуру на базі Vscale.

Можливості модуля

Встановивши наш модуль, ви зможете написати сценарій для автоматичного розгортання віртуальної інфраструктури на базі Vscale. З його допомогою можна виконувати наступні операції:

  • створення і видалення серверів;
  • перевстановлення операційної системи на сервері;
  • апгрейд конфігурації;
  • включення, вимикання і перезавантаження серверів.
У цій статті ми розглянемо кілька прикладів його використання. Всі його можливості детально описані в документації до модулю.

Завантаження і первинна настройка

Перш ніж починати роботу з модулем, потрібно виконати кілька підготовчих операцій. Спочатку згенеруємо в панелі управління маркер для доступу до API.
Потім додамо змінну оточення
VS_API_KEY
і вкажемо отриманий токен в якості її значення:

$ export VS_API_KEY=5c22a088f3b37c933e7480399f1e09258d6977bcd1eb2401de29e8001c9bedc36

Створимо директорії для SSH-ключів і бібліотек:

$ mkdir -p vscale-ansible/{credentials,group_vars}

Після цього згенеруємо SSH-ключ для доступу до серверів. Якщо вам потрібно додати вже наявний SSH-ключ, просто вкажіть шлях до нього в конфігураційному файлі (див. нижче):

$ ssh-keygen -f ./vscale-ansible/credentials/ansible

Відкриємо конфігураційний файл vscale-ansible/ansible.cfg і пропишемо наступні налаштування:

sudo_user = root
remote_user = root
host_key_checking = False
private_key_file = ./credentials/ansible
[ssh_connection]
control_path = %(directory)s/%%h-%%r

Створимо файл vscale-ansible/inventory, в якому будуть вказані імена керованих за допомогою Ansible хостів:

[fe-servers]
fe-[01:02]

[local]
localhost

Після цього можна завантажувати модуль:

$ git clone https://github.com/vscale/ansible-vscale-modules.git ./library

Для зручності подальшої роботи визначимо декілька змінних у файлі vscale-ansible/group_vars/all.yml:

---
vscale_token: "{{ lookup('env', 'VS_API_KEY')}}"
key: "{{ lookup('file', 'credentials/ansible.pub') }}"


Тестовий сценарій: створення сервера

Спробуємо написати сценарій, за допомогою якого, Vscale буде створено новий сервер з потрібними нам характеристиками. Створимо в текстовому редакторі файл createserver.yml і додамо наступні рядки:

---

- name: Add key SSH
connection: local
gather_facts: no
hosts:
fe-servers
завдання:
- name: Add SSH key to account Vscale
run_once: true
vscale_ssh:
token: "{{ vscale_token }}"
name: "Ansible"
public_key: "{{ key }}"
state: present

В цьому фрагменті ми описали процедуру додавання SSH-ключа, скориставшись двома певними раніше змінними (
token
та
public_key
).
Далі описуємо параметри сервера, який потрібно створити:

- name: Create scalet for inventory hosts
vscale_scalets:
token: "{{ vscale_token }}"
name: "{{ inventory_hostname }}"
plan: small
location: spb0
image: ubuntu_14.04_64_002_master
key_name: "Ansible"
collect_facts: "так"
power_state: "started"
state: present
register: server
- set_fact:
ansible_ssh_host: "{{ server['scalet']['public_address']['address'] }}"

Далі встановимо на нашому сервері Nginx:

- name: Install NGINX and fill disk
remote_user: root
hosts:
- fe-servers
завдання:
- name: Install NGINX
apt:
pkg: nginx
update_cache: yes
state: latest
- name: Filling disk
command: dd if=/dev/zero of=/large.file bs=100M count=150 creates=/large.file

В цьому фрагменті ми не тільки описали стандартну процедуру установки Nginx, але й заповнили диск. Ми зробили це навмисно, щоб ви змогли протестувати наступну частину нашого сценарію:

- name: Check free disk space
remote_user: root
hosts:
- fe-servers
завдання:
- name: Gather facts
setup:

- name: Upgrade server if disk has than 3Gb left
hosts:
- fe-servers
connection: local
завдання:
- name: Upgrade
vscale_scalets:
token: "{{ vscale_token }}"
name: "{{ inventory_hostname }}"
plan: medium
upgrade: yes
state: present
when: "{{ (ansible_mounts[0].size_available)/2**30 < 3*(2**30) }}"

У ній ми запускаємо перевірку вільного місця на диску. Якщо вільний об'єм диска становить менше 3 Gb, конфігурація сервера буде автоматично оновлено до більш продуктивною.

От і все. Збережемо внесені зміни і виконаємо команду:

$ ansible-playbook -i inventory createserver.yml

Описаний сценарій для тестування ви можете знайти на нашому репозиторії.

Установка на серверах

Ми тільки що розглянули приклад сценарію, який просто створює новий сервер. Спробуємо тепер автоматизувати процес установки.

Це можна зробити за допомогою готових сценаріїв і ролей — беріть і користуйтеся:

Якщо ви ще не встановили модуль з наведеної вище інструкції, то можете просто клонувати репозиторій зі сценаріями, а потім підключити наш модуль з допомогою команди git submodule:

$ git clone https://github.com/vscale/ansible-playbooks.git
$ cd ansible-playbooks
$ git submodule init
$ git submodule update

У цього способу є певні переваги: якщо ми підключаємо якийсь репозиторій у вигляді подмодуля, він завжди залишається в робочому, консистентном стані. Навіть якщо ми оновимо репозиторій в основній гілці і в ньому щось «зламається», ваш підмодуль після оновлення не буде змінено.

Не забудьте згенерувати SSH-ключ і додати шлях до нього в конфігураційний файл :)

Структура і синтаксис сценаріїв досить прості, і ви напевно зможете написати що-небудь своє — документація API вам в допомогу.

Висновок

Запрошуємо всіх спробувати наш модуль Ansible і сподіваємося, що він виявиться для вас корисним. Будемо раді будь-яким зауважень і пропозицій щодо його подальшого вдосконалення.
А ще ми закликаємо всіх, хто пише клієнтські бібліотеки для Vscale, не варитися у власному соку, а знайомити суспільство з результатами своєї праці. Про найбільш цікавих розробках ми обов'язково напишемо, а найбільш активних і талановитих — преміюємо.

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

0 коментарів

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