Meilleures pratiques / questions du chef

48

J'utilise et aime Marionnette. J'ai déménagé dans une nouvelle entreprise et ils adoptent Chef. J'essaie donc d'apprendre le chef, mais j'ai du mal à tout reconstituer car je pense toujours à Puppet =)

Ce sont mes questions:

  • Est-il préférable de configurer les rôles dans Ruby DSL, JSON ou à partir de la console de gestion? Pourquoi y a-t-il plusieurs façons de faire la même chose?
  • Pouvez-vous organiser des livres de cuisine dans des sous-répertoires? Par exemple: nous avons un logiciel personnalisé pour lequel j'aimerais écrire un livre de cuisine et le coller dans: chef-repo / cookbooks / ourcompanystuff / customsoftwarecookbook, est-ce une bonne pratique?
  • Est-ce que je crée un livre de recettes pour chaque type de rôle spécifiant ce qu'il fait? Est-ce que ces livres de cuisine incluent d'autres livres de cuisine (c'est-à-dire que le livre de cuisine de mon rôle de serveur Web comprend le livre de cuisine Apache). Je ne suis pas sûr de savoir comment les interdépendances et l'héritage des livres de cuisine sont gérés.
  • Existe-t-il un classificateur de nœud externe de Puppet afin que les nœuds déterminent automatiquement leurs rôles?
  • Il semble que vous puissiez configurer les choses avec couteau ou dans la console de gestion, ou éditer des fichiers JSON? C'est très déroutant pour moi pourquoi il y a tant de façons de faire les choses, c'est paralysant! Y a-t-il une raison d'utiliser l'un ou l'autre? Venant de la marionnette, il semble qu'il serait facile de mal configurer accidentellement quelque chose avec ces outils (c'est-à-dire de laisser quelque chose à l'extérieur).
  • Comment puis-je provisionner automatiquement des nœuds avec Chef dans mon cluster de développement? Avec Puppet, je lance une machine virtuelle qui se connecte au maître de la marionnette et lance un cycle de marionnettes et se configure (le rôle est déterminé par un classificateur de nœud externe). Comment puis-je faire cela avec Chef? Installez chef avec des fichiers pem / rb qui le lient à un serveur de chef, indiquez manuellement au nœud ses rôles avec un couteau ou modifiez-le dans l'interface de gestion, puis lancez une course chef-client pour se configurer?

J'ai terminé les didacticiels de prise en main et je vois qu'ils ont des didacticiels EC2, mais je n'ai jamais utilisé EC2 et ils sont donc difficiles à suivre. À ce stade, j'ai hébergé Chef et je commence à jouer avec la configuration d'un seul nœud. Où vais-je d'ici? Dois-je commencer à consulter les livres de cuisine publics?

Les docs sur Opscode sont ok, mais pas aussi bons que ceux de Puppet. Existe-t-il d'autres bonnes ressources de Chef qui pourraient me manquer dans mes recherches?

rizen
la source
5
Beaucoup trop de questions dans un post. Envisagez de scinder chacun en son propre. C'est mieux pour la communauté dans son ensemble et vous obtiendrez de meilleures réponses plus détaillées.
Wesley

Réponses:

84

Modifier Cette question et cette réponse ont plusieurs années. Les meilleures pratiques définitives sont enseignées via les modules de formation auto-rythmés par Learn Chef Rally produits par Chef Software, Inc. Le gros de la réponse originale est ci-dessous.

Dans cette réponse, "Chef" ou "chef-client" fait généralement référence à Chef Infra, le produit. Opscode renommé Chef Software, Inc en 2013 . En avril 2019, Chef a ouvert le code source de tous ses produits, en plus de créer un nom de marque cohérent.

Vous ne savez pas s'il est préférable de configurer des rôles dans Ruby DSL, JSON ou à partir de la console de gestion? Pourquoi y a-t-il plusieurs façons de faire la même chose?

Mise à jour 2019 : les fichiers de stratégie constituent le meilleur flux de travail à utiliser. Les rôles sont considérés comme une pratique inférieure et Chef Software, Inc. recommande de migrer vers Policyfiles.

Il existe plusieurs façons de faire la même chose, car les processus de travail sont différents. Vous choisissez le flux de travail le mieux adapté à votre environnement. Laissez-moi vous expliquer quelles sont les différences pour que vous puissiez prendre une décision éclairée.

Ruby DSL for Roles a été créé pour faciliter l’écriture de rôles sans connaître la syntaxe de JSON. C'est un moyen simple de se familiariser avec les rôles. Une fois les modifications apportées, vous les téléchargez sur le serveur Chef avec un couteau.

knife role from file myrole.rb

Cela convertit le rôle en JSON et le stocke sur le serveur. Si votre environnement impose le référentiel Chef dans lequel vos rôles constituent la source de la vérité, cela fonctionne très bien.

JSON est ce que le serveur Chef stocke. Vous devez donc également éditer JSON directement dans la console de gestion. Il faut plus de champs que le Ruby DSL pour que Knife puisse le reconnaître correctement avant de le télécharger. Ces détails sont cachés dans une certaine mesure via l'interface utilisateur Web.

L'inconvénient de l'utilisation de la console webui / management pour l'édition des rôles est qu'ils ne sont pas dans votre système de contrôle de version local, sauf si vous les téléchargez à partir du serveur. Vous pouvez le faire avec un couteau:

knife role show myrole -Fj

Le -Fjcouteau dit "afficher au format JSON". Vous pouvez rediriger la sortie vers un fichier .json si vous le souhaitez.

Mise à jour il y a plusieurs années : il existe des commandes supplémentaires permettant d'utiliser les fichiers dans le référentiel du chef local. Actuellement, ces commandes ne prennent en charge que les fichiers au format JSON. Une communauté RFC est ouverte. Elle traitera de l'ajout de la prise en charge de Ruby DSL pour ces plugins. Voici un bref résumé du flux de travail.

Vérifiez les différences de contenu entre le serveur et le fichier local.

knife diff roles/myrole.json

Téléchargez un fichier de rôle au format JSON. Le roles/chemin est obligatoire. Ceci est mappé sur le même noeud final d'API sur le serveur.

knife upload roles/myrole.json

Téléchargez le contenu du serveur en écrasant le contenu du fichier dans le référentiel.

knife download roles/myrole.json

Ces commandes proviennent de knife-essentials, qui est intégré dans le package client chef.

Pouvez-vous organiser des livres de cuisine dans des sous-répertoires? Par exemple, nous avons un logiciel personnalisé pour lequel j'aimerais écrire un livre de cuisine et le coller dans: chef-repo / cookbooks / ourcompanystuff / customsoftwarecookbook, serait-ce une bonne pratique?

Knife s'attend à ce que les livres de recettes habitent, car ils utilisent une API pour télécharger des livres de recettes sur le serveur. Ceci est défini dans le knife.rbavec cookbook_path. Dans les anciennes versions de Chef Infra, vous pouviez spécifier un tableau de chemins pour les livres de recettes, mais il est devenu obsolète car il nécessitait davantage de maintenance et était source de confusion pour les utilisateurs.

Par convention, nous nommons des livres de cuisine spécifiques à un client ou à un site avec le nom préfixé dans le répertoire du livre de recettes. Pour votre exemple, ce serait:

chef-repo/cookbooks/ourcompany_customsoftware

Il peut y avoir plusieurs livres de recettes différents pour "notre société" en fonction de ce que vous faites.

Référence supplémentaire:

Est-ce que je crée un livre de recettes pour chaque type de rôle spécifiant ce qu'il fait? Est-ce que ces livres de cuisine incluent d'autres livres de cuisine (c'est-à-dire que le livre de cuisine de mon rôle de serveur Web inclut le livre de cuisine Apache). Je ne suis pas sûr de savoir comment les interdépendances et l'héritage des livres de cuisine sont gérés.

Il n'y a pas de relation directe ou de dépendance entre les rôles et les livres de recettes.

Les rôles ont une liste d'exécution qui spécifie les recettes et les autres rôles à appliquer à tout nœud ayant ce rôle. Les nœuds ont une liste d'exécution pouvant contenir des rôles ou des recettes. Lorsque Chef s'exécute sur le nœud, il développe la liste des tâches pour tous les rôles et toutes les recettes qu'il inclut, puis télécharge les livres de recettes requis. Dans une liste d'exécution de noeud:

recipe[apache2]

Chef téléchargera le apache2livre de recettes pour le noeud afin de pouvoir appliquer cette recette.

Vous pourriez avoir un livre de recettes spécifique pour un rôle dans votre infrastructure. Plus généralement, vous aurez des livres de recettes servant à configurer certains types de services tels qu'apache2, mysql, redis, haproxy, etc. Ensuite, vous les placeriez dans des rôles appropriés. Si vous avez des tâches spécifiques à une application à personnaliser pour pouvoir remplir un rôle, vous pouvez les écrire dans un livre de recettes personnalisé (comme je l’ai mentionné plus haut).

Référence supplémentaire:

Existe-t-il un classificateur externe de nœuds de marionnettes afin que les nœuds déterminent automatiquement leurs rôles?

"Oui." Chef Infra Server effectue automatiquement le stockage des données de noeud (en JSON), et le serveur indexe également automatiquement toutes les données de noeud pour la recherche.

Référence supplémentaire:

Il semble que vous puissiez configurer les choses avec couteau ou dans la console de gestion, ou éditer des fichiers JSON? C'est très déroutant pour moi pourquoi il y a tant de façons de faire les choses, c'est paralysant! Y a-t-il une raison d'utiliser l'un ou l'autre?

Chef Infra Server dispose d'une API RESTful qui envoie et reçoit des réponses JSON. Knife et la console de gestion sont des interfaces utilisateur permettant d'interagir avec l'API du point de vue de l'administration.

Vous pouvez utiliser l'outil que vous préférez, bien que la console de gestion ne comporte pas autant de fonctionnalités que Knife. La plupart des utilisateurs de Chef Infra préfèrent l’interface de ligne de commande pour la puissance et la flexibilité qu’elle procure, même pour les personnes utilisant Chef Infra sous Windows. En outre, knifeest un outil basé sur les plug-ins permettant de créer de nouveaux plug-ins pour interagir avec le serveur Chef Infra Server ou avec d'autres éléments de votre infrastructure.

Chef Infra est un ensemble de bibliothèques, de primitives et une API. Cela vous donne la possibilité de créer le système de gestion de la configuration qui convient le mieux à votre infrastructure.

Lectures complémentaires:

Comment puis-je provisionner automatiquement des nœuds avec chef dans mon cluster de développement? Avec la marionnette, je lance une machine virtuelle qui se connecte au marionnettiste et déclenche une marche de marionnettes et se configure (le rôle est déterminé par un classificateur de nœud externe). Comment puis-je faire cela avec le chef? - Installez chef avec des fichiers pem / rb qui le lient à un serveur de chef, indiquez manuellement au nœud ses rôles avec un couteau ou modifiez-le dans l'interface de gestion, puis lancez une course chef-client pour se configurer?

Vous voudrez utiliser le plugin couteau bootstrap. Ceci est un plugin intégré qui vient avec un couteau. Vous l'invoquez comme ceci:

knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'

Cette volonté:

  • SSH sur le système cible (10.1.1.112) en tant rootqu'utilisateur utilisant une clé SSH (vous pouvez utiliser SSH comme autre utilisateur, puis l'utiliser --sudo).
  • Installez Ruby
  • Installer Chef
  • Créez le fichier de configuration Chef pour votre serveur Chef en lisant la configuration du couteau (.chef / knife.rb).
  • Copiez la clé privée RSA de "validation", que le nœud utilisera pour s'enregistrer automatiquement auprès du serveur Chef.
  • Exécuter chef-clientà l'aide de l'exécution séparée par des virgules répertoriée spécifiée. Dans cet exemple, seul le webserverrôle est appliqué.

Cela suppose que le système cible a été provisionné, qu'il possède une adresse IP et que vous pouvez utiliser SSH en tant que root. En fonction de vos stratégies locales et de votre processus de provisioning, vous devrez peut-être en adapter le fonctionnement. La page de démarrage de couteau sur le wiki décrit plus en détail comment cela fonctionne.

Knife propose également des plugins pour un certain nombre de fournisseurs d'informatique en nuage publics tels qu'Amazon EC2 et Rackspace Cloud. Des plugins sont disponibles pour les environnements de cloud privé tels que Eucalyptus et OpenStack. Il existe également des plugins pour VMware, Vsphere et autres. Vous pouvez voir plus d'informations dans la documentation.

Lectures complémentaires:

Existe-t-il d'autres ressources de chef susceptibles de me manquer dans mes recherches?

La documentation Chef est la source principale de documentation.

Le rallye Learn Chef est une série de modules autoguidés qui vous permettent d’en apprendre davantage sur les divers aspects de Chef Infra et d’autres produits Chef.

Auparavant, je tenais un blog sur lequel je publiais des astuces, des astuces et des guides sur Chef Infra: http://jtimberman.housepub.org/ . J'ai eu une série appelée " conseils rapides ". En raison des circonstances de la vie réelle et d'autres engagements, je n'ai plus le temps de maintenir le site, mais je pourrais y revenir ultérieurement.

Les clients Chef peuvent obtenir de l'aide et de l'assistance sur le site d'assistance:

La communauté d’utilisateurs Chef est une excellente source d’aide supplémentaire:

Des ressources supplémentaires sont disponibles sur le chef Software, le site Web Inc. .

J'espère que ça aide.

jtimberman
la source
2
C’est une ressource précieuse, veuillez la relier plus souvent.
Pooyan Khosravi
Quelque chose à ajouter / mettre à jour 7 ans plus tard? ;)
Spechal le