Skip to content

Configuration Serveur Hetzner

Introduction

Cette section couvre la configuration initiale du serveur dédié Hetzner AX102, incluant l'installation de l'OS, le partitionnement optimal et la configuration réseau de base.

Prérequis

  • Serveur Hetzner AX102 commandé
  • Accès au Robot (panel Hetzner)
  • Clé SSH générée

Points à apprendre

Spécifications AX102

CPU: AMD Ryzen 9 5900X (12 cores / 24 threads @ 3.7-4.8 GHz)
RAM: 128 GB DDR4 ECC
Stockage: 2 x 1.92 TB NVMe SSD (Samsung PM9A3 ou similaire)
Réseau: 1 Gbit/s (upgrade 10G disponible)
Prix: ~130€/mois

Installation via Rescue System

1. Booter en mode Rescue

# Dans le Robot Hetzner :
# 1. Aller sur le serveur
# 2. Rescue → Activer rescue system (Linux 64bit)
# 3. Reset → Execute automatic hardware reset

# Se connecter en SSH (mot de passe dans le panel)
ssh root@HETZNER_IP

2. Installation avec installimage

# Lancer l'installimage
installimage

# Sélectionner :
# - Ubuntu → Ubuntu 24.04 LTS

3. Configuration du partitionnement

Éditer la configuration proposée pour optimiser l'espace :

# Configuration installimage
DRIVE1 /dev/nvme0n1
DRIVE2 /dev/nvme1n1

# RAID pour le système (petit, fiable)
SWRAID 1
SWRAIDLEVEL 1

# Partitionnement
PART /boot ext4 1G
PART lvm vg0 all

# Logical volumes sur vg0
LV vg0 root / ext4 100G
LV vg0 swap swap swap 16G
LV vg0 libvirt /var/lib/libvirt ext4 400G

# Le reste sera utilisé pour un second VG (données Ceph simulées)
# On le créera manuellement après

HOSTNAME openstack-lab

4. Post-installation

# Après reboot, se reconnecter
ssh root@HETZNER_IP

# Vérifier le partitionnement
lsblk
df -h
vgs
lvs

Configuration réseau

Identifier l'interface

# Lister les interfaces
ip link show

# Généralement : enp41s0 ou similaire pour les Ryzen

Netplan pour accès externe

# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  ethernets:
    enp41s0:
      addresses:
        - HETZNER_IP/32
      routes:
        - to: default
          via: HETZNER_GATEWAY
          on-link: true
      nameservers:
        addresses:
          - 185.12.64.1
          - 185.12.64.2
netplan apply

Création de l'espace pour les VMs

Volume Group pour libvirt

# L'espace restant sur les NVMe après le RAID système
# On crée un VG dédié aux images de VMs

# Si le deuxième NVMe n'est pas entièrement utilisé
# Créer un PV avec l'espace restant
lvcreate -l 100%FREE -n data vg0

# Ou utiliser le deuxième NVMe directement pour les OSD
# (nous le ferons plus tard via LVM dans les VMs)

Installation des prérequis

# Mise à jour système
apt update && apt upgrade -y

# Paquets essentiels
apt install -y \
  qemu-kvm \
  libvirt-daemon-system \
  libvirt-clients \
  virtinst \
  bridge-utils \
  virt-manager \
  cloud-image-utils \
  genisoimage \
  wget \
  curl \
  vim \
  htop \
  tmux \
  git

# Activer libvirtd
systemctl enable --now libvirtd

Configuration bridges réseau pour VMs

# /etc/netplan/01-netcfg.yaml (version complète)
network:
  version: 2
  ethernets:
    enp41s0:
      dhcp4: false
      dhcp6: false

  bridges:
    # Bridge pour accès externe (NAT)
    br-external:
      interfaces: []
      addresses:
        - 192.168.100.1/24
      mtu: 1500

    # Bridge management OpenStack
    br-mgmt:
      interfaces: []
      addresses:
        - 10.0.0.1/24
      mtu: 1500

    # Bridge storage Ceph
    br-storage:
      interfaces: []
      addresses:
        - 10.0.1.1/24
      mtu: 9000  # Jumbo frames pour stockage

    # Bridge externe pour Neutron provider network
    br-provider:
      interfaces: []
      addresses: []
      mtu: 1500
# Appliquer
netplan apply

# Vérifier
ip addr show br-mgmt
ip addr show br-storage
ip addr show br-external

Configuration NAT pour accès internet des VMs

# Activer IP forwarding
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/99-forward.conf
sysctl -p /etc/sysctl.d/99-forward.conf

# NAT avec iptables (via br-external)
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o enp41s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o enp41s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o enp41s0 -j MASQUERADE

# Persister les règles
apt install -y iptables-persistent
netfilter-persistent save

Configuration SSH sécurisée

# Désactiver password auth
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

# Désactiver root password login (garder key)
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config

systemctl restart sshd

Télécharger l'image cloud Ubuntu

# Créer répertoire pour les images
mkdir -p /var/lib/libvirt/images/base

# Télécharger Ubuntu 24.04 cloud image
cd /var/lib/libvirt/images/base
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

# Vérifier
qemu-img info noble-server-cloudimg-amd64.img

Création d'un template cloud-init

mkdir -p /var/lib/libvirt/cloud-init

# Template user-data de base
cat > /var/lib/libvirt/cloud-init/user-data-template << 'EOF'
#cloud-config
hostname: HOSTNAME
manage_etc_hosts: true

users:
  - name: ubuntu
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    lock_passwd: false
    ssh_authorized_keys:
      - SSH_PUBLIC_KEY

chpasswd:
  list: |
    ubuntu:ubuntu
  expire: false

package_update: true
package_upgrade: false

packages:
  - qemu-guest-agent
  - python3
  - python3-pip
  - vim
  - curl
  - wget

runcmd:
  - systemctl enable --now qemu-guest-agent
EOF

Script de création de VM

cat > /usr/local/bin/create-vm.sh << 'EOF'
#!/bin/bash
set -e

# Usage: create-vm.sh <name> <ram_mb> <vcpus> <disk_gb> [extra_disk_gb]

NAME=$1
RAM=$2
VCPUS=$3
DISK=$4
EXTRA_DISK=${5:-0}

BASE_IMG="/var/lib/libvirt/images/base/noble-server-cloudimg-amd64.img"
VM_DIR="/var/lib/libvirt/images"
CLOUD_INIT_DIR="/var/lib/libvirt/cloud-init"
SSH_KEY=$(cat ~/.ssh/id_rsa.pub 2>/dev/null || cat ~/.ssh/id_ed25519.pub)

# Créer disque VM
qemu-img create -f qcow2 -F qcow2 \
  -b $BASE_IMG \
  $VM_DIR/${NAME}.qcow2 ${DISK}G

# Créer disque extra si demandé (pour OSD Ceph)
EXTRA_DISK_OPT=""
if [ "$EXTRA_DISK" -gt 0 ]; then
  qemu-img create -f qcow2 $VM_DIR/${NAME}-data.qcow2 ${EXTRA_DISK}G
  EXTRA_DISK_OPT="--disk $VM_DIR/${NAME}-data.qcow2,format=qcow2,bus=virtio"
fi

# Générer cloud-init
mkdir -p $CLOUD_INIT_DIR/$NAME
sed "s/HOSTNAME/$NAME/g; s|SSH_PUBLIC_KEY|$SSH_KEY|g" \
  $CLOUD_INIT_DIR/user-data-template > $CLOUD_INIT_DIR/$NAME/user-data

cat > $CLOUD_INIT_DIR/$NAME/meta-data << METADATA
instance-id: $NAME
local-hostname: $NAME
METADATA

# Créer ISO cloud-init
genisoimage -output $CLOUD_INIT_DIR/$NAME/cidata.iso \
  -V cidata -r -J \
  $CLOUD_INIT_DIR/$NAME/user-data \
  $CLOUD_INIT_DIR/$NAME/meta-data

# Créer la VM
virt-install \
  --name $NAME \
  --ram $RAM \
  --vcpus $VCPUS \
  --disk $VM_DIR/${NAME}.qcow2,format=qcow2,bus=virtio \
  $EXTRA_DISK_OPT \
  --disk $CLOUD_INIT_DIR/$NAME/cidata.iso,device=cdrom \
  --os-variant ubuntu24.04 \
  --network bridge=br-mgmt,model=virtio \
  --network bridge=br-storage,model=virtio \
  --network bridge=br-external,model=virtio \
  --graphics none \
  --console pty,target_type=serial \
  --import \
  --noautoconsole

echo "VM $NAME créée. Attendre quelques secondes puis:"
echo "  virsh domifaddr $NAME"
echo "  ssh ubuntu@<IP>"
EOF

chmod +x /usr/local/bin/create-vm.sh

Exemples pratiques

Vérification complète de l'installation

#!/bin/bash
# Script de vérification

echo "=== Système ==="
uname -a
cat /etc/os-release | grep VERSION

echo -e "\n=== CPU ==="
lscpu | grep -E "^(Model name|CPU\(s\)|Thread)"

echo -e "\n=== RAM ==="
free -h

echo -e "\n=== Stockage ==="
lsblk
df -h /var/lib/libvirt

echo -e "\n=== Réseau ==="
ip -br addr

echo -e "\n=== KVM ==="
virsh version
virsh list --all

echo -e "\n=== Bridges ==="
bridge link show

Test création VM rapide

# Créer une VM de test
/usr/local/bin/create-vm.sh test-vm 2048 2 20

# Attendre et vérifier
sleep 30
virsh domifaddr test-vm

# Supprimer après test
virsh destroy test-vm
virsh undefine test-vm --remove-all-storage

Ressources

Checkpoint

  • Ubuntu 24.04 installé sur le serveur
  • Partitionnement optimal avec espace pour VMs
  • Bridges réseau créés (br-mgmt, br-storage, br-external)
  • NAT configuré pour accès internet des VMs
  • libvirt/KVM fonctionnel
  • Image Ubuntu cloud téléchargée
  • Script de création de VM testé