cluster-infra
OpenStack Кластер как Услуга Инфраструктура
Эта роль создает программно определяемую инфраструктуру OpenStack, которая может использоваться для создания сложных топологий приложений по требованию. Для этого используется последняя версия OpenStack Heat.
Требования
API OpenStack должны быть доступны с целевого хоста. Необходима версия OpenStack Newton или новее. Учетные данные клиента должны быть установлены в среде или использовать формат clouds.yaml
.
Что касается пакетов Python, то требуются:
- ansible
- jmespath (необходим для фильтра
json_query
)
Переменные Роли
cluster_venv
: Необязательный путь к виртуальной среде Python, в которой установлен пакет shade
.
cluster_auth_type
: Необязательное имя плагина аутентификации OpenStack для использования.
cluster_auth
: Необязательный словарь, содержащий информацию для аутентификации.
cluster_cloud
: Необязательное имя облака конфигурации клиента OpenStack для использования.
cluster_state
: Желаемое состояние кластера, одно из значений: present
, absent
или query
. Значение по умолчанию – present
. Если значение query
, кластер не будет обновлен, но его конфигурация будет запрошена, и будет сгенерирован инвентарь Ansible.
cluster_name
: Имя для стека Heat. По умолчанию – cluster
.
cluster_environment_nodenet
: Файл окружения, указывающий ресурс для сети на узел, Cluster::NodeNet
. ПРИМЕЧАНИЕ: Эта опция устарела в пользу ресурсов для определения nodenet_resource
внутри групп и глобального ресурса по умолчанию с использованием nodenet_resource
в cluster_params
.
cluster_environment_instance
: Файл окружения, указывающий ресурс для экземпляров, Cluster::Instance
. ПРИМЕЧАНИЕ: Эта опция устарела в пользу ресурсов для конкретных групп через добавление определения для node_resource
в группу и глобального ресурса по умолчанию через определение node_resource
в cluster_params
.
cluster_environment
: Список файлов окружения, которые будут использованы при создании стека Heat.
cluster_params
: Параметры, передаваемые в стек Heat.
cluster_prefix
: Префикс имени для построения имени хоста экземпляра.cluster_groups
: Список групп узлов, структурированный в JSON, каждая из которых описана словарем, содержащим следующее:name
: Имя для обращения к этой группе.flavor
: Имя или UUID типа экземпляра для развертывания этой группы.image
: Имя или UUID образа для развертывания этой группы.user
: Имя облачного пользователя, для которого были предоставлены SSH ключи и настроен беспарольный sudo. Это может быть, например,centos
,debian
илиubuntu
.num_nodes
: Количество узлов, которые нужно создать в этой группе.volume_size
: Необязательный размер в ГБ томов, используемых для загрузки экземпляров в этой группе при использовании окруженияinstance-w-volume.yaml
.volume_type
: Необязательный тип томов, используемых для загрузки экземпляров в этой группе при использовании окруженияinstance-w-volume.yaml
.
cluster_keypair
: Имя SSH ключевой пары для доступа к экземплярам.cluster_az
: Имя зоны доступности, в которой будут созданы экземпляры.cluster_config_drive
: Нужно ли предоставлять метаданные через конфигурационный диск. По умолчанию –false
.cluster_net
: Список сетей, структурированный в JSON, каждая из которых описана словарем, содержащим следующее:net
: Имя или UUID сети neutron, к которой следует подключить экземпляры.subnet
: Имя или UUID подсети neutron, к которой следует подключить экземпляры.security_groups
: Необязательный список имен или UUID групп безопасности для добавления к портам экземпляров. Группы безопасности могут присутствовать или отсутствовать в каждой указанной сети.floating_net
: Необязательное имя или UUID сети neutron для подключения плавающих IP-адресов, когда используются ресурсыCluster::NodeNet1WithFIP
илиCluster::NodeNet2WithFIP
.
node_resource
: Имя ресурса из библиотеки пользовательских имен ресурсов для узлов. Этот тип ресурса используется по умолчанию для групп, которые не переопределяют его.Действительные варианты:
Cluster::Instance
: Экземпляр с только временным хранилищем. Это значение по умолчанию.Cluster::InstanceWithVolume
: Экземпляр, подключенный к томам Cinder.
nodenet_resource
: Имя ресурса из библиотеки пользовательских сетевых ресурсов для сетевого взаимодействия узлов. Этот тип ресурса используется для групп, которые не указывают конфигурацию сети для экземпляров группы.Действительные варианты:
Cluster::NodeNet1
: Одна сеть без связанных плавающих IP. Это значение по умолчанию.Cluster::NodeNet1WithFIP
: Одна сеть с выделенным плавающим IP, связанным с портом.Cluster::NodeNet1WithPreallocatedFIP
: Одна сеть с плавающим IP (взятым из заранее выделенного списка), связанным с портом.Cluster::NodeNet2
: Два сетевых интерфейса. Используются первые две сети изcluster_net
.Cluster::NodeNet2WithFIP
: Два сетевых интерфейса. Используются первые две сети изcluster_net
. Плавающий IP будет выделен из первой сети и связан с экземпляром.Cluster::NodeNet2WithFIPSRIOV
: Два сетевых интерфейса. На первом интерфейсе есть прикрепленный плавающий IP (с использованиемfloating_net
иsecurity_groups
). Второй интерфейс настроен как ресурс порта SR-IOV для высокопроизводительной внутренней сети. Используются первые две сети изcluster_net
.Cluster::NodeNet3
: Три сетевых интерфейса. Используются первые три сети изcluster_net
.
router_networks
: Необязательный список CIDR подсетей IP, которые должны быть добавлены как разрешенные сети. Это необходимо, если порт связан с узлом-шлюзом, который выполняет маршрутизацию IP между подсетями. Они должны соответствовать форматуallowed_address_pairs
[https://docs.openstack.org/heat/rocky/template_guide/openstack.html#OS::Neutron::Port-prop-allowed_address_pairs здесь]. Простая, разрешающая конфигурация дляrouter_networks
может быть:
router_networks:
- ip_address: "0.0.0.0/0"
cluster_inventory
: После развертывания создается файл инвентаря, который может быть использован в дальнейшем для настройки через Ansible.
cluster_roles
: Набор назначений групп, которые следует сделать в сгенерированном файле инвентаря Ansible. Этот параметр представляет собой список словарей следующего формата:
name
: Имя группы, которая будет определена в инвентаре Ansible.groups
: Список групп, выбранных из объектов dict, предоставленных вcluster_groups
, выше.
cluster_group_vars
: Словарь, сопоставляющий группы инвентаря с переменными группы, которые должны быть определены для этой группы. Переменные группы для каждой группы определяются как словарь, сопоставляющий имена переменных с их значениями.
cluster_environment_group
: Необязательное имя группы Ansible, к которой будут добавлены все узлы кластера и локальный узел. Это может быть полезно, если существует одна группа, представляющая среду, такую как разработка/стадия/продакшен.
Зависимости
Эта роль зависит от установленного на целевом хосте пакета Python shade
. Пакет может быть установлен в виртуальной среде Python, в этом случае путь к виртуальной среде должен быть указан в переменной cluster_venv
.
Роль stackhpc.os-shade может быть использована для установки пакета Python shade
.
Пример Плейбука
Следующий плейбук создает стек Heat для кластера, содержащего группу login
и группу compute
.
---
# Этот плейбук использует модули Ansible OpenStack для создания кластера
# с использованием нескольких экземпляров узлов с baremetal, и настраивает его
# для партиции SLURM
- hosts: openstack
roles:
- role: stackhpc.cluster-infra
cluster_name: "openhpc"
cluster_params:
cluster_prefix: "ohpc"
cluster_keypair: "admin_rsa"
cluster_net:
- net: "internal"
subnet: "internal"
floating_net: "external"
security_groups:
- "default"
- "slurm"
cluster_groups:
- name: "login"
flavor: "compute-B"
image: "CentOS7-OpenHPC"
num_nodes: 1
node_resource: "Cluster::InstanceWithVolume"
node_resource: "Cluster::NodeNet1WithFIP"
- name: "compute"
flavor: "compute-A"
image: "CentOS7-OpenHPC"
num_nodes: 16
cluster_group_vars:
cluster:
ansible_user: centos
Информация об Авторах
- Stig Telfer (stig@stackhpc.com)
- Bharat Kunwar (bharat@stackhpc.com)
This role generates software-defined OpenStack infrastructure that can be used for generating complex application topologies on demand.
ansible-galaxy install stackhpc/ansible-role-cluster-infra