Chef es una herramienta de gestión de configuración basada en Ruby que se utiliza para definir la infraestructura como código. Esto permite a los usuarios automatizar la gestión de muchos nodos y mantener la coherencia entre esos nodos. Las recetas declaran el estado deseado para los nodos administrados y se crean en la estación de trabajo de un usuario mediante el paquete Chef Workstation. Sus recetas se distribuyen a través de los nodos a través de un servidor Chef. Un cliente Chef, instalado en cada nodo, se encarga de aplicar la receta a su nodo correspondiente. Esta guía le mostrará cómo instalar y configurar Chef Server y Chef Workstation. También iniciaremos un nodo para administrar con Chef.
Chef Arquitectura.
Requisitos de software y convenciones de la línea de comandos de Linux Categoría | Requisitos, convenciones o versión de software utilizada |
Sistema | Ubuntu Linux 18.04 |
Software | Chef Server Core, Chef Workstation, Chef Client, Chef Development Kit |
Otro | Acceso privilegiado a su sistema Linux como root o a través de sudo comando. |
Convenciones | # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios |
Instalar y configurar Chef Server
El servidor de Chef es el centro de interacción entre todas las estaciones de trabajo y los nodos bajo la administración de Chef. Los cambios realizados en el código de configuración en las estaciones de trabajo se envían al servidor Chef y, a continuación, el chef-cliente de un nodo los extrae para aplicar las configuraciones.
Descargue el último servidor de Chef ejecutando el siguiente comando:
# wget https://packages.chef.io/files/stable/chef-server/12.18.14/ubuntu/18.04/chef-server-core_12.18.14-1_amd64.deb
Ahora instale el paquete del servidor con el siguiente comando:
# dpkg -i chef-server-core_*.deb
El servidor Chef incluye una utilidad de línea de comandos llamada chef-server-ctl. Ejecute chef-server-ctl para iniciar los servicios del servidor Chef.
# chef-server-ctl reconfigure
Luego de una configuración exitosa del servidor chef, verá el siguiente mensaje y también verificará el estado de ejecución del servidor 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:~#
Crear usuario Chef y organización
Para vincular estaciones de trabajo y nodos al servidor Chef, cree un administrador y una organización con claves privadas RSA asociadas.
Desde el directorio de inicio, cree un directorio .chef para almacenar las claves.
# mkdir .chef
Utilice chef-server-ctl para crear un usuario. En este ejemplo, cambie lo siguiente para que coincida con sus necesidades:NOMBRE_USUARIO, NOMBRE_NOMBRE, APELLIDO, CORREO ELECTRÓNICO y CONTRASEÑA. Ajuste USER_NAME.pem y deje la extensión .pem.
chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' --filename ~/.chef/USER_NAME.pem
root@ubuntubox1:~# chef-server-ctl user-create chefadmin Chef Administrator chefadmin@@ubuntubox1.com '*******' --filename ~/.chef/chefadmin.pem
Para ver la lista de todos los usuarios en su servidor Chef, emita el siguiente comando:
root@ubuntubox1:~# chef-server-ctl user-list
chefadmin
pivotal
Cree una organización y agregue el usuario creado en el paso anterior. Reemplace ORG_NAME con un identificador corto para la organización, ORG_FULL_NAME con el nombre completo de la organización, USER_NAME con el nombre de usuario creado en el paso anterior y ORG_NAME.pem con el identificador corto de la organización seguido de .pem.
chef-server-ctl org-create ORG_NAME "ORG_FULL_NAME" --association_user USER_NAME --filename ~/.chef/ORG_NAME.pem
root@ubuntubox1:~# chef-server-ctl org-create chef-on-ubuntu "Chef Infrastructure on Ubuntu 18.04" --association_user chefadmin --filename ~/.chef/chef-on-ubuntu.pem
Para ver la lista de todas las organizaciones en su servidor Chef, use el siguiente comando:
root@ubuntubox1:~# chef-server-ctl org-list
chef-on-ubuntu
Con el servidor Chef instalado y las claves RSA generadas, comenzaremos a configurar la estación de trabajo Chef. La estación de trabajo es donde se crearán todas las configuraciones principales para sus nodos.
Instalar y configurar la estación de trabajo Chef
La estación de trabajo Chef es donde crea y configura recetas, libros de cocina, atributos y otros cambios necesarios para administrar sus nodos. Aunque esta puede ser una máquina local que ejecuta cualquier sistema operativo, hay algunos beneficios en mantener un servidor remoto como su estación de trabajo para que pueda acceder a él desde cualquier lugar.
En esta sección, descargará e instalará el paquete Chef Workstation, que proporciona todas las herramientas que también se incluyen con ChefDK, el kit de desarrollo de Chef.
Descarga la última estación de trabajo Chef:
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]
Instalar 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/
Ahora necesitamos crear el repositorio Chef. El directorio chef-repo almacenará sus libros de cocina Chef y otros archivos relacionados.
# chef generate repo chef-repo
Cree un subdirectorio .chef. El subdirectorio .chef almacenará el archivo de configuración de Knife y los archivos .pem que se utilizan para la autenticación del par de claves RSA con el servidor Chef. Vaya al directorio chef-repo:
root@ubuntubox2:~# mkdir ~/chef-repo/.chef
root@ubuntubox2:~# cd chef-repo
root@ubuntubox2:~/chef-repo#
La autenticación entre el servidor Chef y la estación de trabajo y/o los nodos se completa con cifrado de clave pública. Esto garantiza que el servidor de Chef solo se comunique con máquinas de confianza. En esta sección, las claves privadas RSA, generadas al configurar el servidor Chef, se copiarán en la estación de trabajo para permitir la comunicación entre el servidor Chef y la estación de trabajo.
Generaremos un par de claves RSA en el servidor de la estación de trabajo. Este par de claves se utilizará para obtener acceso al servidor de Chef y luego transferir sus archivos .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 [email protected]
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:~#
Cargue la clave pública del nodo de la estación de trabajo en el nodo del servidor Chef.
root@ubuntubox2:~# ssh-copy-id [email protected]
/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
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
root@ubuntubox2:~#
Copie los archivos .pem de su servidor Chef a su estación de trabajo usando el comando scp.
root@ubuntubox2:~# scp [email protected]:~/.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
Confirme que los archivos se hayan copiado correctamente enumerando el contenido del directorio .chef. Los archivos .pem deben aparecer en la lista.
root@ubuntubox2:~# ls ~/chef-repo/.chef
chefadmin.pem chef-on-ubuntu.pem
Generar un nuevo libro de cocina 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
Genere el repositorio de chef y muévase al directorio recién creado:
# chef generate app chef-repo
# cd chef-repo
Configurar cuchillo y arrancar un nodo de cliente
Cree un archivo de configuración del cuchillo navegando al directorio ~/chef-repo/.chef y creando un archivo llamado config.rb usando su editor de texto preferido.
Copie la siguiente configuración en el archivo 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"]
El valor de node_name debe ser el nombre de usuario que se creó en el servidor de Chef.
Cambie USER.pem en client_key para reflejar el archivo .pem para el usuario chef.
Validation_client_name debe ser ORG_NAME de la organización seguido de - validator.
ORGANIZATION-validator.pem en la ruta de la clave_validación debe establecerse en ORG_NAME seguido de -validator.pem.
Finalmente, chef_server_url debe ser el dominio del servidor Chef con /organizations/ORG_NAME agregado. Asegúrese de reemplazar ORG_NAME con el nombre de la organización.
Vaya al directorio chef-repo y copie los certificados SSL necesarios del servidor:
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
Confirme que config.rb esté configurado correctamente ejecutando la lista de clientes. Este comando debería mostrar el nombre del validador.
root@ubuntubox2:~/chef-repo# knife client list
chef-on-ubuntu-validator
Arrancar un nodo instala el cliente Chef en el nodo y valida el nodo. Esto permite que el nodo lea desde el servidor Chef y despliegue y aplique cualquier actualización de configuración necesaria detectada por el chef-cliente.
Desde la estación de trabajo, navegue hasta el directorio ~/chef-repo/.chef:
# cd ~/chef-repo/.chef
Arranca el nodo cliente ya sea utilizando el usuario raíz del nodo cliente o un usuario con privilegios elevados:
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#
Confirme que el nodo se haya iniciado correctamente enumerando los nodos:
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:
Conclusión
En este artículo detallado aprendimos sobre la herramienta Chef Configuration Management con su comprensión básica y descripción general de sus componentes con ajustes de instalación y configuración. Puede obtener más información sobre Chef visitando el sitio web de Chef, es decir, https://www.chef.io/