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

Информация об Авторах

О проекте

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
Лицензия
apache-2.0
Загрузки
269
Владелец
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.