stackhpc.cluster-infra

Infrastructure Cluster-as-a-Service OpenStack

Ce rôle génère une infrastructure OpenStack définie par logiciel qui peut être utilisée pour créer des topologies d'application complexes à la demande. Une version récente d'OpenStack Heat est utilisée pour cela.

Exigences

Les API OpenStack doivent être accessibles depuis l'hôte cible. OpenStack Newton ou une version ultérieure est nécessaire. Les identifiants client doivent être définis dans l'environnement, ou en utilisant le format clouds.yaml.

Concernant les packages Python, les exigences sont :

  • ansible
  • jmespath (nécessaire pour le filtre json_query)

Variables du rôle

cluster_venv : Chemin facultatif vers un environnement virtuel Python dans lequel le package Python shade est installé.

cluster_auth_type : Nom facultatif du plugin d'authentification OpenStack à utiliser.

cluster_auth : Dictionnaire facultatif contenant les informations d'authentification.

cluster_cloud : Nom facultatif du cloud à utiliser dans la config du client OpenStack.

cluster_state : État souhaité du cluster, qui peut être present, absent ou query. La valeur par défaut est present. Si la valeur est query, le cluster ne sera pas mis à jour, mais sa configuration sera interrogée et un inventaire Ansible sera généré.

cluster_name : Nom à donner à la pile Heat.
Par défaut, il s'agit de cluster.

cluster_environment_nodenet : Un fichier d'environnement spécifiant la ressource à utiliser pour la ressource réseau par nœud, Cluster::NodeNet. REMARQUE : Cette option est dépréciée, au profit des ressources pour définir nodenet_resource au sein des groupes et d'une ressource par défaut globale utilisant nodenet_resource dans cluster_params.

cluster_environment_instance : Un fichier d'environnement spécifiant la ressource à utiliser pour les instances, Cluster::Instance. REMARQUE : Cette option est dépréciée, au profit des ressources pour des groupes spécifiques en ajoutant une définition pour node_resource au groupe, et une ressource par défaut globale en définissant node_resource dans cluster_params.

cluster_environment : Une liste de fichiers d'environnement à utiliser lors de la création de la pile Heat.

cluster_params : Paramètres passés à la pile Heat.

  • cluster_prefix : Préfixe de nom à utiliser pour la construction du nom d'hôte de l'instance.

  • cluster_groups : Liste structurée en JSON des groupes de nœuds, chacun décrit par un dictionnaire, contenant les éléments suivants :

    • name : Un nom pour se référer à ce groupe.
    • flavor : Le nom ou l'UUID d'un type d'instance à utiliser pour déployer ce groupe.
    • image : Le nom ou l'UUID d'une image à utiliser pour déployer ce groupe.
    • user : Le nom d'un utilisateur cloud pour lequel des clés SSH ont été fournies et sudo sans mot de passe a été configuré. Cela pourrait être, par exemple, centos, debian ou ubuntu.
    • num_nodes : Le nombre de nœuds à créer dans ce groupe.
    • volume_size : Taille optionnelle en Go des volumes utilisés pour démarrer des instances dans ce groupe lorsque l'environnement instance-w-volume.yaml est utilisé.
    • volume_type : Type optionnel de volumes utilisés pour démarrer des instances dans ce groupe lorsque l'environnement instance-w-volume.yaml est utilisé.
  • cluster_keypair : Nom d'une paire de clés SSH à utiliser pour accéder aux instances.

  • cluster_az : Nom de la zone de disponibilité où créer les instances.

  • cluster_config_drive : Indique si des métadonnées doivent être fournies via un disque de configuration. La valeur par défaut est false.

  • cluster_net : Liste structurée en JSON des réseaux, chacun décrit par un dictionnaire, contenant les éléments suivants :

    • net : Nom ou UUID d'un réseau neutron auquel attacher les instances.
    • subnet : Nom ou UUID d'un sous-réseau neutron auquel attacher les instances.
    • security_groups : Liste optionnelle de noms ou UUID de groupes de sécurité à ajouter aux ports des instances. Les groupes de sécurité peuvent être présents ou absents sur chaque réseau listé.
    • floating_net : Nom ou UUID optionnel d'un réseau neutron auquel attacher des IP flottantes lorsque les ressources Cluster::NodeNet1WithFIP ou Cluster::NodeNet2WithFIP sont utilisées.
  • node_resource : Nom d'une ressource à partir de la bibliothèque de noms de ressources de nœud personnalisées. Ce type de ressource est utilisé comme valeur par défaut pour les groupes qui ne remplacent pas par un type de ressource de nœud spécifique.

    Options valides incluent :

    • Cluster::Instance : Une instance avec stockage éphémère uniquement. C'est la valeur par défaut.
    • Cluster::InstanceWithVolume : Une instance provisionnée avec un volume Cinder.
  • nodenet_resource : Nom d'une ressource à partir de la bibliothèque de ressources réseau personnalisées pour le réseau des nœuds. Ce type de ressource est utilisé pour les groupes qui ne spécifient pas de configuration réseau pour les instances du groupe.

    Options valides incluent :

    • Cluster::NodeNet1 : Un seul réseau sans IP flottante associée. C'est la valeur par défaut.
    • Cluster::NodeNet1WithFIP : Un seul réseau avec une IP flottante allouée et associée au port.
    • Cluster::NodeNet1WithPreallocatedFIP : Un seul réseau avec une IP flottante (prise d'une liste pré-allouée et fournie) et associée au port.
    • Cluster::NodeNet2 : Deux interfaces réseau. Les deux premiers réseaux listés dans cluster_net sont utilisés.
    • Cluster::NodeNet2WithFIP : Deux interfaces réseau. Les deux premiers réseaux listés dans cluster_net sont utilisés. Une IP flottante sera allouée à partir du premier réseau et associée à l'instance.
    • Cluster::NodeNet2WithFIPSRIOV : Deux interfaces réseau. La première interface a une IP flottante attachée (en utilisant floating_net et security_groups). La seconde interface est configurée comme une ressource de port SR-IOV, pour un réseau interne à hautes performances. Les deux premiers réseaux listés dans cluster_net sont utilisés.
    • Cluster::NodeNet3 : Trois interfaces réseau. Les trois premiers réseaux listés dans cluster_net sont utilisés.
  • router_networks : Liste optionnelle de CIDR de sous-réseau IP à ajouter en tant que réseaux autorisés. Cela est nécessaire si un port est associé à un nœud passerelle réalisant un routage IP entre les sous-réseaux. Ceux-ci doivent correspondre au format de allowed_address_pairs ici. Une configuration simple et permissive pour router_networks serait :

router_networks:
  - ip_address: "0.0.0.0/0"

cluster_inventory : Après déploiement, un fichier d'inventaire est généré, qui peut être utilisé pour une configuration ultérieure via Ansible.

cluster_roles : Un ensemble d'assignations de groupes à définir dans le fichier d'inventaire Ansible généré. Ce paramètre est une liste de dictionnaires de la forme :

  • name : Nom du groupe à définir dans l'inventaire Ansible.
  • groups : Liste de groupes sélectionnés à partir des objets dictionnaires fournis à cluster_groups, ci-dessus.

cluster_group_vars : Un dictionnaire reliant les groupes d'inventaire à des variables de groupe à définir pour ce groupe. Les variables de groupe pour chaque groupe sont définies comme un dictionnaire reliant les noms des variables à leurs valeurs.

cluster_environment_group : Un nom de groupe Ansible facultatif auquel tous les hôtes du cluster et localhost seront ajoutés. Cela peut être utile s'il existe un seul groupe représentant un environnement tel que développement/staging/production.

Dépendances

Ce rôle dépend de l'installation du package Python shade sur l'hôte cible. Le package peut être installé dans un environnement virtuel Python, auquel cas le chemin vers cet environnement virtuel doit être spécifié dans la variable cluster_venv.

Le rôle stackhpc.os-shade peut être utilisé pour installer le package Python shade.

Exemple de playbook

Le playbook suivant crée une pile Heat pour un cluster contenant un groupe login et un groupe compute.

---
# Ce playbook utilise les modules OpenStack d'Ansible pour créer un cluster 
# utilisant un certain nombre d'instances de nœuds de calcul baremetal, 
# et le configure pour une partition 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

Informations sur l'auteur

À propos du projet

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

Installer
ansible-galaxy install stackhpc.cluster-infra
Licence
apache-2.0
Téléchargements
281
Propriétaire
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.