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:
- Démarrez une machine (virtuelle ou autre) et préparez-la à fonctionner.
- Le travail doit être effectué par un script installé par le chef / marionnette / babushka / etc
- Lorsque le travail arrive, une machine virtuelle doit être démarrée pour faire le travail.
- 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
- 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 .)
- 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 )
- 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):
- 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.