Skip to content

Instantly share code, notes, and snippets.

@therobot
Created November 25, 2009 10:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save therobot/242616 to your computer and use it in GitHub Desktop.
Save therobot/242616 to your computer and use it in GitHub Desktop.
# Taller de Chef: Administra sistemas como Ferran Adriá cocina
## Qué es Chef
- ¿Que es?
Framework de integración de sistemas. Nos proporciona recursos y asbtracciones de alto nivel para
manejar nuestra máquina.
- ¿Para que Sirve?
- Consistencia de nuestra plataforma.
- Mayor control de la plataforma.
- Flexibilidad sin pérdida de control
- Control de versiones de la configuración.
- Arquitectura: http://wiki.opscode.com/display/chef/Anatomy+of+a+Chef+Run
## Instalación de Chef
- Bajar virtualbox: http://www.virtualbox.org/wiki/Downloads
- Bajar la maquina: http://dl.dropbox.com/u/265209/chef.zip
### Instalamos chef-server
- Editamos /etc/apt/sources.list y añadimos:
deb http://apt.opscode.com intrepid universe
- Ejecutamos
sudo apt-get install curl git-core apg
curl http://apt.opscode.com/packages@opscode.com.gpg.key | sudo apt-key add -
sudo apt-get update
- Instalamos chef-server en la maquina administrativa
sudo apt-get install rubygems ohai chef chef-server
- Arreglamos un bug con los startup links ya que couchdb se arranca despues que chef.
sudo update-rc.d -f couchdb remove
sudo update-rc.d couchdb defaults 15
sudo update-rc.d -f stompserver remove
sudo update-rc.d stompserver defaults 15
### Registramos y Validamos chef-server
Es necesario disponer de un identificador único para cada máquina chef usa ohai para extraer el fqdn del hostname
- Editamos el fichero /etc/hosts para dejarlo asi:
127.0.0.1 planet-waves.wadus localhost
127.0.1.1 planet-waves.wadus
- Editamos el fichero /etc/hostname para dejarlo asi:
planet-waves.wadus
- Ejecutamos:
sudo hostname planet-waves.wadus
- Editamos el fichero /etc/chef/server.rb
e - Editamos el parametro validation_token, creando para ello un token con por ejemplo apg -m 40
- Reiniciamos el servidor:
sudo /etc/init.d/chef-server restart
- Registramos nuestro nodo server, ejecutando:
sudo chef-client -t validation_token
- Accedemos al webui y registramos el nodo, vamos a Registrations y ahi vemos el nodo.
http://192.168.56.10:4000
### Instalamos un cliente
- Editamos /etc/apt/sources.list y añadimos:
deb http://apt.opscode.com intrepid universe
- Ejecutamos:
sudo apt-get install curl
curl http://apt.opscode.com/packages@opscode.com.gpg.key | sudo apt-key add -
sudo apt-get update
- Tecleamos:
sudo apt-get install rubygems ohai chef
### Registramos y validamos un cliente
- Editamos el fichero /etc/hosts para dejarlo asi:
127.0.0.1 web1.wadus localhost
127.0.1.1 web1.wadus
- Editamos el fichero /etc/hostname para dejarlo asi:
web1.wadus
- Ejecutamos:
sudo hostname web1.wadus
### Configuramos un cliente:
- Editamos el fichero de configuración, con los parametros del servidor.
/etc/chef/client.rb
- Tecleamos:
sudo chef-client -t validation_token
- Editamos el script que lanza el fichero para reducir el intervalo.
- Lanzamos el demonio cliente
sudo /etc/init.d/chef-client start
### Sintaxis y Configuración de Servidores con Chef
- ¿Que hay dentro de un cookbook?
- Nodes: Donde se aplican las recetas, básicamente nuestras máquinas.
- Atributes: Nos permiten usar "variables" en las recetas.
¿Como se definen?: http://wiki.opscode.com/display/chef/Attributes
- Templates: Son templates de erb, junto con los atributos nos permiten crear ficheros personalizados.
¿Como se definen?: http://wiki.opscode.com/display/chef/Templates
- Files: Archivos de texto que se deployan tal y como esta.
En este punto hablamos de: File/Template Location Specifity:
Nos permiten adaptar nuestros cookbooks a diferentes sistemas operativos, versiones diferentes de un mismo sistema o incluso hosts sueltos.
http://wiki.opscode.com/display/chef/Files#Files-FileSpecificity
- Resources: Unidad básica de trabajo en chef, Ficheros, Servicios, Usuarios...
Explicamos los recursos: http://wiki.opscode.com/display/chef/Resources
- Recipes: Combinación de todo lo anterior para producir resultados.
http://wiki.opscode.com/display/chef/Resources
- Roles: Conjunto de recetas comunes a una funcionalidad de una máquina.
- Casi todo el tiempo escribes cookbooks
- Extra:
- Definitions: Permiten crear nuevos recuros combinando recursos existentes:
http://wiki.opscode.com/display/chef/Definitions
- Libraries: Clases de ruby hechas por el usuario.
- Metadata: Define dependencias.
- Nos bajamos el esqueleto de un repo chef, para ello ejecutamos en el master:
git clone git://github.com/opscode/chef-repo.git
cd chef-repo
rake
- Como creamos un libro de cocina?
rake new_cookbook COOKBOOK=nombre
- Creamos el cookbook de rails y el cookbook de ruby:
rake new_cookbook COOKBOOK=rails
rake new_cookbook COOKBOOK=ruby
rake new_cookbook COOKBOOK=apt
rake new_cookbook COOKBOOK=common_tools
- Editamos las recetas del repositorio apt:
- Editamos apt/recipes/default.rb (aqui podriamos añadir tambien cosas com añadir claves de apt descargando la clave y ejecutando el comando apt-key)
- Editamos apt/files/default/sources.list
- Verificamos la validez de las recetas:
rake test_recipes
- Consejo: configurar chef-client con el log en debug al escribir y depurar recetas
- Instalamos las recetas en el servidor Chef:
rake install
- Actualizamos el nodo:
sudo chef-client
- Comiteamos los ficheros.
git add cookbooks/*
git commit cookbooks/ -m 'Feat: initial chef structure'
### Caso práctico: Desplegando toda la potencia de chef
- Descargamos el repo:
git clone git://github.com/therobot/chef-repo.git
- Contamos las recetas.
apt, base, ruby, ree, security, monitoring, backups, sudoers, users, apache
- Vamos al interfaz web y añadimos el rol al nodo, guardamos y ejecutamos.
- Mas recetas: Compartid las vuestras!
http://github.com/opscode/cookbooks
http://github.com/37signals/37s_cookbooks
http://github.com/engineyard/ey-cloud-recipes
http://robotplaysguitar.com
## Preguntas
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment