Службы Heat
позволяют автоматизировать управление
жизненным циклом наборов облачных
сервисов (виртуальными машинами, сетями,
томами, группами безопасности и т.д.)
как единым целым, объединяя их в так
называемые стеки (stack). Задачи могут быть
как простыми, например развертывание
виртуальной машины, таки и более сложными,
например старт комплексного приложения
из многих машин и его масштабирование
в зависимости от информации передаваемой
модулем телеметрии. Для описания стеков
используются специальные, одновременно
легко читаемые человеком и дружественные
к обработке машиной форматы описания
ресурсов, их ограничений, зависимостей
и параметров:
- HOT (Heat Orchestration Template) — формат предназначенный исключительно для OpenStack. Представляет собой документ формата YAML. Призван заменить собой CFN — шаблоны и именно с ним мы и будем работать.
- CFТ (AWS CloudFormation) — Документ формата JSON в формате совместимом с шаблонами сервиса CloudFormation (http://aws.amazon.com/ru/cloudformation/). Наличие возможности работать с этим типом форматов позволяет использовать множество уже существующих для AWS шаблонов.
1 heat_template_version: 2014-10-16
2 description: >
3 OpenStack. Практическое
знакомство с облачной операционной
системой.
4 Пример запуска одной ВМ
5
6 parameters:
7 network:
8 type: string
9 description: Сеть экземпляра ВМ
10 default: demo-net
11 image:
12 type: string
13 description: Образ для
запуска ВМ
14 default: cirros-0.3.3-x86_64
15
16 resources:
17 my_server:
18 type: OS::Nova::Server
19 properties:
20 flavor: m2.tiny
21 key_name: demokey1
22 networks:
23 - network: { get_param: network }
24 image: { get_param: image }
25 user_data: |
26 #!/bin/sh
27 echo "Instance STARTED!"
28 user_data_format: RAW
29
30 outputs:
31 instance_name:
32 description: Имя экземпляра ВМ
33 value: { get_attr: [my_server, name] }
34 private_ip:
35 description: IP-адрес ВМ в частной сети
36 value: { get_attr: [ my_server,first_address ] }
Данный шаблон является одной из многих вариаций «Hello, World!» для Heat. Создается стек состоящий из одной виртуальной машины, которой во время старта передается скрипт, выводящий сообщение «Instance STARTED!» на стандартный вывод. Прежде чем запустить стек, рассмотрим листинг.
Строки с первой по четвертую — это заголовок шаблона и описание. Дата в версии heat_template_version выберется не произвольно, а задается одним из следующих вариантов, соответствующих релизу OpenStack:
- 2013-05-23 — Icehouse
- 2014-10-16 — Juno
- 2015-03-30 — Kilo
Далее следуют три секции, первая из которых parameters начинается с шестой строки. В данной части шаблона определяются параметры network и image которые можно задать во время запуска стека. Оба параметра имеют тип — строка. У каждого из параметров есть значения по умолчанию, используемые если во время запуска стека их не задали — это строки десятая и четырнадцатая. В шаблоне мог также могла быть секция parameter_groups в которой задавалось бы как параметры должны быть сгруппированы и их порядок, но в этом шаблоне секция отсутствует.
Следующая секция resources которая описывает ресурсы шаблона. В этой секции должен быть описан как минимум один ресурс. В данном случае как раз и описан один ресурс с именем my_server типа OS::Nova::Server. В подсекции properties определены параметры сервера которые мы обычно задаем командой nova boot. Три из них, а именно размер виртуальной машины (flavor), имя открытого SSH-ключа и скрипт, который будет исполнен при старте при помощи cloud-init жестко заданны в теле шаблона. Еще два параметра, которые ранее были описаны в секции parameters подставляются при помощи функции get_param.
Наконец, третья секция outputs, которая также опциональна задает параметры которые будут выводится пользователю когда шаблон отработает в выводе heat stack-show или в интерфейсе Horizon.
Теперь когда мы разобрали шаблон, попробуем его запустить командой heat stack-create. Нам нужно указать путь к файлу шаблона и по желанию после опции -P параметры которые были определены в секции parameters. По желанию, потому что в шаблоне для них заданы значения по умолчанию.
$ source keystonerc_demo
$ heat stack-create -f test-server.yml -P network=demo-net teststack
+------+------------+--------------------+----------------------+
| id | stack_name | stack_status | creation_time |
+------+------------+--------------------+----------------------+
| 08.. | teststack | CREATE_IN_PROGRESS | 2015-06-06T20:03:19Z |
+------+------------+--------------------+----------------------+
При помощи следующей команды мы можем следить за процессом отработки стека, дождавшись пока статус не поменяется на CREATE_COMPLETE:
$ heat stack-list
+------+------------+-----------------+----------------------+
| id | stack_name | stack_status | creation_time |
+------+------------+-----------------+----------------------+
| 08.. | teststack | CREATE_COMPLETE | 2015-06-06T20:03:19Z |
+------+------------+-----------------+----------------------+
Проверим что у нас действительно была создана виртуальная машина. При этом обратите внимание что ее имя было сформировано из имени стека и имени ресурса:
$ nova list
+------+--------------------------+--------+------------+-------------+----------------------+
| ID | Name | Status | Task State | Power State | Networks |
+------+--------------------------+--------+------------+-------------+----------------------+
| f8.. | teststack-my_server-hv.. | ACTIVE | - | Running | demo-net=172.16.0.30 |
+------+--------------------------+--------+------------+-------------+----------------------+
Команда heat stack-show вместе с именем стека покажет его детали, включая параметры которые попросили вывести в секции outputs. Будут показаны имя экземпляра виртуальной машины и IP-адрес виртуальной машины в сети demo-net:
$ heat stack-show teststack
+----------------------+---------------------------------------------------+
| Property | Value |
+----------------------+---------------------------------------------------+
| capabilities | [] |
| creation_time | 2015-06-06T20:03:19Z |
| description | OpenStack. Практическое знакомство с облачной |
| | операционной системой. Пример запуска одной ВМ |
| disable_rollback | True |
| id | 08065001-1c81-4481-bc4f-0e7d2799f27c |
| links | http://os1.test.local:8004/v1/9c1c71f2c0f243b7a.. |
| notification_topics | [] |
| outputs | [ |
| | { |
| | "output_value": "teststack-my_server-hvio..", |
| | "description": "Имя экземпляра ВМ", |
| | "output_key": "instance_name" |
| | }, |
| | { |
| | "output_value": "172.16.0.30", |
| | "description": "IP-адрес ВМ в частной сети", |
| | "output_key": "private_ip" |
| | } |
| | ] |
| parameters | { |
| | "image": "cirros-0.3.3-x86_64", |
| | "OS::stack_id": "08065001-1c81-4481-bc4f-0e..", |
| | "OS::stack_name": "teststack", |
| | "network": "demo-net" |
| | } |
| parent | None |
| stack_name | teststack |
| stack_owner | demo |
| stack_status | CREATE_COMPLETE |
| stack_status_reason | Stack CREATE completed successfully |
| template_description | OpenStack. Практическое знакомство с облачной |
| | операционной системой. Пример запуска одной ВМ |
| timeout_mins | None |
| updated_time | None |
+----------------------+---------------------------------------------------+
Для того, чтобы убедится что скрипт, выводящий сообщение через cloud-init сработал можно либо подключится к консоли виртуальной машине в Horizon, либо ввести команду nova, которая показывает вывод консоли:
$ nova console-log teststack-my_server-hvio4ophfajb
4 комментария:
кажется грамотнее оркестровка а не оркестрация..
Возможно с точки зрения русского языка это не грамотно, но в "оркестрация" уже устоялось в ИТ. Проверил как переводят VMware, MS и EMC на своих .ru сайтах. Тоже "оркестрация", так что оставлю как есть.
Андрей, можно вас попросить немного переверстать сайт или просто выбрать другую тему, уверен blogger это умеет.
Примеры кода шаблонов просто не влазят в узкую колонку и поэтому содержат много переносов строк. Их сложно читать.
Сам я также занимаюсь изучением и работой с OpenStack и применением его в SDN, и ваш блог один из не многих хороших источников на русском языке. Спасибо.
Да, и я согласен с Thero Layfer по поводу перевода слова.
Ну вот с текущей темой оформления думаю лучше...
Отправить комментарий