web-dev-qa-db-fra.com

Y a-t-il une raison d'utiliser Puppet aux côtés de Docker?

J'ai essayé la partie Ops de DevOps il y a un certain temps et c'était assez amusant, mais je n'ai pas le temps et la raison de l'essayer dans aucun projet. Mais la semaine dernière, j'ai commencé un nouveau travail, où le patron m'a demandé si je pouvais configurer le serveur pour créer quelque chose comme un environnement de transfert pour les projets de l'entreprise. Parallèlement à cela, j'ai commencé à réfléchir à la migration du projet pour devenir plus DevOps plutôt que seulement dev.

Je suis sorti avec Docker, ce qui est génial et très facile pour moi. Mais il ya quelque temps, j’essayais de jouer à Puppet. Une question m’est alors venue à l’esprit: "Y at-il une raison pour utiliser Puppet avec Docker?". Docker semble faire tout ce que Puppet ferait, mais plus facilement.

PS Il y a quelque temps sur Hacker News, il y avait Consul , ce qui correspond à la configuration de Nice et à la découverte du service. résolu (et je pense à la mise en œuvre aussi).

16
Hauleth

Les marionnettes et les dockers peuvent faire à peu près la même chose, mais ils les abordent différemment.

Puppet gère les fichiers + packages + services. (Appelé le trifecta). Docker encapsule les fichiers binaires et les fichiers de configuration à l’intérieur d’un conteneur.

Au moment d'écrire ces lignes, le menu fixe est toujours instable et ne doit pas être utilisé en production. De nombreuses API sont susceptibles d'être modifiées jusqu'à la publication de la version 1.0.

Même lorsque docker devient stable, la conversion de tous les processus et fichiers de configuration en conteneurs Docker sera une entreprise de grande envergure.

En revanche, la marionnette est un produit stable et comprend tout un écosystème d’outils (heira, mcollective, facter, rasoir). Ces outils peuvent être mis en œuvre rapidement et sans souci d'inactivité.

Je suggère fortement les ressources suivantes.

Une vidéo sur la gestion des piles d’applications avec des marionnettes
https://www.youtube.com/watch?v=KSo_mcJxFIA

Un podcast sur la manière dont docker et marionnette peuvent travailler ensemble
http://devopscafe.org/show/2014/1/23/devops-cafe-episode-46.html

Un article de marionnette sur l'intégration de docker
http://puppetlabs.com/blog/building-puppet-based-applications-inside-docker

Un autre article de blog sur la coexistence de marionnettes et de dockers
http://puppetlabs.com/blog/can-containers-and-configuration-management-co-exist

Un module de marionnettes pour interagir avec docker
http://docs.docker.io/use/puppet/

Une correction mineure sur la terminologie de devops. Devops est plus un méthodologie de développement logiciel où les développeurs et les opérations coopèrent, que n'importe quel outil spécifique.

Mettre à jour

Actuellement, mon entreprise utilise à la fois des marionnettes et des dockers. Voici une excellente présentation donnée à la conférence marionnettes 2014 sur les raisons pour lesquelles vous utiliseriez marionnette vs docker. Donné par James Turnbull, un ancien employeur de puppetlabs et l'auteur du livre de docker.

https://puppetlabs.com/presentations/using-docker-puppet-james-turnbull-kickstarter

Aussi un bon court tutoriel vidéo sur docker donné par sysadmincasts.com

https://sysadmincasts.com/episodes/31-introduction-to-docker

Docker

  • Peut tourner l'instance rapidement
  • Plus facile à apprendre qu'une marionnette
  • Facile à faire 0 temps d'arrêt

Docker Contre:

  • Les conteneurs ont une limite de 10 Go lors de l’utilisation du backend devicemapper
  • La reconstruction du conteneur nécessite de nombreuses modifications de configuration
  • Coûte de l'argent pour utiliser un registre de docker comme hub.docker.com, quay.io (le registre de docker auto-hébergé est extrêmement bogué et n'a pas d'interface graphique)
  • Pas de bon système d'initialisation. Certaines applications ne jouent pas à Nice.
  • Pas de contrôle fin du réseau
  • Les applications nécessitant des sous-coques (qui vous regardent RVM + Ruby) sont très difficiles à faire fonctionner correctement
  • Impossible de gérer les hôtes Windows, pas de SLES ou d'autres systèmes d'exploitation moins populaires
  • Actuellement, l'orchestration des dockers est très jeune.
  • Actuellement, ne peut pas définir votre fichier /etc/resolv.conf au moment de la compilation
  • Divers bugs que nous devons monter/etc/localtime et/dev/urandom pour mapper vers les répertoires hôtes localtime et urandom.
  • Les performances ne sont pas aussi rapides (malgré toutes les affirmations selon lesquelles le menu fixe devrait représenter 99% de la vitesse du métal nu, il est parfois 30% plus lent que les autres machines).
  • Les petits conteneurs ont encore des centaines de mégaoctets de frais généraux. Nos conteneurs ont tous plusieurs gigaoctets.

Marionnette

  • Facile à mettre à l'échelle
  • Fonctionne avec les serveurs existants (windows, linux, sles)
  • Rapide pour faire de petits changements
  • Forte communauté d'autres utilisateurs de marionnettes et de modules
  • API normalisée pour l'installation de packages sur toutes les plateformes

Contre les marionnettes:

  • Les grandes infrastructures deviennent très complexes
  • Les dépendances conditionnelles des modules créent du code spagetti
  • Plus lourd

Actuellement, nous utilisons des marionnettes pour approvisionner nos conteneurs Docker. Les conteneurs Docker sont utilisés pour les constructions Jenkins et sont détruits après chaque construction. Cela fonctionne bien et nous donne un environnement cohérent. Cela signifie que nous n'avons qu'à écrire le code une fois, puis à reconstruire les machines Ubuntu, Sles et Centos. La reconstruction des conteneurs prend environ 15 à 30 minutes et est toujours un processus manuel. Docker est idéal pour tester rapidement les vm,

Bref, puppet est très efficace pour gérer votre infrastructure existante. Docker est bon si vous avez un greenfield 100% linux avec une pile technologique pouvant être enfermée dans de petites instances éphémères. Bien que certaines fonctionnalités se chevauchent, elles ne s'excluent pas mutuellement.

18
spuder

Docker vous aide à provisionner et à configurer initialement les conteneurs, mais il exécute des commandes uniques lors de l'initialisation du conteneur.

La marionnette est la plus puissante lorsque vous l'exécutez en tant que démon. Elle garantit que votre configuration reste telle que vous la spécifiez. Ainsi, par exemple, si votre service cesse de fonctionner, il va le redémarrer.

Une des meilleures choses à propos des manifestes de configuration de marionnettes (correctement conçus) est qu’ils sont idempotent ; il est censé décrire l'état dans lequel vous voulez être et pas nécessairement les étapes pour y arriver.

Il vous permet également d’abstraire et de paramétrer des configurations et vous pouvez paramètres d’exportation créés sur un serveur ou un conteneur et les utiliser sur un autre (par exemple, collecte d’une liste de noms d’hôte de nœuds pour une application de surveillance).

Je dirais qu'ils servent assurément des objectifs différents mais connexes. Je cherche actuellement à utiliser les manifestes de marionnettes existants pour commencer à configurer les conteneurs afin que les environnements de développement ressemblent davantage à des environnements de production.

2
xtrade