Best practices for image generation
Performance / optimization
no NTP synchronization in the VM, time is synchronized by the host through a paravirtualized clock
IO scheduler set to deadline
no empty large (> 5GB) /scratch type space, go through the volumes or the ephemeral disk for it
do not integrate swap in the image (go through the flavors)
limit partitioning to a strict minimum (a partition, or even a dedicated one for /tmp and /var)
minimize the size of the image so that it will not exceed 20GB.
Use RAW images
Security
update the packages and apply security patches
configure accesses for a non-root user + sudo rather than using the direct root connection
images are supposed to be public and must not contain confidential or sensitive data (keys, passwords etc …)
do not hardcode the root password, replace in the /etc/shadow the fingerprint by ‘*’ before uploading it to the catalog
Contextualization
the image must support cloud-init (especially for the injection of SSH keys)
cloud-init must be configured with retries for a long time to reach the metadata service
# exemple de /etc/cloud/cloud.cfg.d/01_metadata.cfg datasource: OpenStack: max_wait: 600 timeout: 30 retries: 3
Compatibility
image must support cloud-init (particularly for the SSH keys injection)
remove any instance-specific configuration (keys, hostnames …)
no # at the fstab end of line
install virtio drivers for storage
support ACPI to manage hardware shutdown
to adjust the VMs clock, you need to:
use the KVM paravirtualized clock, verify:
% dmesg |grep clocksource Switching to clocksource kvm-clock
otherwise, please refer to setup section.
verify the timezone:
% ls -l /etc/localtime /sys/devices/system/clocksource/clocksource0/current_clocksource
verify the zone defined in /etc/sysconfig/clock
check UTC parametrization:
% sed -i 's/LOCAL/UTC/' /etc/adjtime
Network configuration
DHCP network configuration for eth0: dhclient must be configured to try again later (not to quit) if a lease cannot be renewed. Example for EL6:
% cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet PERSISTENT_DHCLIENT=1
install virtio_net drivers
delete udev and sysconfig entries for MAC addresses, example for EL6:
% sed -i 's/^KERNEL!=/KERNEL==/p' /lib/udev/rules.d/75-persistent-net-generator.rules
delete DNS configuration, routing, NTP servers. All of these parameters are passed through DHCP to the VM.
the hostname is set by DHCP, you must disable the cloud-init module that sets it to the VM name (file /etc/cloud/cloud.cfg):
[...] preserve_hostname: 1 [...]