Задача программы OpenStack Orchestration — создать сервис, доступный для человека и машины, для управления всем жизненным циклом инфраструктуры и приложений в облаках.
Heat — основной проект в программе OpenStack Orchestration. Благодаря ему вы можете составлять шаблоны в виде текстовых файлов, а затем обрабатывать их как код и запускать составные облачные приложения.
HOT — это формат шаблона, поддерживаемый Heat. На его основе Опенстек разворачивает облачные приложения.
Чтобы научиться работать с Heat, начнем с простой конфигурации. В ней будет только одно определение ресурса с заданными свойствами.
Пример:
heat_template_version: 2015-04-30
description: Simple template to deploy a single compute instance
resources:
my_instance:
type: OS::Nova::Server
properties:
key_name: my_key
image: IMG-x86_64
flavor: m1.small
Описание начинается с версии HOT. Список доступных версий смотрите в cпецификации.
Затем следует description — полезный текст, который объясняет, что пользователи могут делать с помощью этой схемы. Можно обойтись и без него, но это хорошая практика, как и комментарии в коде. Description можно сделать большим, на несколько строк, используя форматирование YAML.
description: >
This is how you can provide a longer description
of your template that goes over several lines.
В отличие от description, раздел resources — обязательный. Здесь должно быть описание как минимум одного ресурса. В приведенном примере вы используете Openstack Nova, а также указываете три свойства с заранее определенными значениями: key_name, image и flavor.
В предыдущем разделе вы изучили пример простой конфигурации, в которой свойства определены заранее. Это не самый практичный подход. Гораздо удобнее, когда шаблон можно настраивать при развертывании — допустим, указывать идентификатор дистрибутива или тип инстанса. Этого можно добиться, расширив схему:
heat_template_version: 2015-04-30
description: Simple template to deploy a single compute instance
parameters:
key_name:
type: string
label: Key Name
description: Name of key-pair to be used for compute instance
image_id:
type: string
label: Image ID
description: Image to be used for compute instance
instance_type:
type: string
label: Instance Type
description: Type of instance (flavor) to be used
resources:
my_instance:
type: OS::Nova::Server
properties:
key_name: { get_param: key_name }
image: { get_param: image_id }
flavor: { get_param: instance_type }
Здесь определены три входных параметра, которые пользователь должен предоставить при развертывании. Вы также можете определить значения по умолчанию для входных параметров, которые будут использоваться в случае, если пользователь не предоставит соответствующий параметр во время развертывания.
Следующее определение для параметра instance_type выберет вариант «m1.small», если пользователь не указал иное.
parameters:
instance_type:
type: string
label: Instance Type
description: Type of instance (flavor) to be used
default: m1.small
Еще одна полезная опция — скрытие значения. Например, их используют, чтобы спрятать пароль. Для скрытия достаточно добавить параметр hidden со значением true:
parameters:
database_password:
type: string
label: Database Password
description: Password to be used for database
hidden: true
Также можно установить ограничения, используя параметр constraints:
parameters:
database_password:
type: string
label: Database Password
description: Password to be used for database
hidden: true
constraints:
- length: { min: 6, max: 8 }
description: Password length must be between 6 and 8 characters.
- allowed_pattern: "[a-zA-Z0-9]+"
description: Password must consist of characters and numbers only.
- allowed_pattern: "[A-Z]+[a-zA-Z0-9]*"
description: Password must start with an uppercase character.
В этом примере вы явно задаете условия, которым должен удовлетворять пароль от базы данных.
В дополнение к настройке шаблона с помощью входных параметров вы можете предоставлять пользователям выходные данные. Пример:
outputs:
instance_ip:
description: The IP address of the deployed instance
value: { get_attr: [my_instance, first_address] }
В этом примере выводится IP-адрес, по которому доступен экземпляр, определенный в предыдущем разделе. Если не указать его в выводе, то пользователям придется искать его самостоятельно.
Все это можно попробовать настроить в виртуальной машине на локальном компьютере или удаленном сервере. Конфигурация системы настраивается в файле конфигурации Openstack local. А если не хочется тратить время на самостоятельную настройку, можно заказать облачную инфраструктуру timeweb.cloud и доверить управление специалистам.
Openstack 2020 предоставляет еще много возможностей для управления инфраструктурой. С помощью блочного хранилища Openstack Cinder вы можете управлять виртуальными дисками, добавляя их к инстансам. Можно даже делать их загрузочными и переносить ВМ на другие вычислительные мощности.
Способы управления также отличаются. Можно использовать Nova API через клиент командной строки на Python. Задачи могут быть разными. Например, удобно выстроена на Python работа с IP-адресами, а с помощью Nova можно управлять всей инфраструктурой.