Technologie pour les machines virtuelles privées de courte durée

8

J'essaie de construire un système qui fonctionnera de courte durée (CI et builds de test) de composants logiciels, c'est obligatoire selon mes besoins qui vivent chacun sur un hôte privé. Je prends cette définition pour inclure également les options de paravirtualsation , car il semble que cela me fera économiser beaucoup de maux de tête.

Je travaille sur un Mac, donc à peu près toutes les technologies sont disponibles, libvirt et quemu , etc. ne fonctionneront tout simplement pas pour moi. Je prévois cependant de déployer sur Debian; donc tout ce qui fonctionne sur Debian est de retour sur la table, à condition que je puisse scripter le provisionnement de la machine hôte ainsi que de ses domaines invités.

Ma configuration prévue était que je peux utiliser pour démarrer un programme d'installation Debian, que quelque chose devrait signifier qu'au démarrage, la machine est automatiquement provisionnée (Chef, Puppet, Babushka, ça ne fait rien, vraiment) - et une partie de ce provisionnement devrait construire un rootfs de modèle qui peuvent être utilisés pour démarrer un conteneur. Le conteneur lui-même doit également être approvisionné, de sorte que lorsque le conteneur se lève, il sait ce que le travail doit faire et peut le faire, puis quitter.

En bref, voici le flux de travail dont j'ai besoin:

  1. Démarrez une machine (virtuelle ou autre) et préparez-la à fonctionner.
  2. Le travail doit être effectué par un script installé par le chef / marionnette / babushka / etc
  3. Lorsque le travail arrive, une machine virtuelle doit être démarrée pour faire le travail.
  4. La machine virtuelle doit faire le travail, quitter et libérer ses ressources sur la machine parent / hôte. (il est important que cela soit adapté à au moins des centaines de machines virtuelles invitées sur un matériel raisonnable)

Je suis arrivé à un point où j'ai essayé ce qui suit, et les ai abandonnés pour les raisons décrites ci-dessous:

Pour la machine hôte

  1. Pré-amorçage d'images micro ISO Debian avec Instalinux (soutenu par LinuxCOE) ( Mauvais: n'a pas fonctionné du tout ("Aucun module de noyau trouvé" (car les images Instalinux ne sont pas synchronisées avec les référentiels FTP, apparemment cette solution est notoirement fragile, cela ne permet pas non plus beaucoup de place pour la post-installation et la suppression de clés SSH connues, de clés d'hôte, etc. sur la machine, cela ressemble à du feu et oublie, à la fin, j'aurais une machine en marche, mais pas d'accès .)
  2. Pré-amorçage Debian netinst ISO ( Mauvais : mêmes problèmes que ci-dessus, sauf au moins que l'installation se termine généralement car il n'y a pas de disparité de noyau entre l'ISO et le référentiel FTP. Champ d'application encore limité pour la post-installation. Bon : Absolument fiable et répétable, facile à lancer sur n'importe quelle pile de technologie VM sur Mac ou sur une machine à nu, fonctionnerait n'importe où, mais je ne peux pas post-installer assez )
  3. Diverses méthodes de construction d'un rootfs et de compilation en tant qu'image de disque dur amorçable ( mauvais : le peu que je pouvais faire fonctionner était fragile comme l'enfer, serait difficile à installer sur une vraie machine et est un processus de construction complexe. Bon: si Je pourrais le faire fonctionner, cela semble fournir le plus de possibilités pour préconfigurer la machine à une spécification donnée avec des clés ssh, des clés d'hôte, un nom d'hôte, un logiciel installé à partir de Git et quoi que ce soit d'autre, mais la question serait de savoir comment empaqueter pour la distribution, ou comment écrire son récréation. )

Honnêtement, je ne sais pas quelle technologie les gens sont censés utiliser pour faire passer une machine virtuelle de rien à un système en cours d'exécution, fonctionnel et utile. Cela me semble être trois étapes a) le système d'exploitation, b) la configuration du système (utilisateurs, etc.), puis c) les modifications du système de fichiers.

Pour les machines invitées (virtuelles):

  1. Beaucoup de choses, surtout je pense que la réponse ici est un rootfs en lecture seule créé avec debootstrap, et une partition spéciale sur le conteneur LXC qui contient le travail à faire pour cette instance spécifique (un manifeste de travail). Insérez toutes les mises en garde habituelles concernant la construction du système d'exploitation, le démarrage, la création d'utilisateurs, l'extraction de logiciels à partir de git et le travail.

Je ne suis vraiment pas sûr des outils à atteindre, il semble que le problème devrait être bien résolu. Mais je n'arrive pas à savoir par où commencer vraiment.

La plupart des gens semblent suggérer à la machine hôte que je devrais choisir une technologie de virtualisation, démarrer une machine dans un état de fonctionnement, puis la prendre en photo (libvirt semble le favori logique pour cela). Utilisation de l'instantané pour afficher toutes les installations ultérieures pour les tests ou en production.

Pour les machines invitées, lxc semble fournir l'option la plus simple, sauf que la mise en arrière-plan d'un conteneur, et la connexion à celui-ci plus tard sur la console est rompue dans tous les noyaux actuels, et la dernière version de lxc disponible pour Debian stable a plus de 18 mois et manque de nombreuses fonctionnalités largement utilisées.

En général, je suis développeur d'applications, et je ne travaille pas souvent avec la technologie au niveau du serveur (et je suis certain que SF signalera cette question comme "trop ​​subjective"), mais je ne suis vraiment pas certain des outils à atteindre.

Le dernier mot est que je connais un projet empilé de manière similaire (travis-ci.org) qui utilise des boîtes Vagrant pour cela. Cela semble être un instrument plutôt contondant, de gros outils lents, orientés rubis, conçus pour le provisionnement de bureau à petite échelle de machines virtuelles de test utilisées pour une infrastructure de service critique, mais je connais également certains de ces types, et ils sont plus intelligents que moi, alors peut-être qu'ils ont juste abandonné.

Toute aide appréciée.

Lee Hambley
la source
Devops vraiment ... Cela peut certainement être automatisé. La construction du système est facile. Je suppose que vous pouvez créer un script pour le travail ou utiliser l'outil de gestion de configuration de votre choix. Plus d'informations sur la destination ou le résultat final de cet effort seraient utiles. Vous êtes à la limite d'une solution de cloud privé ou de quelque chose comme LXC ...
ewwhite
Absolument, le but est de pouvoir construire l'hôte d'une manière que mon équipe et moi (utilisateurs Mac) pouvons créer de manière répétée un hôte , à l'intérieur duquel nous pouvons développer avec des invités LCX, mais le construire d'une manière que nous pouvons également déployer à la production. L'outillage de notre application est entièrement écrit en Ruby, et j'aimerais vraiment utiliser LXC pour les invités. La machine hôte a naturellement une durée de vie suffisante, mais comme la durée de vie typique d'un invité sera de 2 à 10 minutes, toute l'infrastructure est éphémère, vraiment. Il s'agit de dev vs production, et d'avoir un processus reproductible.
Lee Hambley

Réponses:

2

Quelques idées:

  1. Votre argument "des centaines de machines virtuelles sur un matériel raisonnable" me fait (sans expérience personnelle) penser aux machines virtuelles qui démarrent sur le réseau ou partagent la plupart de leur espace de volume (/ usr) via NFS. Cela dépend de la similitude de vos machines virtuelles.
  2. "Le peu que je pouvais travailler était fragile comme l'enfer" Difficile à croire. Pouvez-vous être plus précis sur le problème?
  3. "serait difficile à installer sur une vraie machine" Vous voulez dire "difficile" par rapport à quoi, à la solution en 1 clic souhaitée pour la création de VM? Je demanderais: dans quelle mesure est-ce difficile et à quelle fréquence cela se produira-t-il? Quelle est la différence, recréer l'initrd pour le matériel respectif?
  4. "mais je ne peux pas le post-installer assez" De quoi avez-vous besoin / pourquoi et pourquoi cela ne fonctionne-t-il pas? Vous pouvez intégrer le téléchargement d'un script au processus de démarrage. La machine virtuelle obtient son IP par DHCP (configuré en dur à l'adresse MAC des machines virtuelles) et Samba fournit différents scripts de post-installation aux machines virtuelles, en fonction de l'adresse IP du client.
Hauke ​​Laging
la source
+1 pour le démarrage réseau. Je n'ai pas assez d'expérience pour écrire une réponse complète à ce sujet, mais je peux vous dire que j'ai été dans des endroits qui déploient des centaines de machines, à la fois physiques et virtuelles, en les faisant démarrer à partir d'un serveur PXE. Cela signifie que vous n'aurez pas à vous soucier d'images de disque distinctes pour chaque machine virtuelle.
Moshe Katz
1

En lisant votre message, j'ai continué à penser que vagabond et jenkins avec le plugin vagabond répondraient assez bien à vos besoins. Toute boîte que vous avez qui peut réellement gérer le nombre de machines virtuelles dont vous parlez ne devrait même pas remarquer la surcharge des outils de maintenance de l'environnement.

James Thompson
la source
0

En utilisant quelque chose qui fonctionne sur Apple et Debian, la seule chose que j'ai essayée est la boîte virtuelle. Ce qui est bien en utilisant virtualbox ici, c'est que vous pouvez construire une VM sur votre système mac et la copier sur un système Debian en utilisant la même version de virtual box et il démarrera.

Avoir des centaines de vms en utilisant le son de la boîte virtuelle comme vous passerez pas mal de temps à utiliser l' interface vboxmange pour scripter les informations uniques nécessaires pour chaque vm. Comme les uuids pour les disques durs, l'adresse mac sur les interfaces réseau.

Si le système de base va utiliser le même logiciel configuré de la même manière, vous pouvez créer un instantané du système dans une boîte virtuelle et le figer. Pour qu'aucune modification apportée ne soit écrite sur votre cliché figé, mais plutôt écrite dans une nouvelle zone de stockage temporaire. Ensuite, effacez la machine virtuelle, restaurez le cliché et vous travaillez sur un système propre sans aucune modification apportée pendant les tests. Tout cela peut être scripté à l'aide de vboxmange .

En utilisant votre instantané, vous pouvez également faire des centaines de copies de cette image de machine virtuelle. Utilisation de l' interface de script vboxmange pour créer des copies uniques dans la mesure où elles sont importantes, c'est-à-dire les adresses uuids et mac. Ensuite, demandez à un script de démarrage ce qui change, des configurations que vous devez appliquer à vos machines virtuelles pour les tests ou exécuter divers tests.

nelaaro
la source