Modèle de serveur immuable avec Docker / Ansible vs Ansible, Puppet et Foreman dans AWS?

9

Nous rencontrons un argument intéressant et tombons dans deux camps. Je suis intéressé par des problèmes particuliers avec une idée ou des problèmes que nous pourrions manquer. Vraiment, tout ce qui peut nous aider à prendre une décision ou à souligner des choses que nous ne tenons pas compte. Je sais que cela contourne un peu la règle du "sans opinion" mais j'espère que c'est toujours une question acceptable. Désolé pour la longueur aussi, il y a pas mal de nuances.

1) Un côté (le mien - je ne suis pas sans parti pris) trouve le modèle de serveur immuable très intéressant pour les systèmes cloud. À cette fin, nous avons prototypé le déplacement de tous les composants de notre infrastructure dans Docker. Nos applications personnalisées se construisent via Jenkins directement dans des images Docker qui se déploient dans un registre Docker local. Ensuite, nous avons créé un grand ensemble de rôles Ansible et un playbook capable d'atteindre un serveur vide, installons Docker, puis demandons à Docker d'installer tous les conteneurs selon les besoins. Au bout de quelques minutes, l'application entière et toute son infrastructure de support sont câblées et fonctionnent - journalisation, surveillance, création / population de base de données, etc. application. Notre plan pour étendre cela serait de créer de nouveaux Playbooks pour construire de nouveaux serveurs AWS à partir d'une AMI de base de confiance (probablement une image très nue), de déployer des déploiements de l'application de production pour gérer la gestion de la configuration et les versions et, généralement, ne jamais modifier à nouveau les serveurs - faites-les à nouveau. Je ne souhaite pas que ce que je décris fonctionne dans la pratique - juste si c'est un modèle raisonnable.

2) L'autre camp veut utiliser Puppet pour gérer la gestion de la configuration, Ansible pour déployer nos applications personnalisées qui sont des tarballs générés à partir de notre processus de construction, Foreman pour gérer le déclenchement et la gestion du processus dans son ensemble et Katello pour faire une certaine quantité de base gestion des images. Les versions impliqueraient la modification de la configuration de Puppet selon les besoins et le déploiement par Ansible de composants mis à jour avec une certaine coordination de Foreman. Les serveurs seraient construits assez rapidement si nous en avions besoin de nouveaux, mais l'intention n'est pas de les rendre jetables dans le cadre du processus standard. C'est plus proche du modèle de serveur phoenix mais avec une longue durée de vie.

Donc ma question se résume vraiment à ceci: le modèle de serveur immuable avec les outils tels que je les ai décrits ci-dessus est-il aussi réaliste qu'il y paraît? J'adore l'idée que notre processus de transfert peut littéralement créer un clone entier des applications en direct, laissez QA le marteler, puis retournez simplement le stockage de la base de données et certains paramètres DNS pour le faire vivre.

Ou le modèle de serveur immuable échoue-t-il dans la pratique? Nous avons beaucoup d'expérience avec les environnements AWS et cloud, donc ce n'est pas vraiment le problème - plus une question de comment obtenir une application raisonnablement sophistiquée déployée de manière fiable à l'avenir. Ceci est particulièrement intéressant car nous publions assez fréquemment.

Nous avons Ansible qui fait la plupart des choses nécessaires, sauf la création de serveurs EC2 pour nous et ce n'est pas difficile. J'ai du mal à comprendre pourquoi vous avez réellement besoin de marionnettes / contremaître / Katello dans ce modèle. Docker est beaucoup plus propre et plus simple que les scripts de déploiement personnalisés dans n'importe quel outil que je peux dire. Ansible semble beaucoup plus simple à utiliser que Puppet lorsque vous cessez de vous inquiéter de devoir les configurer in situ et de les reconstruire simplement avec la nouvelle configuration. Je suis un fan du principal KISS - en particulier dans l'automatisation où Murphy's Law est endémique. Moins il y a de machines, mieux c'est l'OMI.

Toute réflexion / commentaire ou suggestion sur l'approche serait grandement apprécié!

Docteur John Wick
la source
Mes préjugés sont conformes aux vôtres. J'ai utilisé tous les principaux systèmes de gestion de configuration pendant des mois, voire des années, je ne peux pas imaginer utiliser des marionnettes pour un nouveau projet de nos jours. Le chef est un choix plus mature si vous souhaitez vous en tenir aux systèmes à base de rubis. Ansible semble être le meilleur de la race de nos jours, mais le sel est également un choix décent.
poussins
Marionnette et ansible? Tu vas passer un mauvais moment.
dmourati
Docker ouvre la possibilité d'utiliser kubernetes, ce qui signifie la mise à l'échelle automatique, l'auto-réparation, etc. Le champ du conteneur arrive à maturité et est une très bonne option si votre application peut s'adapter au paradigme du microservice
Droopy4096

Réponses:

1

Dans notre entreprise, nous avons réussi à mettre en œuvre Puppet sur l'infrastructure héritée du client. Nous utilisons également des conteneurs Docker pour exécuter un service dédié (qui est en fait une ancienne application découpée et tordue pour s'adapter aux conteneurs).
Je n'étais pas satisfait des conteneurs la première fois que j'ai commencé à travailler avec eux (ouais ... une application de 30 Ko devient une image lourde de 200 Mo) mais quand j'ai dû recréer l'environnement entier après une petite catastrophe, j'ai changé d'avis. Je pense que Docker a été inventé exactement pour cela: des déploiements rapides et souvent sans se soucier de la configuration du serveur. Si vous concevez correctement les conteneurs, vous pouvez facilement basculer entre les fournisseurs de cloud, les ordinateurs portables de développeur et les centres de données de colocation. Parce que tout ce dont vous avez besoin est une boîte Linux vanilla avec le démon Docker.

  • Dans le scénario 1), vous avez tout en un seul endroit (je veux dire un parce qu'avec Docker vous aurez le code ET la configuration dans le même référentiel) facile à gérer, lire et déployer.
  • Dans le scénario 2), vous devez stocker les éléments de configuration pour 3 outils différents (!) Dans un référentiel et le code d'application dans l'autre, ce qui complique les choses

J'utilisais également Puppet dans mon projet précédent et mon expérience jusqu'à présent est qu'un serveur immuable est réalisable plutôt avec Docker qu'avec Puppet ou Chef. Je pense que les outils de gestion de la configuration sont plus utiles pour les fournisseurs de cloud que pour l'équipe de développement.

alxndr
la source
0

Voici mes 2 centimes d'euro.

Les 2 options que vous proposez sont des options valides pour réaliser (une sorte) d'immuabilité.
Je pense que vous devriez choisir celle avec laquelle vous êtes le plus à l'aise.
Cependant, d'après ce que vous écrivez, il semble qu'il n'y ait pas encore de consensus.
Peut-être qu'une troisième option est alors nécessaire? ;)

Cependant, comme une telle immuabilité n'est pas un objectif mais un moyen d'assurer d'autres propriétés (pas de dérive de configuration, meilleure stabilité, ...).
J'énoncerais clairement mes objectifs, mettrais des métriques pour les valider et ferais des tests en utilisant les 2 options. Vous auriez alors quelques chiffres pour sélectionner celui qui correspond le mieux à votre entreprise.

Bonne chance!

sebbrochet
la source