web-dev-qa-db-fra.com

Relation entre Vagrant, Docker, Chef et OpenStack (ou produits similaires)?

Je suis développeur web, mais je suis également intéressé par quelques tâches administratives. Par conséquent, le nouveau passage de l'administration pure aux opérations de développement est très pratique pour moi.

Quoi qu'il en soit, j'ai quelques problèmes pour mettre quelques choses dans une relation. Peut-être qu'il n'y en a pas, alors je voulais demander de l'aide pour clarifier.

Fondamentalement, ce que je veux mettre en relation, ce sont quatre types de logiciels (d'après ma compréhension). Les produits exacts n'ont pas d'importance, vous pouvez placer n'importe quel logiciel similaire comme alternative:

  • Vagrant: D'après ma compréhension, il s'agit d'automatiser la création et la gestion des machines virtuelles: les configurer, les démarrer et les arrêter. Cela peut être fait en utilisant un local VM ou distant, par exemple sur une plate-forme cloud.
  • Docker: une "machine virtuelle légère", basée sur quelques concepts de noyau Linux, qui peut être utilisée pour exécuter des processus de manière isolée, par ex. dans un environnement d'hébergement Web partagé.
  • Chef: Un outil pour installer et configurer un système d'exploitation, par ex. à l'intérieur d'une machine virtuelle.
  • OpenStack: un outil qui vous permet de créer votre propre cloud privé, donc comparable à quelque chose comme AWS.

Question # 1: Mes explications sont-elles correctes, ou ai-je tort avec certaines (ou toutes) de ces consommations?

Question # 2: Comment pourrais-je mélanger tous ces outils? Cela aurait-il un sens?

Dans mon imagination et de mon point de vue, vous pourriez aller

  • utilisez OpenStack pour créer votre propre cloud,
  • utiliser Vagrant pour gérer les machines virtuelles exécutées dans le cloud,
  • utiliser Chef pour configurer ces machines virtuelles
  • et enfin utiliser Docker pour exécuter des processus à l'intérieur des machines virtuelles.

Est-ce correct? Et si oui, pouvez-vous me donner des conseils sur la façon de commencer à utiliser tout cela (c'est beaucoup en même temps, et je ne sais pas encore par où commencer)?

57
Golo Roden

Utilisons leurs pages Web respectives pour découvrir de quoi parlent tous ces projets. Je vais cependant changer l'ordre dans lequel vous l'avez listé:

  • Chef : Chef est une plateforme d'automatisation qui transforme l'infrastructure en code.

    Il s'agit d'un logiciel de gestion de configuration . La plupart d'entre eux utilisent le même paradigme: ils vous permettent de définir l'état que vous voulez qu'une machine soit, en ce qui concerne les fichiers de configuration, les logiciels installés, les utilisateurs , des groupes et de nombreux autres types de ressources. La plupart d'entre eux fournissent également des fonctionnalités pour pousser les modifications sur des machines spécifiques, un processus généralement appelé orchestration .

  • Vagrant : Créez et configurez des environnements de développement légers, reproductibles et portables.

    Il fournit un moyen reproductible de générer machines entièrement virtualisées en utilisant la technologie Oracle VirtualBox ou VMWare comme fournisseurs =. Vagrant peut se coordonner avec un logiciel de gestion de configuration pour continuer le processus d'installation là où l'installateur du système d'exploitation se termine. Ceci est connu sous le nom de provisioning .

  • Docker : Un projet open source pour emballer, expédier et exécuter n'importe quelle application en tant que conteneur léger

    La fonctionnalité de ce logiciel chevauche quelque peu celle de Vagrant, dans laquelle il fournit les moyens de définir les installations des systèmes d'exploitation, mais diffère considérablement de la technologie utilisée à cet effet. Docker utilise conteneurs Linux , qui ne sont pas des machines virtuelles en soi, mais des processus isolés exécutés dans des systèmes de fichiers isolés. Docker peut également utiliser un système de gestion de la configuration pour approvisionner les conteneurs.

  • OpenStack : Logiciel open source pour la construction de clouds privés et publics.

    S'il est vrai que OpenStack peut être déployé sur une seule machine , un tel déploiement est purement pour la preuve de concept, probablement pas très fonctionnel en raison de contraintes de ressources.

    La cible principale des installations OpenStack sont les environnements multi-nœuds nus, où les différents composants peuvent être utilisés dans du matériel dédié pour obtenir de meilleurs résultats.

    Une fonctionnalité clé d'OpenStack est sa prise en charge de nombreuses technologies de virtualisation, de entièrement virtualisé (VirtualBox, VMWare), paravirtualisé (KVM/Qemu) et aussi des conteneurs (LXC) et même ser Mode Linux (UML) .

J'ai essayé de présenter ces produits comme des composants d'une architecture spécifique. De mon point de vue, il est logique de pouvoir d'abord définir vos besoins en fonction de l'environnement dont vous avez besoin (Chef, Puppet, Ansible, ...), puis de pouvoir le déployer de manière contrôlée (Vagrant, Docker , ...) et enfin l'adapter à la taille globale si besoin est.

La quantité de toutes ces fonctionnalités dont vous avez besoin doit être définie dans le cadre de votre projet.

Notez également que j'ai simplifié la plupart des explications techniques. Veuillez utiliser les liens référencés pour des informations détaillées.

55
dawud

Je pense que le fait d'être issu d'un développeur rendra plus difficile de devenir un `` devops '', votre question a presque 3 ans, il serait donc intéressant de savoir comment vous trouvez le voyage, je donnerai une réponse du point de vue de l'administrateur système sur les applications que vous avez mentionnées ci-dessus et, espérons-le, cela apportera un éclairage ou donnera une perspective non technique qui expliquera en partie pourquoi une personne (administrateur ou développeur) commencerait à considérer exactement ce que vous avez demandé, par exemple du point de vue des devops, quelle est la relation entre x, y, z, ces outils sont-ils supérieurs à la somme de leurs parties?

En fait, je pense que les administrateurs système ont le dessus ici, la plupart des applications que vous mentionnez dans votre question résolvent les `` problèmes '' d'administration et, ce faisant, fournissent un environnement de centre de données plus abstrait, ce qui est à son tour plus programmable pour les développeurs et les nouveaux '' stratégie de devops (lire stratégie/équipe, devops n'est pas une personne). Quelle est donc la relation avec les applications que vous mentionnez? comment cela offre-t-il une approche holistique du service informatique?

OpenStack: un outil qui vous permet de créer votre propre cloud privé, donc comparable à quelque chose comme AWS

C'est ça, mais qu'est-ce que ça fait? - le système d'exploitation le plus judicieusement nommé était D.O.S - il exploitait votre disque en faisant abstraction du BIOS, OpenStack exploite votre centre de données et résume votre infrastructure (IaaS - est le jargon du système d'exploitation du centre de données). Maintenant, votre centre de données a une API, une syntaxe de commande et une interface graphique, OpenStack peut piloter des hyperviseurs, des commutateurs, des routeurs, des pare-feu, des réseaux de stockage, des équilibreurs de charge, des hôtes dockers, etc. Openstack utilise le plugin de votre fabricant de matériel ou la fonction particulière peut exister uniquement dans le logiciel tel que défini par logiciel quelque chose ou la virtualisation de la fonction réseau. De plus, OpenStack et tous les autres clouds peuvent orchestrer leur propre infrastructure en lisant les scripts que vous lancez sur le moteur d'orchestration ou sont déclenchés en fonction de règles (scale up, scale down etc.). Openstack est donc une couche géante d'abstraction, par ex. Peu m'importe quel commutateur j'ai, donnez-moi un réseau avec cette commande , ou, construisez-moi une charge complexe équilibrée, HA, accessible au public, mise à l'échelle automatique, nom de domaine enregistré, stockage attaché thingy - avec ce script que j'ai trouvé sur Internet.

Docker: une "machine virtuelle légère", basée sur quelques concepts de noyau Linux, qui peut être utilisée pour exécuter des processus de manière isolée, par ex. dans un environnement d'hébergement Web partagé.

Docker est une autre couche d'abstraction et comme le cloud est une technologie perturbatrice, il change l'industrie car il résout de nombreux `` problèmes '' opérationnels comme les dépendances logicielles, les mises à niveau, l'isolement des données et la portabilité. Java est devenu populaire en raison de la portabilité du code source à laquelle les développeurs n'avaient pas à penser, une machine virtuelle Java en cours d'exécution signifiait que leur code devrait s'exécuter sur la machine à café tant qu'il prend en charge Java. Docker résout un problème similaire, pour exécuter mon application, vous avez besoin d'un hôte docker, pas , vous avez besoin de cette version de python, de ce noyau, de cette distribution linux et ainsi de suite , l'application a toujours ces dépendances bien sûr, mais l'hôte sous-jacent ne se soucie pas et l'administrateur ne se soucie pas de ce que vous faites à l'intérieur d'un conteneur isolé (jusqu'à un certain point). Docker change à la fois le paradigme de développement et d'opérations, traitant un système d'exploitation entier et ses services comme un binaire. nous pouvons les obtenir à partir d'un référentiel , les versionner, les modifier, les exécuter avec des paramètres, etc.

Chef: Un outil pour installer et configurer un système d'exploitation, par ex. à l'intérieur d'une machine virtuelle.

Oui, et pas aussi perturbateur que les deux premiers, Chef, marionnette, ansible, sel, gestionnaire des opérations du centre du système et une pléthore massive d'autres applications dans cet espace fournissent aux développeurs et aux administrateurs un moyen de modéliser les déploiements, les mises à niveau et d'autres actions (config changements), il ne semble pas y avoir d'organisme de normalisation pour regarder ces efforts comme il y en a pour le cloud . Mais nous ne traitons pas avec quelque chose d'aussi définitif que l'infrastructure, c'est donc plus douloureux de les apprendre et peu de choses sont transférables de l'une à l'autre.

Vagrant: D'après ma compréhension, il s'agit d'automatiser la création et la gestion des machines virtuelles: les configurer, les démarrer et les arrêter. Cela peut être fait en utilisant un local VM ou distant, par exemple sur une plate-forme cloud.

C'est l'étrange dans la liste des applications que vous mentionnez, Vagrant est un outil pour les développeurs et un jouet pour les administrateurs, vous pouvez rapidement mettre en place un environnement de développement avec vagrant, par exemple Je veux développer une application Android, prenez une IDE de vagrant, je pense qu'elle sera bientôt dépassée par Docker.

pouvez-vous me donner des conseils sur la façon de commencer à utiliser tout cela (c'est beaucoup en même temps, et je ne sais pas encore par où commencer)?

C'est pourquoi je pense que les administrateurs ont le dessus, nous avons dû faire la plupart de cela manuellement et savoir ce qui peut mal se passer, les manifestes de marionnettes, le cloud computing et l'orchestration des dockers nous viendront plus facilement, les développeurs se retrouveront à prendre de nombreuses tangentes donc mon le conseil à tous les devops potentiels est d'être un administrateur en premier.

3
Sum1sAdmin

De mon côté, j'utilise uniquement une combinaison de Vagrant et Docker.

J'utilise vagrant pour provisionner les machines (il y a fournisseurs de cloud supplémentaires mais j'utilise la VirtualBox intégrée. Parce que j'utilise cette approche, la mise en réseau et le stockage externes sont à peu près manuels, mais si vous utilisez quelque chose comme le vagrant-aws plugin vous pouvez dire à AWS de fournir les pièces nécessaires pour vous.

Le script de provisioning que j'utilise pointe vers un emplacement sécurisé qui contient le certificat CA et les clés utilisées pour signer les CSR avec le docker swarm join jetons. De plus j'installe le moteur docker et le configure pour rejoindre l'essaim (initialiser s'il n'y en a pas).

Une fois que c'est réglé, je fais simplement un docker stack deploy depuis ma machine locale ou ma boîte de génération pour déployer la pile avec tout ce dont j'ai besoin.

Dans mon cas, je viens de laisser tomber chef en faveur de l'utilisation de simples scripts de post-installation qui font yum ou apt-get on comme mes scripts de provisioning.

J'utilise également le plugin vagrant-triggers pour ajouter des scripts supplémentaires avant de détruire (dans mon cas, pour laisser l'essaim).

La partie agréable de la centralisation avec Vagrant est que vous pouvez répliquer l'environnement sur un autre système ou un seul ordinateur pour le développement, il suffit d'ajouter ou de modifier la section provider. Attention, je n'ai pas encore configuré OpenStack sur un seul ordinateur pour gérer VirtualBox.

0
Archimedes Trajano

Je viens de terminer un projet de déploiement OpenStack qui utilise un serveur Chef à l'intérieur d'une instance de Vagrant: https://github.com/bluechiptek/bluechipstack/blob/master/README.md

Le principal problème avec cette méthode consiste à obtenir la même IP à l'instance de Vagrant chaque fois que vous souhaitez gérer les nœuds. Si vous faites un adressage statique, cela fonctionne bien. Le faire via un VPN est loin d'être idéal.

0
kordless