Bonsoir,
Ce n'est pas du KVM ni du Xen, mais as-tu regardé systemd-nspawn ? Ça me semble correspondre à ton besoin. Il a remplacé LXC depuis quelques temps sur mes serveurs perso, et c'est pareil en plus simple à l'usage.
Par rapport à tes contraintes :
1. Tu peux utiliser un LV par conteneur, ou un subvolume btrfs (cloner un conteneur devient juste faire un snapshot rw du subvolume et copier un fichier de conf). 2. La gestion du réseau est automatique. Tu peux définir une zone dans la section "[Network]" du fichier de configuration ("Zone=public" par exemple créera un bridge nommé "vz-public" sur le host). 3. C'est du conteneur, donc tout tourne sur le noyau de l'hôte, comme avec LXC. 4. Il gère la règle snat pour sortir tout seul, les interfaces sont en DHCP est par défaut (mais tu peux configurer des IP fixes si tu préfères t'embêter).
Autres éléments :
* libnss-mymachines permet la résolution DNS des noms des conteneurs depuis l'hôte et les conteneurs. * On peut aussi utiliser libnss-mymachines pour résoudre les noms des UID/GID des conteneurs depuis l'hôte (il lance les conteneurs en "private" par défaut, donc avec un range de UID/GID différent par conteneur). * Pour créer un conteneur, mon process est en gros "btrfs subvolume create /var/lib/machines/container-name; debootstrap; vi /etc/systemd/nspawn/container-name.nspawn; machinectl start container-name" + la conf dans le conteneur (activation de systemd-networkd, etc.). * La migration depuis LXC, c'était simplement déplacer le rootfs vers /var/lib/machines/container-name et créer le fichier de conf dans /etc/systemd/nspawn (qui contient principalement la "zone" pour le bridge). * Les containers sont gérés par des units systemd (systemd-nspawn@container-name.service), donc on peut définir l'ordonnancement (After/Before/Wants/etc.) comme pour n'importe quel autre service.
Globalement, ça ne fait "que" gérer des cgroups pour isoler les ressources.
Sylvain
Le 13/11/2020 à 19:15, Daniel Caillibaud a écrit :
Bonjour,
Je vous lis depuis qq temps mais c'est mon premier post ici, bonjour tout le monde !
Sur un host debian devant héberger des vms debian, je cherche un orchestrateur kvm en cli me permettant :
- chaque vm dans son lv, avec ce lv montable sur le host
- conf réseau permettant de définir une (ou deux) interface dans la vm sur le (ou les) bridges du host (un public et un privé, la plupart des vms n'ont pas d'ip publique)
- si possible pas de grub dans la vm, on la démarre avec noyau/initrd du host
- pas de nat (sauf snat pour que les vm privées puissent sortir sur internet), ni dhcp, ni dnsmask, ni autre fioriture. Pas besoin de HA (ni drbd ni ceph)
J'ai testé, plus ou moins rapidement
libvirt+virsh : man virsh fait un peu peur, galère pour arriver à booter une première VM et s'y connecter, pas réussi à configurer le réseau proprement
ganeti : leur système de hook debootstrap semble sympa, mais idem, je suis resté comme un idiot sur la conf réseau.
proxmox : la doc est pas mal, commandes cli claires, j'ai une vm qui boot mais je réalise qu'avec un storage lvm-thin je peux pas monter son filesystem sur le host, je me suis arrêté là.
Le montage du lvm sur le host, c'est ce qui me permet du backup incrémental avec plein de snapshots sur le serveur de backup (j-1, j-2, …, month-12, merci btrfs), ne pas avoir ça serait une vraie galère (doubler toute la procédure de backup/snapshots, car j'ai encore des hosts en stretch/lxc2).
Si c'est plus simple avec xen plutôt que kvm, why not, mais j'ai pas l'impression que j'arriverai mieux à mes fins…
Je suis donc preneur de tout conseil, merci à ceux qui prendront un peu de temps pour en donner !
PS: un peu plus d'infos sur le contexte
J'utilise depuis pas mal d'années lxc en cli (vm debian sur host debian), tout marchait très bien
- un lv par vm
- création de vm simple avec
- pour le contenu copie de lv ou debootstrap sur un lv vide
- génération du /var/lib/lxc/lavm/config avec awk (y'a que l'ip qui change)
- config réseau très simple avec un bridge sur le host et ip/nic déclarée dans la conf de la vm (en fait deux, br0 pour l'interface publique et br1 pour l'interface privée, sur vrack ovh), rien à modifier dans la vm (le host crée un nic veth-lavm qui s'appelle veth0 dans la vm et a la bonne ip)
Mais depuis buster et lxc3, les choses se compliquent, y'a plein de services qui déconnent à cause de la nouvelle gestion des cgroup par systemd, et d'après mes lectures (nombreuses), pas tellement d'espoir, ma façon de faire avec un linux complet dans un conteneur n'est plus tellement dans l'esprit de lxc, le seul moyen d'y parvenir à peu près est de faire sauter pas mal d'isolations, lxc servirait alors plus à grand chose, autant tout faire tourner sur le host directement.