Skip to content

Administration Linux Avancée

Introduction

L'administration Linux avancée est le socle de toute infrastructure OpenStack. Les services OpenStack s'exécutent comme des processus systemd, utilisent des volumes LVM pour le stockage, et nécessitent une compréhension approfondie du système pour le troubleshooting.

Cette section couvre les aspects système essentiels pour administrer un cluster OpenStack en production.

Prérequis

  • Connaissance de base Linux (shell, permissions, processus)
  • Accès root ou sudo sur une machine de test

Points à apprendre

Systemd en profondeur

Systemd est le gestionnaire de services standard sur les distributions modernes. Tous les services OpenStack sont gérés via systemd.

Anatomie d'un fichier unit

# /etc/systemd/system/mon-service.service
[Unit]
Description=Mon Service Custom
After=network.target
Wants=network-online.target

[Service]
Type=simple
User=myuser
Group=mygroup
ExecStart=/usr/bin/mon-programme --config /etc/mon-service/config.yml
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s
TimeoutStartSec=30s

# Sécurité
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/mon-service

[Install]
WantedBy=multi-user.target

Commandes essentielles

# Gestion des services
systemctl start|stop|restart|reload mon-service
systemctl enable|disable mon-service
systemctl status mon-service

# Diagnostic
systemctl list-units --failed
journalctl -u mon-service -f          # Logs en temps réel
journalctl -u mon-service --since "1 hour ago"
journalctl -u mon-service -p err      # Uniquement erreurs

# Rechargement après modification unit
systemctl daemon-reload

# Analyse du boot
systemd-analyze blame
systemd-analyze critical-chain

Types de services

Type Description Exemple
simple Processus principal reste en foreground Serveurs web
forking Processus fork et parent exit Daemons traditionnels
oneshot Exécution unique puis exit Scripts d'init
notify Notifie systemd quand prêt Services avec sd_notify

LVM - Logical Volume Management

LVM permet une gestion flexible des volumes de stockage, essentielle pour Cinder et les nœuds compute.

Architecture LVM

graph TB
    subgraph LV["Logical Volumes (LV)"]
        lv_root["lv_root<br/>50GB"]
        lv_data["lv_data<br/>200GB"]
        lv_logs["lv_logs<br/>20GB"]
    end

    subgraph VG["Volume Group (VG)<br/>vg_data - 300GB"]
        vg_pool[" "]
    end

    subgraph PV["Physical Volumes (PV)"]
        pv1["/dev/sda2<br/>100GB"]
        pv2["/dev/sdb1<br/>100GB"]
        pv3["/dev/sdc1<br/>100GB"]
    end

    lv_root --> vg_pool
    lv_data --> vg_pool
    lv_logs --> vg_pool
    vg_pool --> pv1
    vg_pool --> pv2
    vg_pool --> pv3

Commandes LVM

# Physical Volumes
pvcreate /dev/sdb1 /dev/sdc1
pvdisplay
pvs

# Volume Groups
vgcreate vg_data /dev/sdb1 /dev/sdc1
vgextend vg_data /dev/sdd1        # Ajouter un disque
vgdisplay
vgs

# Logical Volumes
lvcreate -L 100G -n lv_data vg_data
lvcreate -l 100%FREE -n lv_remaining vg_data  # Tout l'espace restant
lvextend -L +50G /dev/vg_data/lv_data         # Étendre
lvextend -l +100%FREE /dev/vg_data/lv_data    # Tout le reste
lvdisplay
lvs

# Redimensionner filesystem après extension
resize2fs /dev/vg_data/lv_data    # ext4
xfs_growfs /dev/vg_data/lv_data   # xfs

Snapshots LVM

# Créer un snapshot (espace pour les changements)
lvcreate -L 10G -s -n lv_data_snap /dev/vg_data/lv_data

# Restaurer depuis snapshot
lvconvert --merge /dev/vg_data/lv_data_snap

Performance et monitoring système

Outils de diagnostic

# CPU et charge
top
htop
vmstat 1 5           # Statistiques toutes les secondes, 5 fois
mpstat -P ALL 1      # Stats par CPU

# Mémoire
free -h
vmstat -s
cat /proc/meminfo

# I/O disque
iostat -xz 1
iotop
blktrace /dev/sda

# Réseau
ss -tulpn            # Ports en écoute
netstat -i           # Stats interfaces
iftop                # Trafic temps réel

Tuning kernel

# Fichiers sysctl importants pour OpenStack
cat >> /etc/sysctl.d/99-openstack.conf << 'EOF'
# Networking
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

# Memory
vm.swappiness = 10
vm.dirty_ratio = 20
vm.dirty_background_ratio = 5

# File descriptors
fs.file-max = 2097152
fs.inotify.max_user_watches = 524288
EOF

sysctl -p /etc/sysctl.d/99-openstack.conf

Limits pour les services

# /etc/security/limits.d/openstack.conf
*         soft    nofile      65536
*         hard    nofile      65536
*         soft    nproc       65536
*         hard    nproc       65536
root      soft    nofile      65536
root      hard    nofile      65536

Gestion des utilisateurs et groupes

# Créer utilisateur système (sans home, sans login)
useradd --system --no-create-home --shell /sbin/nologin nova

# Groupes OpenStack typiques
groupadd kolla
groupadd docker
usermod -aG docker,kolla $USER

Certificats et PKI basique

# Générer une clé privée
openssl genrsa -out server.key 4096

# Générer un CSR (Certificate Signing Request)
openssl req -new -key server.key -out server.csr \
  -subj "/C=FR/ST=IDF/L=Paris/O=MonOrg/CN=openstack.local"

# Auto-signer (pour lab)
openssl x509 -req -days 365 -in server.csr \
  -signkey server.key -out server.crt

# Vérifier un certificat
openssl x509 -in server.crt -text -noout
openssl s_client -connect openstack.local:5000 -showcerts

Exemples pratiques

Lab 1 : Créer un service systemd

# 1. Créer un script simple
cat > /usr/local/bin/healthcheck.sh << 'EOF'
#!/bin/bash
while true; do
    echo "$(date): Health OK" >> /var/log/healthcheck.log
    sleep 60
done
EOF
chmod +x /usr/local/bin/healthcheck.sh

# 2. Créer le fichier unit
cat > /etc/systemd/system/healthcheck.service << 'EOF'
[Unit]
Description=Health Check Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/healthcheck.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

# 3. Activer et démarrer
systemctl daemon-reload
systemctl enable --now healthcheck
systemctl status healthcheck

Lab 2 : Configuration LVM complète

# Simuler avec fichiers loop (lab uniquement)
dd if=/dev/zero of=/tmp/disk1.img bs=1M count=500
dd if=/dev/zero of=/tmp/disk2.img bs=1M count=500

losetup /dev/loop10 /tmp/disk1.img
losetup /dev/loop11 /tmp/disk2.img

# Créer infrastructure LVM
pvcreate /dev/loop10 /dev/loop11
vgcreate vg_lab /dev/loop10 /dev/loop11
lvcreate -L 400M -n lv_test vg_lab

# Formater et monter
mkfs.ext4 /dev/vg_lab/lv_test
mkdir -p /mnt/test
mount /dev/vg_lab/lv_test /mnt/test

# Vérifier
df -h /mnt/test
lvs

Ressources

Checkpoint

  • Je suis capable de créer et gérer un service systemd
  • Je comprends l'architecture LVM (PV, VG, LV)
  • Je peux étendre un volume logique et son filesystem
  • Je sais utiliser les outils de diagnostic (journalctl, iostat, vmstat)
  • Je comprends les paramètres sysctl importants pour OpenStack