Skip to content

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 :

  1. Kolla : Construction des images Docker pour les services OpenStack
  2. 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

  1. Toujours utiliser un venv pour isoler les dépendances Python
  2. Versionner la configuration (globals.yml, inventory) dans Git
  3. Sauvegarder passwords.yml de manière sécurisée
  4. Tester dans un environnement de dev avant la production
  5. Utiliser les tags pour cibler des services spécifiques
  6. 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