Comment installer Chef Server, Workstation et Chef Client sur Ubuntu 18.04
Chef est un outil de gestion de configuration basé sur Ruby utilisé pour définir l’infrastructure en tant que code. Cela permet aux utilisateurs d’automatiser la gestion de nombreux nœuds et de maintenir la cohérence entre ces nœuds. Les recettes déclarent l’état souhaité pour les nœuds gérés et sont créées sur le poste de travail d’un utilisateur à l’aide du package Chef Workstation. Vos recettes sont distribuées sur plusieurs nœuds via un serveur Chef. Un client Chef, installé sur chaque nœud, est chargé d’appliquer la recette à son nœud correspondant. Ce guide vous montrera comment installer et configurer un serveur Chef et une station de travail Chef. Nous allons également amorcer un nœud à gérer avec Chef.
Dans ce tutoriel, vous allez apprendre :
- Installer et configurer Chef Server
- Créer un utilisateur et une organisation Chef
- Installer et configurer Chef Workstation
- Configuration de Knife et de l’amorçage d’un nœud client
Chef Architecture.
Configuration logicielle requise et conventions utilisées
Installer et configurer Chef Server
Le serveur Chef est le centre d’interaction entre tous les postes de travail et nœuds sous la gestion de Chef. Les modifications apportées au code de configuration sur les postes de travail sont transmises au serveur Chef, puis extraites par le client-chef d’un nœud pour appliquer les configurations.
Téléchargez la dernière version du serveur Chef en exécutant la commande ci-dessous :
wget https://packages.chef.io/files/stable/chef-server/12.18.14/ubuntu/18.04/chef-server-core_12.18.14-1_amd64.deb
Installez maintenant le package serveur à l’aide de la commande suivante :
dpkg -i chef-server-core_*.deb
Le serveur Chef comprend un utilitaire de ligne de commande appelé chef-server-ctl. Exécutez chef-server-ctl pour démarrer les services du serveur Chef.
chef-server-ctl reconfigure
Une fois la configuration réussie du serveur chef, vous verrez le message ci-dessous et vérifierez également l’état de fonctionnement du serveur chef.
Chef Client finished, 493/1100 resources updated in 12 minutes 02 seconds
Chef Server Reconfigured!
root@ubuntubox1:~# chef-server-ctl status
run: bookshelf: (pid 1435) 6644s; run: log: (pid 1440) 6644s
run: nginx: (pid 1235) 6653s; run: log: (pid 1744) 6631s
run: oc_bifrost: (pid 1196) 6657s; run: log: (pid 1203) 6657s
run: oc_id: (pid 1220) 6655s; run: log: (pid 1227) 6655s
run: opscode-erchef: (pid 4376) 6432s; run: log: (pid 1508) 6644s
run: opscode-expander: (pid 1335) 6648s; run: log: (pid 1431) 6646s
run: opscode-solr4: (pid 1244) 6650s; run: log: (pid 1285) 6649s
run: postgresql: (pid 1176) 6659s; run: log: (pid 1180) 6659s
run: rabbitmq: (pid 4188) 6443s; run: log: (pid 1748) 6631s
run: redis_lb: (pid 27397) 6931s; run: log: (pid 1735) 6632s
root@ubuntubox1:~#
Créer un utilisateur et une organisation Chef
Afin de relier les postes de travail et les nœuds au serveur Chef, créez un administrateur et une organisation avec les clés privées RSA associées.
À partir du répertoire personnel, créez un répertoire .chef pour stocker les clés.
mkdir .chef
Utilisez chef-server-ctl pour créer un utilisateur. Dans cet exemple, modifiez les éléments suivants pour qu’ils correspondent à vos besoins : USER_NAME, FIRST_NAME, LAST_NAME, EMAIL et PASSWORD. Ajustez USER_NAME.pem et laissez l’extension .pem.
chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' --filename ~/.chef/USER_NAME.pemroot@ubuntubox1:~# chef-server-ctl user-create chefadmin Chef Administrator chefadmin@@ubuntubox1.com '*******' --filename ~/.chef/chefadmin.pem
Pour afficher la liste de tous les utilisateurs de votre serveur Chef, exécutez la commande suivante :
root@ubuntubox1:~# chef-server-ctl user-list
chefadmin
pivotal
Créez une organisation et ajoutez l’utilisateur créé à l’étape précédente. Remplacez ORG_NAME par un identificateur court pour l’organisation, ORG_FULL_NAME par le nom complet de l’organisation, USER_NAME par le nom d’utilisateur créé à l’étape ci-dessus et ORG_NAME.pem par l’identificateur court de l’organisation suivi de .pem.
chef-server-ctl org-create ORG_NAME "ORG_FULL_NAME" --association_user USER_NAME --filename ~/.chef/ORG_NAME.pemroot@ubuntubox1:~# chef-server-ctl org-create chef-on-ubuntu "Chef Infrastructure on Ubuntu 18.04" --association_user chefadmin --filename ~/.chef/chef-on-ubuntu.pem
Pour afficher la liste de toutes les organisations sur votre serveur Chef, utilisez la commande suivante :
root@ubuntubox1:~# chef-server-ctl org-list
chef-on-ubuntu
Une fois le serveur Chef installé et les clés RSA générées, nous allons commencer à configurer le poste de travail Chef. Le poste de travail est l’endroit où toutes les configurations principales seront créées pour vos nœuds.
Installer et configurer Chef Workstation
Le poste de travail Chef vous permet de créer et de configurer des recettes, des livres de recettes, des attributs et d’autres modifications nécessaires à la gestion de vos nœuds. Bien qu’il puisse s’agir d’une machine locale exécutant n’importe quel système d’exploitation, il y a un certain avantage à garder un serveur distant comme poste de travail afin que vous puissiez y accéder de n’importe où.
Dans cette section, vous allez télécharger et installer le package Chef Workstation, qui fournit tous les outils également inclus avec le ChefDK, le kit de développement de Chef.
Téléchargez la dernière version de Chef Workstation :
root@ubuntubox2:~# wget https://packages.chef.io/files/stable/chef-workstation/0.2.43/ubuntu/18.04/chef-workstation_0.2.43-1_amd64.deb
--2019-06-03 13:35:51-- https://packages.chef.io/files/stable/chef-workstation/0.2.43/ubuntu/18.04/chef-workstation_0.2.43-1_amd64.deb
Resolving packages.chef.io (packages.chef.io)... 151.101.142.110
Connecting to packages.chef.io (packages.chef.io)|151.101.142.110|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 129713682 (124M) [application/x-debian-package]
Saving to: ‘chef-workstation_0.2.43-1_amd64.deb’
chef-workstation_0.2.43-1_amd64.deb 100%[=====================================================================================>] 123.70M 1.51MB/s in 80s
2019-06-03 13:37:17 (1.55 MB/s) - ‘chef-workstation_0.2.43-1_amd64.deb’ saved [129713682/129713682]
Installez Chef Workstation :
root@ubuntubox2:~# dpkg -i chef-workstation_*.deb
Selecting previously unselected package chef-workstation.
(Reading database ... 117468 files and directories currently installed.)
Preparing to unpack chef-workstation_0.2.43-1_amd64.deb ...
Unpacking chef-workstation (0.2.43-1) ...
Setting up chef-workstation (0.2.43-1) ...
To run the experimental Chef Workstation App, use your
platform's package manager to install these dependencies:
libgconf-2.so.4 => not found
You can then launch the App by running 'chef-workstation-app'.
The App will then be available in the system tray.
Thank you for installing Chef Workstation!
You can find some tips on getting started at https://chef.sh/
Nous devons maintenant créer le référentiel Chef. Le répertoire chef-repo stockera vos livres de cuisine Chef et d’autres fichiers connexes.
chef generate repo chef-repo
Créez un sous-répertoire .chef. Le sous-répertoire .chef stocke le fichier de configuration Knife et les fichiers .pem utilisés pour l’authentification par paire de clés RSA avec le serveur Chef. Déplacez-vous dans le répertoire chef-repo :
root@ubuntubox2:~# mkdir ~/chef-repo/.chef
root@ubuntubox2:~# cd chef-repo
root@ubuntubox2:~/chef-repo#
L’authentification entre le serveur Chef et le poste de travail et/ou les nœuds est effectuée par cryptage à clé publique. Cela garantit que le serveur Chef ne communique qu’avec des machines approuvées. Dans cette section, les clés privées RSA, générées lors de la configuration du serveur Chef, seront copiées sur le poste de travail pour permettre la communication entre le serveur Chef et le poste de travail.
Nous allons générer une paire de clés RSA sur le serveur du poste de travail. Cette paire de clés sera utilisée pour accéder au serveur Chef, puis transférer leurs fichiers .pem :
root@ubuntubox2:~# ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:sR+Nloq6vsc7rX4ZmMInP3SKdk4fYEJH1iLoKNm1YMg root@ubuntubox2.com
The key's randomart image is:
+---[RSA 4096]----+
|.. . o. |
|.E+ oo. . |
| * o.o... |
|+ o... o + |
|. .. ooS = . |
| +o=oo+ . |
| Oo+oo. |
| ooO.+. |
| o=B=*. |
+----[SHA256]-----+
root@ubuntubox2:~#
Téléchargez la clé publique du nœud de poste de travail sur le nœud de serveur Chef.
root@ubuntubox2:~# ssh-copy-id root@ubuntubox1.com
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@ubuntubox1.com's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@ubuntubox1.com'"
and check to make sure that only the key(s) you wanted were added.
root@ubuntubox2:~#
Copiez les fichiers .pem de votre serveur Chef vers votre poste de travail à l’aide de la commande scp.
root@ubuntubox2:~# scp root@ubuntubox1.com:~/.chef/*.pem ~/chef-repo/.chef/
chefadmin.pem 100% 1674 27.9KB/s 00:00
chef-on-ubuntu.pem 100% 1674 496.8KB/s 00:00
Vérifiez que les fichiers ont été copiés avec succès en répertoriant le contenu du répertoire .chef. Les fichiers .pem doivent être répertoriés.
root@ubuntubox2:~# ls ~/chef-repo/.chef
chefadmin.pem chef-on-ubuntu.pem
Générer un nouveau livre de recettes Chef :
root@ubuntubox2:~# chef generate cookbook chef-first-cookbook
Hyphens are discouraged in cookbook names as they may cause problems with custom resources. See https://docs.chef.io/ctl_chef.html#chef-generate-cookbook for more information.
Generating cookbook chef-first-cookbook
- Ensuring correct cookbook file content
- Ensuring delivery configuration
- Ensuring correct delivery build cookbook content
Your cookbook is ready. Type `cd chef-first-cookbook` to enter it.
There are several commands you can run to get started locally developing and testing your cookbook.
Type `delivery local --help` to see a full list.
Why not start by writing a test? Tests for the default recipe are stored at:
test/integration/default/default_test.rb
If you'd prefer to dive right in, the default recipe can be found at:
recipes/default.rb
Générez le chef-repo et déplacez-vous dans le répertoire nouvellement créé :
chef generate app chef-repo
cd chef-repo
Configuration de Knife et de l’amorçage d’un nœud client
Créez un fichier de configuration knife en accédant au répertoire ~/chef-repo/.chef et en créant un fichier nommé config.rb à l’aide de l’éditeur de texte de votre choix.
Copiez la configuration suivante dans le fichier config.rb :
current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
node_name 'node_name'
client_key "USER.pem"
validation_client_name 'ORG_NAME-validator'
validation_key "ORGANIZATION-validator.pem"
chef_server_url 'https://ubuntubox1.com/organizations/ORG_NAME'
cache_type 'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path ["#{current_dir}/../cookbooks"]
La valeur de node_name doit être le nom d’utilisateur qui a été créé sur le fichier Chef server.
Modifiez USER.pem sous client_key pour refléter le fichier .pem pour chef user.
Le validation_client_name doit être le ORG_NAME de l’organisation suivi de -validator.
ORGANIZATION-validator.pem dans le chemin d’accès validation_key doit être défini sur le ORG_NAME suivi de -validator.pem.
Enfin, le chef_server_url doit être le domaine du serveur Chef avec /organizations/ORG_NAME ajouté. Assurez-vous de remplacer ORG_NAME par le nom de l’organisation.
Allez dans le répertoire chef-repo et copiez les certificats SSL nécessaires à partir du serveur :
root@ubuntubox2:~/chef-repo/.chef# cd ..
root@ubuntubox2:~/chef-repo# knife ssl fetch
WARNING: Certificates from ubuntubox1.com will be fetched and placed in your trusted_cert
directory (/root/chef-repo/.chef/trusted_certs).
Knife has no means to verify these are the correct certificates. You should
verify the authenticity of these certificates after downloading.
Adding certificate for ubuntubox1_com in /root/chef-repo/.chef/trusted_certs/ubuntubox1_com.crt
Vérifiez que config.rb est correctement configuré en exécutant la liste des clients. Cette commande doit afficher le nom du validateur.
root@ubuntubox2:~/chef-repo# knife client list
chef-on-ubuntu-validator
L’amorçage d’un nœud installe le client Chef sur le nœud et valide le nœud. Cela permet au nœud de lire à partir du serveur Chef et d’extraire et d’appliquer toutes les mises à jour de configuration nécessaires détectées par le chef-client.
Depuis le poste de travail, accédez au répertoire ~/chef-repo/.chef :
cd ~/chef-repo/.chef
Amorcez le nœud client à l’aide de l’utilisateur racine du nœud client ou d’un utilisateur disposant de privilèges élevés :
root@ubuntubox2:~/chef-repo/.chef# knife bootstrap ubuntubox3.com -x root -P ******* --node-name chef-client-node
Creating new client for chef-client-node
Creating new node for chef-client-node
Connecting to ubuntubox3.com
ubuntubox3.com -----> Installing Chef Omnibus (-v 14)
ubuntubox3.com downloading https://omnitruck-direct.chef.io/chef/install.sh
ubuntubox3.com to file /tmp/install.sh.2019/install.sh
ubuntubox3.com trying wget...
ubuntubox3.com ubuntu 18.04 x86_64
ubuntubox3.com Getting information for chef stable 14 for ubuntu...
ubuntubox3.com downloading https://omnitruck-direct.chef.io/stable/chef/metadata?v=14&p=ubuntu&pv=18.04&m=x86_64
ubuntubox3.com to file /tmp/install.sh.2023/metadata.txt
ubuntubox3.com trying wget...
ubuntubox3.com sha1 ed9b1fcdaf947d9a3d60e6d196308183a082bcff
ubuntubox3.com sha256 9ddcd5ceef19c95ecc1f34bef080c23d9cb42ae8ebc69fd41dcf1c768a6a708f
ubuntubox3.com url https://packages.chef.io/files/stable/chef/14.13.11/ubuntu/18.04/chef_14.13.11-1_amd64.deb
ubuntubox3.com version 14.13.11
ubuntubox3.com downloaded metadata file looks valid...
ubuntubox3.com downloading https://packages.chef.io/files/stable/chef/14.13.11/ubuntu/18.04/chef_14.13.11-1_amd64.deb
ubuntubox3.com to file /tmp/install.sh.2023/chef_14.13.11-1_amd64.deb
ubuntubox3.com trying wget...
ubuntubox3.com Comparing checksum with sha256sum...
ubuntubox3.com Installing chef 14
ubuntubox3.com installing with dpkg...
ubuntubox3.com Selecting previously unselected package chef.
(Reading database ... 117468 files and directories currently installed.)
ubuntubox3.com Preparing to unpack .../chef_14.13.11-1_amd64.deb ...
ubuntubox3.com Unpacking chef (14.13.11-1) ...
ubuntubox3.com Setting up chef (14.13.11-1) ...
ubuntubox3.com Thank you for installing Chef Infra Client! For help getting started visit https://learn.chef.io
ubuntubox3.com Starting the first Chef Client run...
ubuntubox3.com Starting Chef Client, version 14.13.11
ubuntubox3.com resolving cookbooks for run list: []
ubuntubox3.com Synchronizing Cookbooks:
ubuntubox3.com Installing Cookbook Gems:
ubuntubox3.com Compiling Cookbooks...
ubuntubox3.com [2019-06-03T14:01:44+04:00] WARN: Node chef-client-node has an empty run list.
ubuntubox3.com Converging 0 resources
ubuntubox3.com
ubuntubox3.com Running handlers:
ubuntubox3.com Running handlers complete
ubuntubox3.com Chef Client finished, 0/0 resources updated in 05 seconds
Confirm that the node has been bootstrapped by listing the client nodes:
root@ubuntubox2:~/chef-repo/.chef#
Vérifiez que le nœud a été amorcé avec succès en listant les nœuds :
root@ubuntubox2:~/chef-repo/.chef# knife node list
chef-client-node
root@ubuntubox2:~/chef-repo/.chef# knife node show chef-client-node
Node Name: chef-client-node
Environment: _default
FQDN: ubuntubox3.com
IP: 192.168.1.107
Run List:
Roles:
Recipes:
Platform: ubuntu 18.04
Tags:
Conclusion
Dans cet article détaillé, nous avons découvert l’outil de gestion de la configuration Chef avec sa compréhension de base et sa vue d’ensemble de ses composants avec les paramètres d’installation et de configuration. Vous pouvez en savoir plus sur Chef en visitant le site Web de Chef, c’est-à-dire https://www.chef.io/
