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
ouubuntu
.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'environnementinstance-w-volume.yaml
est utilisé.volume_type
: Type optionnel de volumes utilisés pour démarrer des instances dans ce groupe lorsque l'environnementinstance-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 estfalse
.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 ressourcesCluster::NodeNet1WithFIP
ouCluster::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 danscluster_net
sont utilisés.Cluster::NodeNet2WithFIP
: Deux interfaces réseau. Les deux premiers réseaux listés danscluster_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 utilisantfloating_net
etsecurity_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 danscluster_net
sont utilisés.Cluster::NodeNet3
: Trois interfaces réseau. Les trois premiers réseaux listés danscluster_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 deallowed_address_pairs
ici. Une configuration simple et permissive pourrouter_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
- 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.cluster-infra