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