Introducción a Chef en Linux
Chef es una plataforma de automatización de configuración que permite administrar servidores Linux de forma consistente y reproducible. En este artículo exploraremos cómo instalar Chef Workstation, crear recetas básicas y aplicar cambios a nodos mediante el chef-client.
Requisitos previos
- Una distribución Linux reciente (Ubuntu 22.04, Debian 12, CentOS Stream 9)
- Acceso con privilegios de sudo
- Conexión a Internet para descargar paquetes
Instalación de Chef Workstation
El primer paso consiste en descargar el paquete oficial desde el sitio de Chef. En sistemas basados en Debian podemos usar wget y dpkg:
wget https://packages.chef.io/files/stable/chef-workstation/22.3.108/ubuntu/22.04/chef-workstation_22.3.108-1_amd64.deb sudo dpkg -i chef-workstation_22.3.108-1_amd64.deb
En Red Hat basado sistemas se usa rpm:
wget https://packages.chef.io/files/stable/chef-workstation/22.3.108/el/9/chef-workstation-22.3.108-1.el9.x86_64.rpm sudo rpm -Uvh chef-workstation-22.3.108-1.el9.x86_64.rpm
Tras la instalación, verifique la versión con:
chef --version
Creando tu primera receta
Una receta en Chef es un archivo Ruby que declara los recursos deseados. Vamos a crear una receta simple que instale y active el servicio nginx.
# archivo: my_cookbook/recipes/nginx.rb package 'nginx' do action :install end service 'nginx' do action [:enable, :start] end
Guarde el archivo dentro de un cookbook llamado my_cookbook. Luego suba el cookbook al Chef Server o use chef-solo para pruebas locales.
Ejecutando chef-client en nodos
Para aplicar la configuración a un servidor Linux, instale el chef-client en el nodo y ejecute:
sudo chef-client -z -o my_cookbook::nginx
La opción -z permite ejecutar en modo local sin necesidad de un Chef Server. El nodo consultará la receta y asegurará que nginx esté instalado y en ejecución.
Ventajas de usar Chef en entornos Linux
- Idempotencia: aplicar la misma receta múltiples veces no causa cambios no deseados.
- Versionado: los cookbooks se pueden versionar con Git, facilitando rollbacks.
- Escalabilidad: gestionar desde unos pocos hasta miles de nodos con la misma definición.
- Integración con la nube: plugins para AWS, Azure, GCP permiten aprovisionar y configurar instancias automáticamente.
Pruebas con Test Kitchen
Antes de promover un cookbook a producción, es recomendable validarlo en entornos aislados. Test Kitchen permite lanzar máquinas virtuales o contenedores, aplicar la receta y verificar el estado.
# .kitchen.yml
driver:
name: docker
provisioner:
name: chef_zero
platforms:
- name: ubuntu-22.04
suites:
- name: nginx
run_list:
- recipe::my_cookbook::nginx
attributes:
Ejecute kitchen test y observe que los tests pasen. Esto asegura que la receta funciona en una imagen limpia.
Integración con CI/CD
Chef se integra fácilmente con pipelines de Jenkins, GitLab CI o GitHub Actions. Un ejemplo sencillo en GitHub Actions:
name: Chef CI
on: [push]
jobs:
test-cookbook:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Chef Workstation
run: |
wget https://packages.chef.io/files/stable/chef-workstation/22.3.108/ubuntu/22.04/chef-workstation_22.3.108-1_amd64.deb
sudo dpkg -i chef-workstation_22.3.108-1_amd64.deb
- name: Run syntax check
run: cookstyle
- name: Run Test Kitchen
run: kitchen test
De esta manera cada push dispara una validación automática.
Conclusión
Chef se posiciona como una herramienta robusta para la automatización de infraestructuras Linux. Su enfoque basado en código y su comunidad activa hacen que sea una opción válida tanto para pequeños equipos como para grandes empresas. Al seguir los pasos descritos en este post, podrá comenzar a gestionar sus servidores de forma consistente y reducir el tiempo dedicado a tareas manuales.


