Utiliser Kolla-Ansible pour déployer un environnement openstack

Posted on jeu. 20 mai 2021 in adminsys

A toutes fins utiles, il convient de toujours se reporter à la documentation officielle. Le blogpost qui suit n'en est d'ailleurs qu'une reprise, et un résumé, adaptée à la découverte de l'usage de kolla-ansible dans le cadre de l'installation d'un openstack d'exemple sur un serveur unique (dit "mono-node" ou "all-in-one").

Avant toute chose, il faut savoir que Kolla-Ansible est un ensemble de playbooks et de rôles ansible déjà tous prêt pour installer un openstack dans les règles de l'art. Ce dépôt ansible est écrit et maintenu par les équipes d'openstack pour représenter l'état de l'art de l'installation d'un openstack et peut être utilisé tel quel par tout un chacun.

Pré-requis

Avant d'utiliser Kolla-Ansible, il est important de connaitre ansible. Au moins des notions de cet outil et une connaissance même basique de son usage sont nécessaires pour ne pas être perdu.

Également, la machine sur laquelle vous allez installer openstack a besoin d'au-moins deux interfaces réseau. Sans cela, impossible (ou alors, vraiment compliqué et ça dépasse le cadre de ce post) d'installer openstack.

Installation de Kolla-ansible

Dépendances

Comme pour tout, il faut commencer par installer les dépendances. Heureusement, c'est python qui propulse ansible, du coup, pour les dépendances, c'est relativement vite fait. Pour mon PC sous fedora, ça donne ça (pour d'autres distrib', voir la doc officielle kolla) :

sudo dnf install python3-devel libffi-devel gcc openssl-devel python3-libselinux
python3 -m venv venv
. venv/bin/activate.fish       # . venv/bin/activate si vous utilisez bash
pip install 'ansible<3.0' kolla-ansible

Préparation de kolla-ansible

sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla
cp -rv venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla

A noter que les deux fichiers globals.yml et password.yml qui sont copiés dans /etc/kolla sont vide de configuration pour le premier (faite un grep -v '#' dessus pour vérifier) et inutilisable pour le second (toutes les variables sont vides).

cp -v venv/share/kolla-ansible/ansible/inventory/* .

Les deux fichiers copiés ne vont pas servir tels quels, il va falloir les modifier un peu avant usage. A savoir que dans le cadre de ce post, nous n'allons utiliser que le fichier d'inventaire all-in-one. Il va nous permettre d'installer openstack sur un seul serveur. C'est parfait pour découvrir kolla-ansible, mais ne l'utilisez surtout pas ainsi en prod.

Configuration

Configuration ansible

Avant d'utiliser Ansible, il faut bien sûr commener par préparer l'inventaire. Dans notre cas, il va s'agir du fichier all-in-one copié à l'étape précédente. Ce qui nous intéresse, ce sont uniquement les premières lignes de ce fichier. Les reste du fichier constitue des groupe et sous-groupes que nous n'avons pas d'intérêt à modifier ici, mais qui seront pratique/utilisés lors du déploiement et le configuration des service.

Si vous souhaitez déployer openstack en local (c'est à dire si toutes les opérations que vous avez faites depuis le début ont été faite sur la machine où vous souhaitez déployer openstack), vous n'avez pas besoin de modifier ce fichier all-in-one. Sinon, si comme moi, vous préférer exécuter ansible sur une machine dédiée ou votre poste et installer openstack ailleurs, il faut le modifier. Voilà ce que donnent les premières lignes modifiées pour moi :

# These initial groups are the only groups required to be modified. The
# additional groups are for more control of the environment.
[control]
sandbox-test-user1     ansible_host=10.8.X.Y ansible_user=debian ansible_become=true

[network:children]
control

[compute:children]
control

[storage:children]
control

[monitoring:children]
control

[deployment:children]
control

Et plus qu'à vérifier ça avec la commande classique ansible (ne faites pas attention au warning, ansible n'aime pas les "-" dans les noms des groupes) :

> ansible -i all-in-one all -m ping
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
sandbox-test-user1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Configuration kolla

Kolla a besoin que l'on configure le fichier /etc/kolla/passwords.yml copié précédemment. Ce fichier va contenir tous les mots de passe qui seront ensuite paramétré dans l'openstack. Il ne s'agit pas de mot de passe utilisateurs, mais plutôt des services qui doivent s'identifier et s'authentifier entre-eux. Pour rappel, openstack est codé en micro-services. Et ces micro-services ont besoin de s'authentifier entre-eux pour être sûr qu'un intrus ne vienne les parasiter.

Cette configuration serait rédibitoire à faire manuellement, alors kolla met un outils à notre disposition pour faire ça simplement :

> grep -v '#' /etc/kolla/passwords.yml | head # Avant l'exécution, on voit bien que le fichier ne contient aucun mot de passe
---
rbd_secret_uuid:
cinder_rbd_secret_uuid:

database_password:
mariadb_backup_database_password:

docker_registry_password:

vmware_dvs_host_password:
> kolla-genpwd
> head /etc/kolla/passwords.yml # Alors qu'après, ils sont tous là
aodh_database_password: YPaA................................vhpL
aodh_keystone_password: DOHa................................b8q7
barbican_crypto_key: 4KwA....................................FsY=
barbican_database_password: PI73................................Fo7v
barbican_keystone_password: QE3Q................................zFv3
barbican_p11_password: HfWS................................6xOn
bifrost_ssh_key:
  private_key: '-----BEGIN PRIVATE KEY-----

    MIIJ........................................................kg64

Nous devons maintenant configurer le second fichier copié précédemment : /etc/kolla/globals.yml. Il s'agit du fichier de configuration principal pour kolla. C'est de lui que vont être extrait tous les paramètres nécessaires à l'installation d'un openstack. La configuration réseau, quels services déployer, etc...

VOici le strict minimum à vérifier/configurer (pour plus d'information, se reporter à la doc officielle kolla):

network_interface: "ens3" # mettez ici l'interface réseau principale de la machine sur laquelle l'openstack sera déployé. C'est l'interface réseau qui sera utilisée pour l'administration de l'openstack

neutron_external_interface: "ens4" # Il s'agit de l'interface réseau qui sera utilisée pour les communications entres les VM et l'extérieur de l'openstack

kolla_internal_vip_address: "172.20.2.121" # Il faut indiquer une adresse IP non-utilisée sur l'interface "network_interface" ci-dessus. Elle servira de vIP (IP flotante) pour accéder aux API de l'openstack, ainsi que la webUI horizon

Vous pouvez parcourir ce fichier, les variables importantes sont commentées et toutes ont des valeurs par défaut qui vous satisferont en première utilisation.

Déploiement

Le déploiement proprement dit

Dans l'ordre, on va installer les dépendances bas-niveau sur l'host, puis y déployer openstack après quelques vérifications.

kolla-ansible -i ./all-in-one bootstrap-servers
kolla-ansible -i ./all-in-one prechecks
kolla-ansible -i ./all-in-one deploy

A savoir, j'ai eu cette erreur, lors de la première commande, sur un host en Debian 10 :

TASK [baremetal : Install docker apt gpg key] *************************************************************************************************************************************
fatal: [etienne-kolla-test1]: FAILED! => {"changed": false, "msg": "Failed to find required executable gpg in paths: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"}

Ça se règle avec l'installation de gnupg dessus à la main (apt install gnupg sur l'host openstask).

La vérification

Un fois que tout est terminé, vous pouvez vous rendre sur l'interface webUI horizon http://172.20.2.121/, où l'adresse IP est celle renseignée dans la variable kolla_internal_vip_address précédemment. Vous devriez arriver sur la page d'authentification d'horizon. Le login par défaut est admin et le mot de passe associé est indiqué dans la variable keystone_admin_password présente dans le fichier /etc/kolla/passwords.yml.

Il est possible de récupérer simplement et rapidement le fichier RC pour intéragir avec le nouvel openstack, sans devoir passer par la webUI horizon. Pour cela, lancez cette commande :

kolla-ansible -i ./all-in-one -e 'node_config=/where/you/want' post-deploy

A savoir, l'argument -e 'node_config=... n'est pas obligatoire, mais sans cela, kolla-ansible va essayer de créer le fichier RC dans /etc/kolla. A titre perso, je pense que c'est moyen, d'où cet ajout. Deuxième chose, vous pourriez avoir une erreur selinux (ça a été mon cas, sur ma Fedora). Ca se règle avec un pip install selinux.