Skip to content

Préparation pour Kolla-Ansible

Introduction

Cette section prépare le nœud de déploiement avec tous les outils nécessaires pour exécuter Kolla-Ansible : Python, environnement virtuel, Ansible, et les dépendances.

Prérequis

Points à apprendre

Configuration du nœud deploy

Se connecter au nœud deploy :

ssh ubuntu@deploy

Installation des dépendances système

# Mise à jour
sudo apt update && sudo apt upgrade -y

# Paquets nécessaires
sudo apt install -y \
  python3 \
  python3-pip \
  python3-venv \
  python3-dev \
  libffi-dev \
  gcc \
  libssl-dev \
  git \
  ansible \
  sshpass

Création de l'environnement virtuel Python

# Créer le venv
python3 -m venv ~/kolla-venv

# Activer
source ~/kolla-venv/bin/activate

# Mettre à jour pip
pip install -U pip setuptools wheel

Installation de Kolla-Ansible

# Activer le venv si pas déjà fait
source ~/kolla-venv/bin/activate

# Installer Kolla-Ansible (version 2025.2)
pip install 'kolla-ansible==19.*'

# Ou depuis git pour la dernière version
# pip install git+https://opendev.org/openstack/kolla-ansible@stable/2025.2

# Installer les dépendances Ansible
pip install 'ansible-core>=2.16,<2.18'
pip install docker

# Vérifier l'installation
kolla-ansible --version
ansible --version

Installation des collections Ansible requises

# Installer les collections Galaxy requises
kolla-ansible install-deps

# Vérifier
ansible-galaxy collection list | grep -E "(kolla|community)"

Copie des fichiers de configuration

# Créer le répertoire de configuration
sudo mkdir -p /etc/kolla

# Copier les fichiers de configuration
sudo cp -r ~/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
sudo chown -R $USER:$USER /etc/kolla

# Copier l'inventaire
cp ~/kolla-venv/share/kolla-ansible/ansible/inventory/* ~/

Configuration SSH sans mot de passe

# Générer une clé SSH si pas déjà fait
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519

# Distribuer la clé sur tous les nœuds
for host in controller-{1,2,3} compute-{1,2}; do
  ssh-copy-id -o StrictHostKeyChecking=no ubuntu@$host
done

# Tester
for host in controller-{1,2,3} compute-{1,2}; do
  ssh ubuntu@$host hostname
done

Configuration de l'inventaire multinode

cat > ~/multinode << 'EOF'
# Kolla-Ansible Inventory for OpenStack HA Lab

[control]
controller-1 ansible_host=10.0.0.11
controller-2 ansible_host=10.0.0.12
controller-3 ansible_host=10.0.0.13

[network]
controller-1
controller-2
controller-3

[compute]
compute-1 ansible_host=10.0.0.21
compute-2 ansible_host=10.0.0.22

[monitoring]
controller-1

[storage]
controller-1
controller-2
controller-3

# Ceph (deployed separately, but integrated)
[ceph-mon]
controller-1
controller-2
controller-3

[ceph-osd]
controller-1
controller-2
controller-3

[ceph-mgr]
controller-1
controller-2
controller-3

# MariaDB Galera cluster
[mariadb]
controller-1
controller-2
controller-3

# RabbitMQ cluster
[rabbitmq]
controller-1
controller-2
controller-3

# Memcached
[memcached]
controller-1
controller-2
controller-3

# Pour les groupes Kolla standards
[baremetal:children]
control
network
compute
storage
monitoring

[all:vars]
ansible_user=ubuntu
ansible_become=true
ansible_python_interpreter=/usr/bin/python3

# Network interfaces
network_interface=enp1s0
neutron_external_interface=enp3s0
kolla_internal_vip_address=10.0.0.10
kolla_external_vip_address=192.168.100.10

# Storage interface for Ceph
storage_interface=enp2s0
EOF

Installation de Docker sur tous les nœuds

Script à exécuter depuis le nœud deploy :

#!/bin/bash
# install-docker-all.sh

for host in controller-{1,2,3} compute-{1,2}; do
  echo "=== Installing Docker on $host ==="
  ssh ubuntu@$host << 'REMOTE_SCRIPT'
# Installation Docker
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin

# Configurer Docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json << 'DOCKERCONF'
{
  "live-restore": true,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  },
  "storage-driver": "overlay2"
}
DOCKERCONF

sudo systemctl enable docker
sudo systemctl restart docker

# Ajouter l'utilisateur au groupe docker
sudo usermod -aG docker ubuntu
REMOTE_SCRIPT
done

echo "Docker installé sur tous les nœuds"

Préparation des disques Ceph sur les controllers

#!/bin/bash
# prepare-ceph-disks.sh

for host in controller-{1,2,3}; do
  echo "=== Preparing Ceph disk on $host ==="
  ssh ubuntu@$host << 'REMOTE_SCRIPT'
# Vérifier le disque vdb
lsblk /dev/vdb

# Nettoyer le disque (attention: efface tout!)
sudo wipefs -a /dev/vdb
sudo dd if=/dev/zero of=/dev/vdb bs=1M count=100

# Le disque sera utilisé directement par Ceph (pas de partition)
echo "Disk /dev/vdb ready for Ceph OSD"
REMOTE_SCRIPT
done

Test de connectivité Ansible

# Activer le venv
source ~/kolla-venv/bin/activate

# Test ping Ansible
ansible -i ~/multinode all -m ping

# Test gather facts
ansible -i ~/multinode all -m setup -a "filter=ansible_distribution*"

Génération des mots de passe

# Générer tous les mots de passe
kolla-genpwd

# Vérifier
cat /etc/kolla/passwords.yml | head -20

Structure finale du nœud deploy

# Vérification de la structure
tree -L 2 ~ /etc/kolla

# Attendu:
# /home/ubuntu/
# ├── kolla-venv/
# │   └── ... (environnement Python)
# ├── multinode (inventaire)
# └── ...
#
# /etc/kolla/
# ├── globals.yml
# ├── passwords.yml
# └── ... (autres configs)

Exemples pratiques

Script de vérification pré-déploiement

#!/bin/bash
# pre-deploy-check.sh

source ~/kolla-venv/bin/activate

echo "=== Vérification environnement Kolla ==="

echo -e "\n1. Version Kolla-Ansible:"
kolla-ansible --version

echo -e "\n2. Version Ansible:"
ansible --version | head -1

echo -e "\n3. Collections Ansible:"
ansible-galaxy collection list | grep kolla

echo -e "\n4. Connectivité SSH:"
ansible -i ~/multinode all -m ping -o

echo -e "\n5. Docker sur les nœuds:"
ansible -i ~/multinode all -m shell -a "docker --version" -o

echo -e "\n6. Disques Ceph:"
ansible -i ~/multinode ceph-osd -m shell -a "lsblk /dev/vdb" -o

echo -e "\n7. Fichiers de configuration:"
ls -la /etc/kolla/

echo -e "\n8. Mots de passe générés:"
if [ -f /etc/kolla/passwords.yml ]; then
  echo "passwords.yml existe ($(wc -l < /etc/kolla/passwords.yml) lignes)"
else
  echo "ERREUR: passwords.yml manquant!"
fi

Alias utiles

# Ajouter à ~/.bashrc
cat >> ~/.bashrc << 'EOF'

# Kolla-Ansible aliases
alias ka='source ~/kolla-venv/bin/activate'
alias kolla='kolla-ansible -i ~/multinode'
alias kolla-deploy='kolla-ansible -i ~/multinode deploy'
alias kolla-reconfig='kolla-ansible -i ~/multinode reconfigure'
alias kolla-stop='kolla-ansible -i ~/multinode stop'
alias kolla-destroy='kolla-ansible -i ~/multinode destroy --yes-i-really-really-mean-it'

# Ansible aliases
alias ap='ansible-playbook'
alias ai='ansible -i ~/multinode'
EOF

source ~/.bashrc

Ressources

Checkpoint

  • Environnement virtuel Python créé et activé
  • Kolla-Ansible installé (version 19.x pour 2025.2)
  • Collections Ansible installées
  • SSH sans mot de passe vers tous les nœuds
  • Docker installé sur tous les nœuds cibles
  • Inventaire multinode configuré
  • Mots de passe générés
  • Test Ansible ping réussi sur tous les nœuds