Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Виртуальное дирижирование в OpenStack: работа с Heat

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
18 февраля 2022 г.
161
5 минут чтения
Средний рейтинг статьи: 5

Задача программы OpenStack Orchestration — создать сервис, доступный для человека и машины, для управления всем жизненным циклом инфраструктуры и приложений в облаках. 

Heat — основной проект в программе OpenStack Orchestration. Благодаря ему вы можете составлять шаблоны в виде текстовых файлов, а затем обрабатывать их как код и запускать составные облачные приложения.

Виртуальное Дирижирования В Open Stack  Работа С Heat (1)

Создание шаблона Heat

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 можно управлять всей инфраструктурой.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону