<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Bonsoir,</p>
    <p>Ce n'est pas du KVM ni du Xen, mais as-tu regardé systemd-nspawn
      ?<br>
      Ç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.</p>
    <p>Par rapport à tes contraintes :<br>
    </p>
    <ol>
      <li>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).</li>
      <li>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).</li>
      <li>C'est du conteneur, donc tout tourne sur le noyau de l'hôte,
        comme avec LXC.</li>
      <li>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).</li>
    </ol>
    <p>Autres éléments :</p>
    <ul>
      <li>libnss-mymachines permet la résolution DNS des noms des
        conteneurs depuis l'hôte et les conteneurs.</li>
      <li>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).<br>
      </li>
      <li>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.).</li>
      <li>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).</li>
      <li>Les containers sont gérés par des units systemd
        (<a class="moz-txt-link-abbreviated" href="mailto:systemd-nspawn@container-name.service">systemd-nspawn@container-name.service</a>), donc on peut définir
        l'ordonnancement (After/Before/Wants/etc.) comme pour n'importe
        quel autre service.<br>
      </li>
    </ul>
    <p>Globalement, ça ne fait "que" gérer des cgroups pour isoler les
      ressources.</p>
    <p>Sylvain<br>
    </p>
    <div class="moz-cite-prefix">Le 13/11/2020 à 19:15, Daniel
      Caillibaud a écrit :<br>
    </div>
    <blockquote type="cite" cite="mid:20201113191522.678f5250@quad">
      <pre class="moz-quote-pre" wrap="">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 :
1) chaque vm dans son lv, avec ce lv montable sur le host
2) 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)
3) si possible pas de grub dans la vm, on la démarre avec noyau/initrd du
   host
4) 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.

</pre>
    </blockquote>
  </body>
</html>