Introduction à Kolla-Ansible¶
Introduction¶
Kolla-Ansible est un projet OpenStack qui permet de déployer les services OpenStack dans des conteneurs Docker, orchestrés via Ansible. C'est la méthode de déploiement recommandée pour les environnements de production.
Prérequis¶
Points à apprendre¶
Qu'est-ce que Kolla ?¶
Le projet Kolla comprend deux parties :
- Kolla : Construction des images Docker pour les services OpenStack
- Kolla-Ansible : Déploiement des conteneurs via Ansible
Architecture Kolla¶
graph TB
subgraph Deploy["Nœud Deploy"]
kolla_cli["kolla-ansible<br/>CLI"]
ansible["Ansible<br/>Playbooks & roles"]
inventory["Inventaire<br/>YAML"]
globals["globals.yml<br/>Paramètres globaux"]
passwords["passwords.yml<br/>Credentials"]
end
subgraph Registry["Registry Docker"]
images["Images Kolla<br/>quay.io/openstack.kolla"]
end
subgraph Target["Nœuds Cibles"]
docker["Docker Engine"]
containers["Conteneurs OpenStack"]
configs["/etc/kolla<br/>Configs"]
logs["/var/log/kolla<br/>Logs"]
end
kolla_cli --> ansible
ansible --> inventory
ansible --> globals
ansible --> passwords
ansible -->|SSH| docker
docker -->|Pull| images
docker --> containers
containers --> configs
containers --> logs
Avantages de Kolla-Ansible¶
| Avantage | Description |
|---|---|
| Isolation | Chaque service dans son conteneur |
| Reproductibilité | Images immutables |
| Rollback | Retour à version précédente facile |
| HA intégrée | HAProxy, Keepalived, Galera inclus |
| Upgrades | Rolling updates sans downtime |
| Flexibilité | Activation/désactivation services à la demande |
| Multi-distro | Ubuntu, Rocky, Debian supportés |
Structure d'un déploiement Kolla¶
/etc/kolla/
├── globals.yml # Configuration globale
├── passwords.yml # Mots de passe générés
├── config/ # Surcharges de configuration
│ ├── nova/
│ │ └── nova.conf # Ajouts/modifications nova.conf
│ ├── neutron/
│ │ └── ml2_conf.ini
│ └── ...
└── certificates/ # Certificats TLS (si enable_tls)
├── ca/
└── ...
~/kolla-venv/share/kolla-ansible/
├── ansible/
│ ├── inventory/ # Templates d'inventaire
│ ├── group_vars/ # Variables par groupe
│ └── roles/ # Rôles Ansible
└── tools/ # Scripts utilitaires
Cycle de vie du déploiement¶
flowchart LR
subgraph Preparation
A[Install Kolla] --> B[Configure globals.yml]
B --> C[Configure inventory]
C --> D[Generate passwords]
end
subgraph Deployment
E[bootstrap-servers] --> F[prechecks]
F --> G[deploy]
end
subgraph PostDeploy
H[post-deploy] --> I[Validation]
end
Preparation --> Deployment
Deployment --> PostDeploy
Commandes principales Kolla-Ansible¶
# Bootstrap des serveurs (installe Docker, prépare les nœuds)
kolla-ansible -i inventory bootstrap-servers
# Vérifications pré-déploiement
kolla-ansible -i inventory prechecks
# Déploiement complet
kolla-ansible -i inventory deploy
# Post-déploiement (credentials, scripts init)
kolla-ansible -i inventory post-deploy
# Reconfiguration (après modification globals.yml)
kolla-ansible -i inventory reconfigure
# Upgrade
kolla-ansible -i inventory upgrade
# Arrêt des services
kolla-ansible -i inventory stop
# Destruction complète
kolla-ansible -i inventory destroy --yes-i-really-really-mean-it
Services déployables¶
Kolla-Ansible peut déployer de nombreux services :
# Core (activés par défaut)
enable_keystone: yes
enable_nova: yes
enable_neutron: yes
enable_glance: yes
enable_cinder: yes
enable_horizon: yes
enable_placement: yes
# Optionnels
enable_heat: no
enable_magnum: no
enable_octavia: no
enable_barbican: no
enable_designate: no
enable_manila: no
enable_swift: no
enable_trove: no
enable_ironic: no
# Monitoring
enable_prometheus: no
enable_grafana: no
enable_central_logging: no
# Infra
enable_haproxy: yes
enable_keepalived: yes
enable_mariadb: yes
enable_memcached: yes
enable_rabbitmq: yes
Gestion des conteneurs¶
# Lister les conteneurs Kolla sur un nœud
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep kolla
# Logs d'un conteneur
docker logs -f nova_api
# Entrer dans un conteneur
docker exec -it nova_api bash
# Configuration d'un conteneur
docker exec nova_api cat /etc/nova/nova.conf
# Restart d'un conteneur
docker restart nova_api
Personnalisation des configurations¶
# Créer une surcharge pour Nova
mkdir -p /etc/kolla/config/nova
# Ajouter des paramètres à nova.conf
cat > /etc/kolla/config/nova/nova.conf << 'EOF'
[DEFAULT]
# Mes personnalisations
debug = true
[scheduler]
# Personnalisation scheduler
driver = filter_scheduler
EOF
# Appliquer avec reconfigure
kolla-ansible -i inventory reconfigure --tags nova
Meilleures pratiques¶
- Toujours utiliser un venv pour isoler les dépendances Python
- Versionner la configuration (globals.yml, inventory) dans Git
- Sauvegarder passwords.yml de manière sécurisée
- Tester dans un environnement de dev avant la production
- Utiliser les tags pour cibler des services spécifiques
- Monitorer les logs après chaque opération
Exemples pratiques¶
Vérifier la version de Kolla-Ansible¶
# Version installée
pip show kolla-ansible | grep Version
# Version correspondante OpenStack
# 19.x = OpenStack 2025.2 (Epoxy)
# 18.x = OpenStack 2025.1
# 17.x = OpenStack 2024.2 (Dalmatian)
Structure des tags Ansible¶
# Tags disponibles pour cibler des services
kolla-ansible -i inventory deploy --list-tags
# Déployer uniquement Nova
kolla-ansible -i inventory deploy --tags nova
# Déployer Nova et Neutron
kolla-ansible -i inventory deploy --tags nova,neutron
# Reconfigurer uniquement HAProxy
kolla-ansible -i inventory reconfigure --tags haproxy
Ressources¶
Checkpoint¶
- Je comprends le concept de Kolla et Kolla-Ansible
- Je connais les avantages du déploiement conteneurisé
- Je comprends la structure des fichiers de configuration
- Je connais les commandes principales de kolla-ansible
- Je sais où trouver les logs et configurations des conteneurs