Chef en Linux: Automatiza tu infraestructura con confianza

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.

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional para Francesc Roig francesc@vivaldi.net .

EspañolesEspañolEspañol