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¶
- Création VMs Controllers
- Réseau du lab
- Nœud deploy accessible en SSH
Points à apprendre¶
Configuration du nœud deploy¶
Se connecter au nœud 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¶
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