Table des matières

Virtualisation à FedeRez

Besoin

De nombreuses petites associations de FedeRez ont emis le souhait de pouvoir disposer d'une machine distante pour divers besoin : de la redondance (dns…), externaliser des services critiques (sites web, etc) ou pour du backup léger.

Certaines associations ne disposent notamment que de quelques IP, voudraient pouvoir disposer de VM avec une ip publique.

Le Cr@ns a cédé un de ses anciens virtualiseurs à FedeRez dans le but de répondre à cette demande. (kdell)
Viarezo également (ronderu).

L'interface web de proxmox se trouve aux adresses suivantes :
https://kdell.crans.org:8006
https://ronderu.federez.net:8006

Solution de virtualisation

La solution choisie est debian proxmox pve. Celui-ci a l'avantage de proposer une interface web “à la ovh” qui permettrait à une association de manager à distance sa ou ses vm sans intervention des responsables techniques de FedeRez. Il a aussi l'avantage de proposer en parallèle des kvm et des lxc, bref, il y en a pour tous les gouts.

Installation du virtualiseur

L'exemple pris ici fut l'installation de kdell.

Installer debian et proxmox

D'abord on procède à l'installation de debian sur kdell.

A noter ici, on a choisi de donner 40 Go pour le / de kdell, 10 Go pour le var, le home et 20Go pour la swap.
Avec le reste (1,8 To) on fait une partition data, qui se l'espace de stockage de proxmox.

On ajoute l'essentiel pour FedeRez (l'auth ldap etc)

Ensuite, on passe à l'installation de proxmox en suivant ce tuto : https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Jessie

Rien de bien difficile; ne pas sauter les étapes. Proxmox a besoin de l'ip hardcodée dans /etc/hosts pour s'installer.

L'installation consiste simplement à créer un fichier proxmox.list dans sources.list.d contenant :

deb http://download.proxmox.com/debian jessie pve-no-subscription

Ensuite on lance

apt-get update && apt-get dist-upgrade
apt-get install proxmox-ve ntp ssh postfix ksm-control-daemon open-iscsi systemd-sysv

Et on reboot

Configurer l'interface réseau

Il est nécessaire de créer un bridge, dans lequel les vm parleront. Tout est en non tagué ici (vlan des machines filaires adhérents du Cr@ns), donc pas de piège.

Par conséquent, on écrit ceci dans /etc/network/interfaces :

auto vmbr0
iface vmbr0 inet static
	address  138.231.139.230     # ip de kdell
        network 138.231.136.0     # subnet filaire du Crans, /21
	netmask  255.255.248.0
        broadcast  138.231.143.255
        mtu 1496          # attention , essentiel au Crans
	gateway  138.231.136.4  # odlyd, routeur de sortie du Crans
        dns-search crans.org
        dns-nameservers 138.231.136.98 138.231.136.152
	bridge_ports eth0
	bridge_stp off
	bridge_fd 0

iface vmbr0 inet6 static
	address  2a01:240:fe3d:4:d267:e5ff:fee9:b10f
	netmask  64
	gateway  fe80::1

Finitions

Ensuite on passe sur l'interface web : https://kdell.crans.org:8006
(il est important de mettre https; proxmox de redirige pas)

Pour l'espace de stockage, on a laissé 1,8To non alloués dans le vg kdell :

kdell# lvs
  LV    VG    Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home  kdell -wi-ao---- 13,97g                                                    
  slash kdell -wi-ao---- 37,25g                                                    
  swap  kdell -wi-ao---- 29,80g                                                    
  var   kdell -wi-ao---- 13,97g    

On va donc dire à proxmox de les utiliser pour créer les lvm.

C'est possible de le faire par l'interface web, plus rapide à la main.
Il suffit d'editer le fichier /etc/pve/storage.conf et de rajouter :

lvm: FedeRez
        vgname kdell
        shared
        content images 

Le volume kdell apparait normalement sur l'interface proxmox.

Le datacenter est maintenant prêt pour les VM.

Configuration de needrestart

Par défaut, needrestart propose de redémarrer pve-manager (ce qui redémarre tous les conteneurs et machines virtuelles) et lxcfs (ce qui semble une mauvaise chose, cf https://github.com/liske/needrestart/issues/35). Pour que ces services soient décochés par défaut (faute de pouvoir les enlever de la liste), on ajoute deux lignes à /etc/needrestart/needrestart.conf pour avoir le bloc suivant :

/etc/needrestart/needrestart.conf
$nrconf{override_rc} = {q(^pve-manager) => 0,
    q(^lxcfs) => 0,
}

Créer une VM

Pour créer une vm, on a deux solutions.

Solution 1 : CLI (non recommandé)

L'exemple pris ici est sur kdell, il sera nécessaire d'adapter quelques données pour le faire sur ronderu.

On peut le faire uniquement en CLI pour les plus courageux. Cela consiste à editer des templates dans /etc/pve/qemu-server. Puis à créer les partitions dans le stockage virtuel qu'on fait, puis debootstraper.

Je renvoie ici à la doc du Crans qui détaille cette solution : https://wiki.crans.org/CransTechnique/Virtualisation/CreerUneVM

En gros, il faut créer un lvm (ex : lvcreate -n vm-100-disk-1 -L 10G kdell) dans le vg kdell, ou le vg ronderu.

Ensuite, on écrit un fichier de template de vm (ex de fichier)

kdell# cat 100.conf
balloon: 256
bootdisk: virtio0
cores: 1
ide2: none,media=cdrom
memory: 512
keyboard: fr
name: Federez-test
net0: e1000=02:67:E5:E9:00:01,bridge=vmbr0
numa: 0
ostype: l26
smbios1: uuid=36bd06a2-6cbd-458d-92d0-a09712786b6d
sockets: 1
virtio0: FedeRez:vm-100-disk-1,size=15G

Enfin, on passe à l'étape 2 de la solution 2 pour installer debian dessus.

Solution 2 : avec l'interface web proxmox

Je détaillerai ici la solution du pauvre qui consiste à utiliser l'interface web. Elle est bien foutue, et elle va éditer les mêmes fichiers que si on le faisait en CLI, à 2-3 exceptions que je détaillerai.

Cette solution n'est pas unique évidemment.

Etape 1 : Créer la vm dans proxmox

Aller sur créer une vm. Noeud : kdell, son nom à choisir. Id de vm, laissez faire proxmox.
Ensuite, ne pas utiliser de media iso, sauf si vous en avez une évidemment.

Attribution des ressources

Ensuite pour le storage : donner l'espace que vous voulez, sans être ni radin, ni gaspiller l'espace. (10 Go pour une petite VM, 20-50 pour une moyenne ou grosse)
/!\ Vérifiez que storage est bien FedeRez (/data) et non local.

Mettez le bus sur VirtiO et non ide. (sauf si vous voulez vraiment ide)

En nombre de coeurs, oubliez pas que kdell n'en a que 8. Soyez économes, surtout si la VM n'en a pas besoin.

En ram, 512, ou 1 giga si la vm en a besoin, 2 si elle en a vraiment besoin, pour plus à discuter.

Dans network, normalemnt proxmox propose le bridge vmbr0.

Choix de la mac

Sur kdell

Pour choisir la mac, j'ai pris la convention suivante :
Elle commence par 02 (mac virtuelle), puis les bits suivant sont les mêmes que la mac de kdell.
Enfin, l'avant dernier octet est à 0 si vm/container FedeRez et à 1 si c'est une asso. Le dernier octets est le numéro de VM FedeRez.

Exemple pour la première VM que j'ai crée : 02:67:E5:E9:00:01

/!\ Merci de respecter la convention !

Il faut ensuite donner la mac à un admin du Crans pour qu'il l'enregistre sur le compte de FedeRez du Crans.

Si on ne veut pas d'IPv4, il faut choisir « statique » pour le type d'IPv4 mais laisser les champs IP/CIDR eet passerelle vides…

Sur ronderu

Aucune convention de mac n'a été choisir.

Pour l'ipv4, en prendre une de libre dans le range 138.195.137.220 - 138.195.137.255 .

On confirme et on passe à l'étape 2

Etape 2 : installer debian

Normalement ici, la VM apparaît comme éteinte dans le dc sur l'interface web.

Attention piège, il faut modifier /etc/pve/qemu-server et le bon numéro de vm (ex : 100.conf) et rajouter dans le fichier :

keyboard: fr

La technique consiste ici à lancer le boot réseau, et à lancer le pxe du Crans pour faire une install par le réseau.

Pour cela; aller dans options sur la vm depuis l'interface proxmox, boot order, et mettre réseau en premier.
Ne pas oublier de faire l'opération inverse une fois l'install terminée évidemment.

Puis démarrer la vm, ouvrir une console, et installer debian

Etape 3 : fin d'installation

On éteint la VM, on change le boot order, et voilà !

Fin d'installation pour une vm FedeRez

Si il s'agit d'une machine FedeRez, il faut y mettre l'authentification ldap avec Nss, donc installer nslcd et le configurer correctement.

Ensuite, ne pas oublier Munin, en ouvrant le port 4949 de la machine, et en autorisant hexagon à parler au node, tout en disant à hexagon que le node existe.

Enfin ne pas oublier monit : monit et fail2ban pour faire plaisir à David_5-1 .

Management de vm pour les assos

Ca se passe sur l'interface proxmox :
https://kdell.crans.org:8006
https://ronderu.federez.net:8006

On crée un utilisateur et un groupe de l'association correspondante, et on lui donne le droit PVEVMUSER (allumer, éteindre la vm, ouvrir une console dessus)