Manejando tu infraestructura en la nube
DevOps Style
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
- Test-Kitchen (tool for developing and testing)
- Foodcritic (lint tool)
- Chef-Spec (unit tests)
- ServerSpec (integration tests)
- Audit mode (>= Chef 12.1.0)
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 Client Agent (extensión de Azure)
- Chef Server VM (marketplace de Azure)
- Chef-provisioning Azure
- Knife Azure
- Cookbook Microsoft Azure
- Test-Kitchen Azure
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
Chef & Azure
- 2,352