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
    [...]