Quels sont les avantages de faire fonctionner chef-serveur plutôt que chef-solo?

33

Je recherche des solutions de déploiement automatisé pour mon équipe et je joue avec Chef depuis quelques jours. J'ai été en mesure de créer une application Web simple depuis une machine virtuelle Red Hat de base en utilisant Chef-solo.

Notre objectif final est d’utiliser Chef (ou un autre système) pour déployer automatiquement les topologies d’applications sur le cloud lors de l’exécution de versions. Notre processus fonctionnerait essentiellement comme ceci:

  1. Nos codes d'applications Web, nos dépendances et nos livres de recettes de chef sont stockés dans SCM.
  2. Une génération est exécutée et crée un seul package pour les images à acquérir et à tester.
  3. Le moteur de construction déploie ensuite de nouvelles images de cloud qui exécutent un client Chef pour l’installation de packages.
  4. Les images acquièrent les livres de recettes de SCM ou du serveur Chef et installent tout pour être opérationnel.

Quels sont les avantages et / ou les cas d'utilisation permettant à un serveur Chef de fonctionner?

Existe-t-il des avantages majeurs à ce qu'un serveur Chef conserve et acquiert les livres de recettes auprès de SCM par rapport à l'utilisation de chef-solo et à un script permettant d'extraire les livres de recettes de SCM?

linusthe3rd
la source

Réponses:

67

Je vais orienter cette réponse comme si la question était "quels sont les avantages du chef solo", car c'est la meilleure façon que je connaisse de couvrir les différences entre les approches.

Ma recommandation récapitulative va dans le sens des autres: utilisez un chef-serveur si vous devez gérer un environnement virtualisé dynamique où vous ajouterez et supprimerez souvent des nœuds. Un serveur chef est également une bonne CMDB , si vous en avez besoin. Utilisez chef-solo si vous avez un environnement moins dynamique où les nœuds ne changeront pas trop souvent mais les rôles et les recettes le seront. La taille et la complexité de votre environnement sont plus ou moins hors de propos. Les deux approches évoluent très bien.

Si vous déployez chef-solo, utilisez un travail cronjob avec rsync, 'git pull' ou un autre mécanisme de transfert de fichier non autonome pour conserver une copie complète du référentiel Chef sur chaque nœud. Le travail cron devrait être facilement configurable pour (a) ne pas s'exécuter du tout et (b) pour s'exécuter, mais sans synchroniser le référentiel local. Ajoutez un nœud / répertoire dans votre référentiel de chef avec un fichier json pour chaque nœud. Votre cronjob peut être aussi sophistiqué que vous le souhaitez en termes d’identification du bon fichier de nœud (bien que je vous recommande simplement $ (hostname -s) .json. Vous pouvez également créer un compte opscode et configurer un client avec le chef hébergé, si aucune autre raison que de pouvoir utiliser un couteau pour télécharger des livres de recettes de la communauté et créer des squelettes.

Cette approche présente plusieurs avantages, outre l’évident "ne pas avoir à administrer un serveur". Votre contrôle de source sera l'arbitre final de toutes les modifications de configuration, le référentiel inclura tous les noeuds et listes de lecture, et chaque serveur étant totalement indépendant, il facilite certains scénarios de test pratiques.

Chef-server introduit un trou dans lequel vous utilisez le "téléchargement de couteau" pour mettre à jour un livre de cuisine. Vous devez corriger ce trou vous-même (par exemple avec un crochet post-commit) ou vous risquez que les modifications de site soient écrasées en silence par quelqu'un qui "télécharge un couteau". s une recette obsolète du référentiel local obsolète sur son ordinateur portable. Cela risque moins de se produire avec chef-solo, car toutes les modifications seront synchronisées avec les serveurs directement à partir du référentiel maître. Le problème ici est la discipline et le nombre de collaborateurs. Si vous êtes un développeur solo ou une très petite équipe, le téléchargement de livres de recettes via l'API n'est pas très risqué. Dans une grande équipe, cela peut être le cas si vous ne mettez pas de bons contrôles en place.

De plus, avec chef-solo, vous pouvez stocker tous les rôles, attributs personnalisés et listes de contrôle de vos nœuds en tant que fichiers node.json dans votre référentiel principal de chef. Avec chef-server, les rôles et les listes de sélection sont modifiés à la volée à l'aide de l'API. Avec chef-solo, vous pouvez suivre ces informations dans le contrôle de révision. C'est là que le conflit entre les environnements statiques et dynamiques peut être clairement vu. Si votre liste de nœuds (peu importe sa longueur) ne change pas souvent, il est très utile de disposer de ces données dans le contrôle des révisions. D'un autre côté, si vous créez fréquemment de nouveaux noeuds et en détruisez d'anciens (ne jamais voir leur nom d'hôte ou fqdn), tout garder dans le contrôle des révisions est simplement une gêne inutile, et disposer d'une API pour effectuer des modifications est très pratique. Chef-server a également de nombreuses fonctionnalités destinées à la gestion des environnements cloud dynamiques, comme l'option de nom sur "couteau d'amorçage" qui vous permet de remplacer fqdn comme moyen par défaut d'identifier un nœud. Mais dans un environnement statique, ces fonctionnalités ont une valeur limitée, en particulier si vous comparez les rôles et listes de lancement au contrôle de révision avec tout le reste.

Enfin, les environnements de test de recettes peuvent être configurés à la volée pour ne nécessiter quasiment aucun travail supplémentaire. Vous pouvez désactiver les tâches cron exécutées sur un serveur et apporter des modifications directement à son référentiel local. Vous pouvez tester les modifications en exécutant chef-solo et vous verrez exactement comment le serveur se configurera en production. Une fois que tout est testé, vous pouvez enregistrer les modifications et réactiver les tâches cron locales. Toutefois, lors de la rédaction de recettes, vous ne pourrez pas utiliser l’API "Rechercher", ce qui signifie que si vous voulez écrire des recettes dynamiques (par exemple, des équilibreurs de charge), vous devrez modifier cette limitation en collectant les données des fichiers json dans votre nœud / répertoire, ce qui risque d’être moins pratique et de manquer de certaines des données disponibles dans la CMDB complète. Encore une fois, des environnements plus dynamiques favoriseront l’approche basée sur les bases de données, les environnements moins dynamiques conviendront avec des fichiers JSON sur le disque local. Dans un environnement de serveur où un chef doit faire des appels d'API à une base de données centrale, vous devrez gérer tous les environnements de test de cette base de données.

Le dernier peut également être utilisé en cas d'urgence. Si vous résolvez un problème critique sur les serveurs de production et que vous le résolvez avec un changement de configuration, vous pouvez le modifier immédiatement sur le référentiel du serveur, puis le transférer en amont vers le maître.

Ce sont les principaux avantages du chef solo. Il y en a d'autres, comme ne pas avoir à administrer un serveur ou à payer pour un chef hébergé, mais ce sont des préoccupations relativement mineures.

Pour résumer: si vous êtes dynamique et hautement virtualisé, chef-server fournit un certain nombre de fonctionnalités intéressantes (couvertes ailleurs) et la plupart des avantages de chef-solo seront moins perceptibles. Cependant, le chef solo présente des avantages certains, souvent non mentionnés, en particulier dans des environnements plus traditionnels. Notez que le déploiement sur le cloud ne signifie pas nécessairement que vous avez un environnement dynamique. Si vous ne pouvez pas, par exemple, ajouter plus de nœuds à votre système sans publier une nouvelle version de votre logiciel, vous n'êtes probablement pas dynamique. Enfin, dans une perspective de haut niveau, une CMDB peut être utile pour un grand nombre d'éléments liés de manière tangentielle à l'administration et à la configuration du système, tels que la comptabilité et le partage d'informations entre les équipes. Utiliser chef-server pourrait en valoir la peine pour cette seule fonctionnalité.

Goladus
la source
Comment stockeriez-vous / distribueriez-vous des données sensibles (par exemple: clés privées / mots de passe) avec chef-solo? Comment le suivre avec le contrôle de révision sans le stocker en texte clair?
Limbo Peng
@LimboPeng Vous pouvez stocker des sacs de données cryptés dans le référentiel Chef. Vous devez cependant stocker la clé de cryptage en externe.
Willie Wheeler
27

Divulgation: Je travaille pour Opscode.

Le principal avantage de Chef Server sur Solo est la possibilité d'utiliser la recherche avec votre infrastructure. L'exemple classique est un équilibreur de charge avec des serveurs Web. L'équilibreur de charge peut automatiquement mettre à jour sa configuration lorsque des serveurs Web sont ajoutés et supprimés dans l'infrastructure, simplement en les recherchant. Solo n’est que cela, des machines uniques, tandis que Chef Server offre la possibilité d’interroger des éléments tels que «toutes les machines avec plus de 4 Go de RAM» ou «la base de données maître».

Chef Server vous donne également la possibilité de gérer votre infrastructure sans copier les archives, de visualiser votre infrastructure avec la console de gestion et de gérer les ordinateurs qui exécutent les versions des livres de recettes avec les environnements. Il y a d'autres avantages, mais ce sont ceux qui me viennent à l'esprit. Si vous souhaitez essayer le serveur Chef sans l'installer, il vous suffit de vous connecter à un compte Opscode Hosted Chef. Les 5 premiers nœuds sont gratuits.

mray
la source
1
Merci beaucoup, cette information aide un TON. Savez-vous comment on adopterait la philosophie DevOps en utilisant le serveur Chef? Ce que je veux dire par là, c'est que tous nos livres de cuisine vivent dans SCM. Existe-t-il un moyen simple de mettre à jour les livres de recettes du serveur Chef lors de la livraison du nouveau code?
linusthe3rd
2
@ strife25 Vous devez absolument avoir vos livres de cuisine dans un système de contrôle de version. Si vous n'êtes pas obligé de l'être, Opscode recommande Git car il est facile de travailler avec des branches et des rochers pour des équipes réparties. Vous pouvez écrire un hook post-commit qui télécharge des livres de recettes sur le serveur Chef. Vous ne vous contentez pas de cloner des livres de recettes sur le serveur Chef, vous les téléchargez via une API, ce qui est parfaitement voulu.
Jtimberman
1

chef-server gère les livres de recettes et les données de configuration de vos nœuds.

Vous ajoutez des livres de cuisine à chef-server à l'aide de l'outil couteau, puis vous donnez à chaque nœud une liste de recette pour qu'il puisse récupérer les livres de recettes dont il a besoin lorsque le nœud se configure lui-même à l'aide de chef-client. Puisque chef-client s’exécute en arrière-plan, vos nœuds vérifieront périodiquement s’il existe des livres de recettes mis à jour dans votre chef-serveur.

chef-server contient également vos données de configuration et vos variables afin que vous puissiez modifier les paramètres permettant à vos nœuds de récupérer automatiquement. Cela convient aux paramètres plus dynamiques qui ne doivent pas ou ne peuvent pas être codés en dur dans vos recettes.

Andrew Vit
la source