Manejando tu infraestructura en la nube
DevOps Style




Juanje Ojeda



Antes de ver las herramientas

veamos qué queremos arreglar     






Resiliencia

Shit happens

Embrace the Failure


Jesse Robbins

Evitar procesos manuales

The Wall


El camino del sysadmin


  • ssh
  • Guardar notas en ~/servidor_web2.txt
  • Pasar las notas a un wiki
  • Crear algunos scripts ( setup.sh, fixit.sh, etc.)
  • Versionar los scripts ( setup_20150422.sh, deploy_db_2.sh)
  • Golden images y snapshots
  • Ejecución remota vía ssh ( for ip in $IPS;do ssh $ip fix.sh ; done)
  • Usar un sistema de control de versiones para script y configuraciónes
  • Sistema de gestión de la configuración


Configuraciones

Especificaciones


  • Igual que en proyectos software
  • Se define el qué, no el cómo
  • Deben poder comprobarse que se cumplen

Especificaciones


El puerto 80 debe estar abierto

El servicio MySQL debe estar arrancado

El HAProxy debe balancear la carga de todos los frontales web

Infraestructure as code


  • Autodocumentado
  • Ejecutable
  • Versionado
  • Pruebas

Testing




No es un sistema de aprovisionamiento



Bootstraping: Proceso de instalar y preparar la máquina para ser usada.


Gestión de la configuración: Capacidad de saber y modificar qué configuración se está aplicando en cada momento y entorno.


Chef  Docker

(Contenedores en general)

Chef + Azure


  • Aprovisionar VM (Linux y Windows)
  • Crear y modificar recursos de Azure
  • Asistir al escalado de Azure
  • Describir y desplegrar infraestructuras en Azure
  • Coordinar servicios y aplicaciones
  • Inventariado de recursos
  • Replicar entornos
  • Pruebas rápidas de los sistemas

Chef + Azure

Recursos


chef-provision Azure



# Database!
machine 'mario' do
  recipe 'postgresql'
  recipe 'mydb'
  tag 'mydb_master'
end

num_webservers = 1

# Web servers!
1.upto(num_webservers) do |i|
  machine "luigi#{i}" do
    recipe 'apache'
    recipe 'mywebapp'
  end
end

Knife Azure (I)


List images for use in creating new VM's:
$ knife azure image list
List all VM's (including those not be managed by Chef)
$ knife azure server list
Create and bootstrap a Windows VM over winrm (winrm is the default for Windows)
$ knife azure server create --azure-dns-name MyNewServerName --azure-vm-size Medium -I a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201412.01-en.us-127GB.vhd --azure-service-location 'West US' --winrm-user myuser --winrm-password 'mypassword'

Knife Azure (II)


Create and bootstrap an Ubuntu VM over ssh
$ knife azure server create -N MyNewNode --azure-vm-size Medium -I b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_1-LTS-amd64-server-20140927-en-us-30GB -m 'West US' --ssh-user myuser --identity-file ~/.ssh/myprivatekey_rs
Create and bootstrap an Windows VM through the Azure API (No winrm or ssh transport or Internet access required)
$ knife azure server create --azure-dns-name MyNewServerName --azure-vm-size Medium -I a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201412.01-en.us-127GB.vhd --azure-service-location 'West US' --winrm-user myuser --winrm-password 'mypassword' --bootstrap-protocol winrm --bootstrap-protocol cloud-api

Cookbook Microsoft Azure

Gestión de recursos de Azure

Crear un servidor de base de datos en la localización Wes US con el usuario admin y la clave password:

microsoft_azure_sql_db_server 'West US' do
  management_certificate microsoft_azure['management_certificate']
  subscription_id microsoft_azure['subscription_id']
  login 'admin'
  password 'password'
  action :create
end

Cookbook Microsoft Azure

Gestión de recursos de Azure

Crear un contenedor de almacenamiento con el nombre my-node en la cuenta my-account:

microsoft_azure_storage_container 'my-node' do
  storage_account 'my-account'
  access_key microsoft_azure['access_key']
  action :create
end

¿Preguntas?

Chef & Azure

By Juanje Ojeda