Bonnes pratiques pour les 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 le paramètre 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
    [...]