Este mes anunciamos una muy emocionante asociación con Canonical, los creadores de Ubuntu. Por encima de todo, el elemento principal de esta asociación es la introducción del soporte completo de CloudInit entre la nube de CloudSigma y Ubuntu.
Una introducción a CloudInit
Si no está familiarizado con CloudInit, es el estándar de la industria para el arranque de servidores en la nube. Para aclarar, si está utilizando un simple DSL es posible realizar tareas fácilmente en el primer arranque. También vale la pena señalar que CloudInit no se limita a Ubuntu. Hoy en día encontrará soporte para CloudInit en la mayoría de las distribuciones de Linux modernas (pero las nubes compatibles variarán).
Antes de comenzar con CloudInit, es importante comprender dónde encaja CloudInit en el ecosistema de aprovisionamiento. Si bien es posible ejecutar CloudInit como un sistema de aprovisionamiento independiente, es mucho más común usarlo en conjunto con otro sistema de aprovisionamiento, como Ansible, Chef, Puppet o Salt. En ese caso, simplemente usaría CloudInit para llevar su nuevo servidor a un estado en el que el sistema de aprovisionamiento pueda hacerse cargo. Personalmente, a menudo uso CloudInit en combinación con Ansible.
Uso de CloudInit en CloudSigma
Usar CloudInit en CloudSigma es muy sencillo.
Para usar CloudInit en un servidor Ubuntu 14.04, siga los siguientes pasos:
-
- Clone la unidad “Ubuntu 14.04 Cloud Image” desde el mercado (actualmente la única unidad totalmente compatible con CloudInit). Asegúrese de cambiar el tamaño de la unidad clonada al tamaño deseado y esta expandirá automáticamente el sistema de archivos en el primer arranque.
- Cree un nuevo servidor.
- Con el servidor creado, verá un botón de CloudInit debajo del estado del servidor.

-
- Al hacer clic en este botón, aparecerá el siguiente cuadro de diálogo.

- Simplemente pegue sus datos de CloudInit aquí y presione ‘Activar’.
- Puede iniciar su servidor y el script se ejecutará en el primer arranque.
Instalar clave(s) SSH con CloudInit
Ahora que sabe cómo a usar CloudInit en nuestra nube, pongamos en práctica este nuevo conocimiento utilizándolo para instalar dos claves SSH. Las dos claves SSH públicas ficticias que utilizaremos son ‘ssh-rsa AAA[…] user1@host‘ y ‘ssh-rsa AAA[…] user2@host‘. (Para obtener más información sobre la generación de claves SSH, eche un vistazo a esta página en Github.)
En las imágenes de nube de Ubuntu, el nombre de usuario predeterminado es ‘ubuntu’. Por lo tanto, las claves se instalarán en esa cuenta de usuario.
La configuración de CloudInit para esto se vería de la siguiente manera:
[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]
Tenga en cuenta que los espacios importan. Hay dos espacios antes del ‘-‘. Si solo coloca uno, es posible que el servidor no lo lea.
Una vez que haya guardado la configuración de CloudInit y haya iniciado el servidor, debería poder acceder por SSH al servidor utilizando el usuario ‘ubuntu’:
[bash light="true"]
$ ssh ubuntu@aaa.bbb.ccc.ddd
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Sun Oct 19 21:51:54 UTC 2014
System load: 0.0 Users logged in: 0
Usage of /: 77.4% of 39.34GB IP address for eth0: aaa.bbb.ccc.ddd
Memory usage: 26%
Swap usage: 0%
Processes: 113
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
[...]
ubuntu@myserver:~$
[/bash]
Instalar actualizaciones del sistema con CloudInit
Otra cosa muy útil que puede lograr fácilmente con CloudInit es ejecutar actualizaciones del sistema en el primer arranque. Aunque actualizamos nuestras imágenes de disco con frecuencia, sigue siendo una buena idea tomar precauciones adicionales para asegurarse de que sus sistemas estén actualizados.
Para instalar actualizaciones del sistema en el primer arranque, agregue lo siguiente:
[ruby]
#cloud-config
apt_update: true
apt_upgrade: true
[/ruby]
También puede notar que hay una opción similar llamada ‘package_update,’ que es un alias neutral de distribución para ‘apt_update’ en Ubuntu.
Además, ‘apt_update’ se establecerá en true de forma predeterminada si se establece ‘packages’ (a continuación), pero lo he agregado arriba para que sea más explícito.
Instalar paquetes con CloudInit
Una parte fundamental para el arranque inicial de los sistemas es poder instalar paquetes al iniciar. Afortunadamente, CloudInit también facilita esto. Todo lo que necesitamos hacer es especificar una lista de los paquetes que queremos instalar bajo ‘packages.’ Por ejemplo, si quisiéramos instalar ‘python-pip,’ ‘fail2ban’ y ‘vim’, se vería de la siguiente manera:
[ruby]
#cloud-config
packages:
- python-pip
- fail2ban
- vim
[/ruby]
Nuevamente, tenga en cuenta que los espacios importan. Hay dos espacios antes del ‘-‘.
Establecer el hostname usando CloudInit
Cuando aprovisiona un nuevo servidor, es posible que también desee establecer el hostname para el mismo.
[ruby]
#cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]
Ejecutar comandos en el primer arranque con CloudInit
Asumiendo que está haciendo algo más sofisticado con sus servidores, es probable que tenga algún comando que necesite ejecutar en el primer arranque.
Aquí es donde entran en juego ‘runcmd’ y ‘bootcmd’. Ambos le permiten ejecutar comandos en el primer arranque. La diferencia es que ‘bootcmd’ se ejecuta antes en el proceso de arranque que ‘runcmd.’
Para usar cualquiera de estos comandos, agregue lo siguiente a su CloudInit:
[ruby]
#cloud-config
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]
Uso de CloudInit con un gestor de configuración
Por último, si es un usuario de la nube más avanzado, lo más probable es que esté utilizando algún gestor de configuración. Afortunadamente, CloudInit viene preparado para esto. Sin embargo, es un tema bastante complejo de cubrir, dadas las muchas variables.
Así que aquí tiene algunos ejemplos que deberían poder orientarlo en la dirección correcta:
Cómo vincular múltiples elementos
Para aquellos que no están familiarizados con los archivos de estilo YAML, puede que no sea obvio cómo encadenar múltiples elementos de CloudInit. Sin embargo, es sencillo. En la primera línea, necesita ‘#cloud-config‘. Después de eso, simplemente agrega su configuración.
Por ejemplo, combinar todos los ejemplos anteriores en una sola configuración se vería de la siguiente manera:
[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
apt_update: true
apt_upgrade: true
packages:
- python-pip
- fail2ban
- vim
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]
Recursos adicionales
Realmente solo hemos arañado la superficie de lo que CloudInit puede hacer en este artículo. Hay un montón de otras cosas que también puede hacer para aprender, como crear usuarios y grupos, escribir archivos en el disco y llamar a URLs al finalizar (para notificar a otros sistemas).
Si desea obtener más información sobre CloudInit, le recomiendo las siguientes fuentes:
- Documentación oficial de CloudInit
- Guía de CloudInit de Ubuntu
- Documentación de CloudInit de RedHat
- Biblioteca de ejemplos de CloudInit de Ubuntu
Comentarios
Aún no hay comentarios. Sea el primero.