stackhpc.cluster-infra

Infraestructura de OpenStack Cluster-as-a-Service

Este rol genera una infraestructura de OpenStack definida por software que se puede usar para crear topologías de aplicaciones complejas bajo demanda. Se utiliza una versión reciente de OpenStack Heat para lograr esto.

Requisitos

Las APIs de OpenStack deben ser accesibles desde el host objetivo. Se requiere OpenStack Newton o posterior. Las credenciales del cliente deben haberse configurado en el entorno o utilizando el formato clouds.yaml.

En cuanto a los paquetes de Python, los requisitos son:

  • ansible
  • jmespath (requerido por el filtro json_query)

Variables del Rol

cluster_venv: Ruta opcional a un virtualenv de Python en el que está instalado el paquete shade.

cluster_auth_type: Nombre opcional del complemento de autenticación de OpenStack a utilizar.

cluster_auth: Diccionario opcional que contiene información de autenticación.

cluster_cloud: Nombre opcional del nombre del cliente de configuración de OpenStack a utilizar.

cluster_state: Estado deseado del clúster, uno de present, absent o query. El valor predeterminado es present. Si el valor es query, el clúster no se actualizará, pero se consultará su configuración y se generará un inventario de Ansible.

cluster_name: Nombre para dar a la pila de Heat. El valor predeterminado es cluster.

cluster_environment_nodenet: Archivo de entorno que especifica el recurso a utilizar para el recurso de red por nodo, Cluster::NodeNet. NOTA: Esta opción está obsoleta, a favor de recursos para definir nodenet_resource dentro de grupos y un recurso predeterminado global usando nodenet_resource dentro de cluster_params.

cluster_environment_instance: Archivo de entorno que especifica el recurso a utilizar para las instancias, Cluster::Instance. NOTA: Esta opción está obsoleta, a favor de recursos para grupos específicos añadiendo una definición para node_resource al grupo, y un recurso predeterminado global definiendo node_resource dentro de cluster_params.

cluster_environment: Lista de archivos de entorno a utilizar al crear la pila de Heat.

cluster_params: Parámetros que se pasan a la pila de Heat.

  • cluster_prefix: Prefijo de nombre a utilizar para construir el nombre del host de la instancia.

  • cluster_groups: Lista estructurada en JSON de grupos de nodos, cada uno de los cuales se describe mediante un diccionario que contiene lo siguiente:

    • name: Un nombre para referirse a este grupo.
    • flavor: El nombre o UUID de un sabor de instancia a utilizar para desplegar este grupo.
    • image: El nombre o UUID de una imagen a utilizar para desplegar este grupo.
    • user: El nombre de un usuario de nube para el cual se han provisionado claves SSH y se ha configurado sudo sin contraseña. Puede ser (por ejemplo), centos, debian o ubuntu.
    • num_nodes: Número de nodos a crear dentro de este grupo.
    • volume_size: Tamaño opcional en GB de los volúmenes utilizados para iniciar instancias en este grupo cuando se utiliza el entorno instance-w-volume.yaml.
    • volume_type: Tipo opcional de volúmenes utilizados para iniciar instancias en este grupo cuando se utiliza el entorno instance-w-volume.yaml.
  • cluster_keypair: Nombre de un par de claves SSH a utilizar para acceder a las instancias.

  • cluster_az: Nombre de la zona de disponibilidad en la que crear las instancias.

  • cluster_config_drive: Si se debe proporcionar metadatos a través de un disco de configuración. El valor predeterminado es false.

  • cluster_net: Lista estructurada en JSON de redes, cada una de las cuales se describe mediante un diccionario que contiene lo siguiente:

    • net: Nombre o UUID de una red de neutron a la que se conectarán las instancias.
    • subnet: Nombre o UUID de una subred de neutron a la que se conectarán las instancias.
    • security_groups: Lista opcional de nombres o UUIDs de grupos de seguridad a los que agregar los puertos de las instancias. Los grupos de seguridad pueden estar presentes o ausentes en cada red enumerada.
    • floating_net: Nombre o UUID opcional de una red de neutron a la que se adjuntarán IPs flotantes cuando se utilicen los recursos Cluster::NodeNet1WithFIP o Cluster::NodeNet2WithFIP.
  • node_resource: Nombre de un recurso de la biblioteca de nombres de recursos de nodo personalizados. Este tipo de recurso se usa como predeterminado para grupos que no sobrescriben con un tipo de recurso de nodo específico.

    Opciones válidas incluyen:

    • Cluster::Instance: Una instancia con solo almacenamiento efímero. Este es el valor predeterminado.
    • Cluster::InstanceWithVolume: Una instancia provisionada con un volumen de Cinder.
  • nodenet_resource: Nombre de un recurso de la biblioteca de recursos de red personalizados para la red de nodos. Este tipo de recurso se utiliza para grupos que no especifican una configuración de red para las instancias del grupo.

    Opciones válidas incluyen:

    • Cluster::NodeNet1: Una sola red sin IP flotante asociada. Este es el valor predeterminado.
    • Cluster::NodeNet1WithFIP: Una sola red con IP flotante asignada y asociada al puerto.
    • Cluster::NodeNet1WithPreallocatedFIP: Una sola red con una IP flotante (tomada de una lista pre-asignada y proporcionada) y asociada al puerto.
    • Cluster::NodeNet2: Dos interfaces de red. Se utilizan las dos primeras redes enumeradas en cluster_net.
    • Cluster::NodeNet2WithFIP: Dos interfaces de red. Se utilizan las dos primeras redes enumeradas en cluster_net. Se asignará una IP flotante de la primera red y se asociará con la instancia.
    • Cluster::NodeNet2WithFIPSRIOV: Dos interfaces de red. La primera interfaz tiene una IP flotante adjunta (utilizando el floating_net y security_groups). La segunda interfaz se configura como un recurso de puerto SR-IOV, para una red interna de alto rendimiento. Se utilizan las dos primeras redes enumeradas en cluster_net.
    • Cluster::NodeNet3: Tres interfaces de red. Se utilizan las tres primeras redes enumeradas en cluster_net.
  • router_networks: Lista opcional de CIDR de subredes IP que deben añadirse como redes permitidas. Esto es necesario si un puerto está asociado con un nodo gateway que está realizando enrutamiento IP entre subredes. Deben coincidir con el formato de allowed_address_pairs [https://docs.openstack.org/heat/rocky/template_guide/openstack.html#OS::Neutron::Port-prop-allowed_address_pairs aquí]. Una configuración simple y permisiva para router_networks sería:

router_networks:
  - ip_address: "0.0.0.0/0"

cluster_inventory: Después del despliegue, se genera un archivo de inventario, que se puede usar en la configuración impulsada por Ansible posterior.

cluster_roles: Un conjunto de asignaciones de grupos a realizar en el archivo de inventario de Ansible que se genera. Este parámetro es una lista de diccionarios de la forma:

  • name: Nombre del grupo a definir en el inventario de Ansible.
  • groups: Una lista de grupos seleccionados de los objetos diccionario proporcionados a cluster_groups, arriba.

cluster_group_vars: Un diccionario que mapea grupos de inventario a variables de grupo que se deben definir para ese grupo. Las variables de grupo para cada grupo se definen como un diccionario que mapea nombres de variable a sus valores.

cluster_environment_group: Un nombre de grupo de Ansible opcional al que se agregarán todos los hosts del clúster y el localhost. Esto puede ser útil si hay un solo grupo que representa un entorno como desarrollo/etapa/producción.

Dependencias

Este rol depende de que el paquete de Python shade esté instalado en el host objetivo. El paquete puede instalarse en un entorno virtual de Python, en cuyo caso se debe especificar la ruta al virtualenv en la variable cluster_venv.

El rol stackhpc.os-shade puede utilizarse para instalar el paquete de Python shade.

Ejemplo de Playbook

El siguiente playbook crea una pila de Heat para un clúster que contiene un grupo de login y un grupo de compute.

---
# Este playbook utiliza los módulos de OpenStack de Ansible para crear un clúster
# utilizando varias instancias de nodos de cómputo baremetal y configurarlo
# para una partición 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

Información del Autor

Acerca del proyecto

This role generates software-defined OpenStack infrastructure that can be used for generating complex application topologies on demand.

Instalar
ansible-galaxy install stackhpc.cluster-infra
Licencia
apache-2.0
Descargas
281
Propietario
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.