Bonnes pratiques pour la génération des images
Performance / optimisation
pas de synchronisation NTP dans la VM, l’heure est synchronisée par le host via une horloge paravirtualisée
scheduler d’IO fixé à deadline
pas d’espace vide type /scratch de grande taille (>5GB), passer par les volumes ou par l’éphémeral pour ça
ne pas intégrer de swap dans l’image (passer par les flavors)
limiter le partitionnement au strict minimum (une partition, voire une dédiée pour /tmp et /var)
limiter au maximum la taille de l’image qui ne devrait pas excéder les 20GB.
Utilisation de fichier d’image en format RAW
Sécurité
paquets à jour et patchs de sécurité appliqués
configuration des accès pour un utilisateur non root + sudo plutôt que d’utiliser la connexion root directe
les images sont supposées publiques et ne doivent pas contenir de données confidentielles ou sensibles (clés, mots de passe etc…)
pas de mot de passe root en dur, remplacer dans le /etc/shadow l’empreinte par “*” avant de l’uploader dans le catalogue
Contextualisation
l’image doit supporter cloud-init (notamment pour l’injection des clés SSH)
cloud-init doit être configuré avec des réessais pendant une longue durée pour atteindre le service de méta données
# exemple de /etc/cloud/cloud.cfg.d/01_metadata.cfg datasource: OpenStack: max_wait: 600 timeout: 30 retries: 3
Intégration, compatibilité
suppression de toute configuration spécifique à une instance (clés, noms d’hôtes…)
pas de # en fin de ligne de la fstab
drivers virtio installés pour le stockage
support ACPI pour les arrêts matériels
pour ajuster l’horloge des VMs, il est nécessaire de :
utiliser l’horloge paravirtualisée de KVM, vérifier :
% dmesg |grep clocksource Switching to clocksource kvm-clock
dans le cas contraire, se réferer à la section de configuration.
vérfier la timezone :
% ls -l /etc/localtime /sys/devices/system/clocksource/clocksource0/current_clocksource
vérifier la zone définie dans
/etc/sysconfig/clock
s’assurer du paramétrage UTC :
% sed -i 's/LOCAL/UTC/' /etc/adjtime
Configuration réseau
configuration réseau DHCP pour eth0 : il faut configurer dhclient pour ne pas quitter si un bail ne peut être renouvelé mais reessayer plus tard. Exemple pour EL6 :
% cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet PERSISTENT_DHCLIENT=1
drivers virtio_net installés
suppression des entrées udev et sysconfig des adresses MAC, exemple pour EL6 :
% sed -i 's/^KERNEL!=/KERNEL==/p' /lib/udev/rules.d/75-persistent-net-generator.rules
suppression de la configuration DNS, du routage, des serveurs NTP. L’ensemble de ces paramètres sont passés par DHCP à la VM.
le hostname est fixé par DHCP, il faut désactiver le module cloud-init qui le fixe au nom de la VM (fichier /etc/cloud/cloud.cfg) :
[...] preserve_hostname: 1 [...]