Skip to content

Runbooks Opérationnels

Introduction

Les runbooks documentent les procédures opérationnelles standardisées pour gérer l'infrastructure OpenStack. Ils permettent une exécution cohérente et réduisent les erreurs humaines lors des opérations de maintenance.

Prérequis

Points à apprendre

Structure d'un runbook

graph TD
    subgraph "En-tête"
        t1[Titre]
        t2[Version / Date]
        t3[Auteur]
        t4[Approbateur]
    end

    subgraph "Contexte"
        c1[Objectif]
        c2[Prérequis]
        c3[Impacts]
        c4[Temps estimé]
    end

    subgraph "Procédure"
        p1[Étapes numérotées]
        p2[Commandes exactes]
        p3[Vérifications]
        p4[Points de décision]
    end

    subgraph "Rollback"
        r1[Critères rollback]
        r2[Procédure retour]
    end

    subgraph "Post-opération"
        po1[Validation]
        po2[Communication]
        po3[Documentation]
    end

    t1 --> c1
    c1 --> p1
    p1 --> r1
    r1 --> po1

RB-001: Ajout d'un compute node

# RB-001: Ajout d'un Compute Node

## Métadonnées
| Champ | Valeur |
|-------|--------|
| Version | 1.2 |
| Date | 2024-12-01 |
| Auteur | Ops Team |
| Temps estimé | 45 minutes |
| Impact | Aucun (capacité additionnelle) |

## Objectif
Ajouter un nouveau serveur compute au cluster OpenStack pour augmenter la capacité.

## Prérequis
- [ ] Serveur provisionné avec Ubuntu 22.04
- [ ] Réseau configuré (management, tenant, storage)
- [ ] Accès SSH depuis le deploy node
- [ ] Entrée dans /etc/hosts ou DNS
- [ ] Clé SSH déployée

## Procédure

### Phase 1: Préparation (10 min)

1. **Vérifier la connectivité**
   ```bash
   ssh root@compute-new "hostname && ip a | grep -E '^[0-9]|inet '"
   ```

2. **Mettre à jour l'inventaire**
   ```bash
   vi /etc/kolla/inventory
   # Ajouter sous [compute]:
   # compute-new ansible_host=10.0.0.24
   ```

3. **Vérifier l'inventaire**
   ```bash
   ansible -i /etc/kolla/inventory compute-new -m ping
   ```

### Phase 2: Bootstrap (15 min)

4. **Bootstrap du serveur**
   ```bash
   kolla-ansible -i /etc/kolla/inventory bootstrap-servers --limit compute-new
   ```
   **Validation:** Pas d'erreur rouge dans l'output

5. **Vérifier Docker**
   ```bash
   ssh compute-new "docker info | grep 'Server Version'"
   ```
   **Attendu:** Version >= 24.0

### Phase 3: Déploiement (15 min)

6. **Déployer les services compute**
   ```bash
   kolla-ansible -i /etc/kolla/inventory deploy --limit compute-new
   ```
   **Validation:** PLAY RECAP avec 0 failed

7. **Vérifier les containers**
   ```bash
   ssh compute-new "docker ps --format 'table {{.Names}}\t{{.Status}}'"
   ```
   **Attendu:** nova_compute, neutron_openvswitch_agent UP

### Phase 4: Intégration (5 min)

8. **Vérifier l'enregistrement dans Nova**
   ```bash
   openstack compute service list | grep compute-new
   ```
   **Attendu:** State = up, Status = enabled

9. **Vérifier les ressources**
   ```bash
   openstack hypervisor show compute-new
   ```

10. **Test de création VM**
    ```bash
    openstack server create --flavor m1.tiny --image cirros \
        --availability-zone nova:compute-new \
        test-compute-new --wait
    openstack server delete test-compute-new
    ```

## Validation finale
- [ ] Service nova-compute UP
- [ ] Agent neutron UP
- [ ] VM de test créée et supprimée
- [ ] Monitoring actif sur le nouveau node

## Rollback
Si problème lors du déploiement:
```bash
kolla-ansible -i /etc/kolla/inventory destroy --limit compute-new --yes-i-really-really-mean-it

Post-opération

  • Mettre à jour la documentation du cluster
  • Ajouter au monitoring
  • Notifier l'équipe
    ### RB-002: Remplacement d'un disque OSD Ceph
    
    ```markdown
    # RB-002: Remplacement Disque OSD Ceph
    
    ## Métadonnées
    | Champ | Valeur |
    |-------|--------|
    | Version | 1.0 |
    | Temps estimé | 30-60 minutes |
    | Impact | Dégradation temporaire |
    | Maintenance | Non requise |
    
    ## Objectif
    Remplacer un disque OSD défaillant dans le cluster Ceph.
    
    ## Prérequis
    - [ ] Disque de remplacement disponible
    - [ ] Cluster Ceph HEALTH_WARN ou OK
    - [ ] Backup récent vérifié
    
    ## Procédure
    
    ### Phase 1: Identification (5 min)
    
    1. **Identifier l'OSD défaillant**
       ```bash
       ceph osd tree
       ceph health detail
       ```
       Note: OSD.XX = _______
    
    2. **Identifier le serveur et le disque**
       ```bash
       ceph osd find <OSD_ID>
       ```
       Serveur: _______ Disque: _______
    
    ### Phase 2: Préparation (5 min)
    
    3. **Marquer l'OSD out**
       ```bash
       ceph osd out <OSD_ID>
       ```
       **Validation:** `ceph -s` montre rebalancing
    
    4. **Attendre la migration (optionnel)**
       ```bash
       ceph -w
       # Attendre HEALTH_OK ou continuer si urgent
       ```
    
    ### Phase 3: Retrait (10 min)
    
    5. **Arrêter l'OSD**
       ```bash
       ssh <HOST> "systemctl stop ceph-osd@<OSD_ID>"
       ```
    
    6. **Supprimer l'OSD**
       ```bash
       ceph osd crush remove osd.<OSD_ID>
       ceph auth del osd.<OSD_ID>
       ceph osd rm <OSD_ID>
       ```
    
    7. **Nettoyer le disque (si réutilisation)**
       ```bash
       ssh <HOST> "ceph-volume lvm zap /dev/<DISK> --destroy"
       ```
    
    ### Phase 4: Remplacement physique (variable)
    
    8. **Remplacer le disque physiquement**
       - Suivre la procédure du datacenter
       - Attendre que le nouveau disque soit détecté
    
    9. **Vérifier le nouveau disque**
       ```bash
       ssh <HOST> "lsblk"
       ```
       Nouveau disque: _______
    
    ### Phase 5: Création nouvel OSD (10 min)
    
    10. **Créer le nouvel OSD**
        ```bash
        ceph orch daemon add osd <HOST>:/dev/<NEW_DISK>
        ```
        ou avec cephadm:
        ```bash
        cephadm shell -- ceph orch daemon add osd <HOST>:/dev/<NEW_DISK>
        ```
    
    11. **Vérifier le nouvel OSD**
        ```bash
        ceph osd tree
        ceph -s
        ```
    
    ### Phase 6: Validation (5 min)
    
    12. **Attendre recovery**
        ```bash
        ceph -w
        # Attendre HEALTH_OK
        ```
    
    ## Validation finale
    - [ ] Nouvel OSD UP et IN
    - [ ] Cluster HEALTH_OK
    - [ ] Pas de PGs unclean
    
    ## Rollback
    Pas de rollback possible une fois l'ancien disque retiré.
    En cas de problème avec le nouveau disque, répéter la procédure.
    
    ## Post-opération
    - [ ] Documenter le changement (S/N ancien et nouveau)
    - [ ] Vérifier les alertes
    - [ ] Ticket maintenance datacenter fermé
    

RB-003: Rotation des certificats TLS

# RB-003: Rotation Certificats TLS

## Métadonnées
| Champ | Valeur |
|-------|--------|
| Version | 1.1 |
| Temps estimé | 30 minutes |
| Impact | Coupure brève par service |
| Maintenance | Fenêtre recommandée |

## Objectif
Renouveler les certificats TLS avant expiration.

## Prérequis
- [ ] Nouveaux certificats générés
- [ ] Certificats validés (dates, SAN)
- [ ] Backup des anciens certificats

## Procédure

### Phase 1: Préparation (10 min)

1. **Vérifier les certificats actuels**
   ```bash
   openssl x509 -in /etc/kolla/certificates/haproxy.pem -noout -dates
   ```
   Expiration actuelle: _______

2. **Valider les nouveaux certificats**
   ```bash
   openssl x509 -in /path/to/new/haproxy.pem -noout -text | grep -E "(Not|Subject|DNS)"
   ```

3. **Backup des anciens certificats**
   ```bash
   cp -r /etc/kolla/certificates /etc/kolla/certificates.bak.$(date +%Y%m%d)
   ```

### Phase 2: Déploiement (15 min)

4. **Copier les nouveaux certificats**
   ```bash
   cp /path/to/new/haproxy.pem /etc/kolla/certificates/haproxy.pem
   cp /path/to/new/haproxy-internal.pem /etc/kolla/certificates/haproxy-internal.pem
   ```

5. **Reconfigurer HAProxy**
   ```bash
   kolla-ansible -i /etc/kolla/inventory reconfigure --tags haproxy
   ```
   **Validation:** Pas d'erreur

6. **Vérifier HAProxy**
   ```bash
   docker exec haproxy haproxy -c -f /etc/haproxy/haproxy.cfg
   ```
   **Attendu:** Configuration valid

### Phase 3: Vérification (5 min)

7. **Tester les endpoints**
   ```bash
   curl -v https://cloud.example.com:5000/v3 2>&1 | grep -E "(SSL|expire)"
   ```

8. **Vérifier tous les services**
   ```bash
   openstack token issue
   openstack server list --limit 1
   ```

## Validation finale
- [ ] Certificats renouvelés (vérifier date expiration)
- [ ] Tous les endpoints accessibles
- [ ] Pas d'erreur TLS dans les logs

## Rollback
```bash
cp /etc/kolla/certificates.bak.*/haproxy*.pem /etc/kolla/certificates/
kolla-ansible -i /etc/kolla/inventory reconfigure --tags haproxy

Post-opération

  • Supprimer le backup après 7 jours
  • Mettre à jour le calendrier de rotation
  • Documenter la nouvelle date d'expiration
    ### RB-004: Évacuation d'un hyperviseur
    
    ```markdown
    # RB-004: Évacuation Hyperviseur
    
    ## Métadonnées
    | Champ | Valeur |
    |-------|--------|
    | Version | 1.0 |
    | Temps estimé | Variable (dépend du nombre de VMs) |
    | Impact | Migration des VMs (transparent si live) |
    | Maintenance | Non requise |
    
    ## Objectif
    Évacuer toutes les VMs d'un hyperviseur pour maintenance.
    
    ## Prérequis
    - [ ] Capacité suffisante sur les autres hyperviseurs
    - [ ] Shared storage (Ceph) fonctionnel
    - [ ] VMs supportent live migration
    
    ## Procédure
    
    ### Phase 1: Préparation (5 min)
    
    1. **Identifier les VMs**
       ```bash
       openstack server list --host <COMPUTE_HOST> --all-projects
       ```
       Nombre de VMs: _______
    
    2. **Vérifier la capacité disponible**
       ```bash
       openstack hypervisor stats show
       ```
       VCPUs libres: _______ RAM libre: _______
    
    3. **Désactiver le scheduling**
       ```bash
       openstack compute service set --disable --disable-reason "Maintenance" <COMPUTE_HOST> nova-compute
       ```
    
    ### Phase 2: Migration (variable)
    
    4. **Live migrate toutes les VMs**
       ```bash
       # Une par une (contrôlé)
       for vm in $(openstack server list --host <COMPUTE_HOST> --all-projects -f value -c ID); do
           echo "Migrating: $vm"
           openstack server migrate --live-migration $vm --wait
           openstack server show $vm -f value -c OS-EXT-SRV-ATTR:host
       done
       ```
    
       **Ou en bloc (plus rapide):**
       ```bash
       nova host-evacuate-live <COMPUTE_HOST>
       ```
    
    5. **Suivre la progression**
       ```bash
       watch "openstack server list --host <COMPUTE_HOST> --all-projects"
       ```
    
    ### Phase 3: Vérification (5 min)
    
    6. **Confirmer évacuation complète**
       ```bash
       openstack server list --host <COMPUTE_HOST> --all-projects
       ```
       **Attendu:** Aucune VM
    
    7. **Vérifier les VMs migrées**
       ```bash
       openstack server list --all-projects --status ACTIVE
       ```
    
    ### Phase 4: Maintenance
    
    8. **Effectuer la maintenance**
       (Reboot, upgrade, remplacement hardware...)
    
    ### Phase 5: Remise en service (5 min)
    
    9. **Réactiver le scheduling**
       ```bash
       openstack compute service set --enable <COMPUTE_HOST> nova-compute
       ```
    
    10. **Vérifier le service**
        ```bash
        openstack compute service list | grep <COMPUTE_HOST>
        ```
    
    ## Validation finale
    - [ ] Toutes les VMs migrées et ACTIVE
    - [ ] Compute service enabled et up
    - [ ] Pas d'erreur dans les logs
    
    ## Rollback
    Si migration échoue:
    ```bash
    openstack server migrate --live-migration <VM_ID> --host <COMPUTE_HOST>
    

Post-opération

  • Documenter la maintenance effectuée
  • Vérifier les métriques post-maintenance
    ### Diagramme processus runbook
    
    ```mermaid
    flowchart TD
        Start([Start]) --> Identify[Opérateur:<br/>Identifier le besoin]
        Identify --> Select[Sélectionner le runbook]
    
        Select --> Verify[Validation:<br/>Vérifier prérequis]
        Verify --> PrereqOK{Prérequis<br/>OK?}
        PrereqOK -->|Non| Resolve[Résoudre les prérequis<br/>Escalader si nécessaire]
        Resolve --> Verify
        PrereqOK -->|Oui| Begin[Exécution:<br/>Début d'exécution]
    
        Begin --> CreateTicket[Créer ticket de suivi]
        CreateTicket --> Execute[Exécuter étape N]
        Execute --> Check[Vérifier résultat]
    
        Check --> ResultOK{Résultat<br/>OK?}
        ResultOK -->|Oui| CheckStep[Cocher étape]
        ResultOK -->|Non| RollbackPossible{Rollback<br/>possible?}
    
        RollbackPossible -->|Oui| DoRollback[Exécuter rollback<br/>Escalader]
        DoRollback --> End1([Stop])
        RollbackPossible -->|Non| EscalateNow[Escalader immédiatement]
        EscalateNow --> End2([Stop])
    
        CheckStep --> StepsRemaining{Étapes<br/>restantes?}
        StepsRemaining -->|Oui| Execute
        StepsRemaining -->|Non| FinalValidation[Clôture:<br/>Validation finale]
    
        FinalValidation --> Document[Documentation]
        Document --> Communicate[Communication]
        Communicate --> CloseTicket[Fermer ticket]
        CloseTicket --> End3([Stop])
    

Index des Runbooks

# runbooks-index.yml

categories:
  compute:
    - id: RB-001
      title: Ajout compute node
      frequency: Occasionnel
    - id: RB-004
      title: Évacuation hyperviseur
      frequency: Mensuel (maintenance)
    - id: RB-005
      title: Resize flavor
      frequency: Rare

  storage:
    - id: RB-002
      title: Remplacement disque OSD
      frequency: Sur incident
    - id: RB-006
      title: Extension pool Ceph
      frequency: Occasionnel
    - id: RB-007
      title: Création nouveau pool
      frequency: Rare

  network:
    - id: RB-008
      title: Ajout réseau provider
      frequency: Occasionnel
    - id: RB-009
      title: Debug connectivité VM
      frequency: Sur incident

  security:
    - id: RB-003
      title: Rotation certificats TLS
      frequency: Annuel
    - id: RB-010
      title: Rotation credentials
      frequency: Trimestriel
    - id: RB-011
      title: Audit accès
      frequency: Mensuel

  maintenance:
    - id: RB-012
      title: Upgrade OpenStack
      frequency: Semestriel
    - id: RB-013
      title: Backup manuel
      frequency: Sur demande
    - id: RB-014
      title: Restore base de données
      frequency: Sur incident

Exemples pratiques

Template de runbook

# RB-XXX: [Titre]

## Métadonnées
| Champ | Valeur |
|-------|--------|
| Version | 1.0 |
| Date | YYYY-MM-DD |
| Auteur | |
| Temps estimé | |
| Impact | |
| Maintenance requise | Oui/Non |

## Objectif
[Description claire de l'objectif]

## Prérequis
- [ ] Prérequis 1
- [ ] Prérequis 2

## Procédure

### Phase 1: [Nom] (X min)

1. **[Action]**
   ```bash
   [commande]
   ```
   **Validation:** [Résultat attendu]

### Phase N: [Nom] (X min)

N. **[Action]**
   ```bash
   [commande]
   ```

## Validation finale
- [ ] Check 1
- [ ] Check 2

## Rollback
[Procédure de retour arrière]

## Post-opération
- [ ] Action 1
- [ ] Action 2

Ressources

Checkpoint

  • Runbooks créés pour opérations courantes
  • Template standardisé adopté
  • Index des runbooks maintenu
  • Équipe formée sur les runbooks
  • Runbooks testés et validés
  • Processus de mise à jour défini
  • Intégration avec ticketing
  • Revue périodique planifiée