Una introducción al aprovisionamiento de servidores en la nube con CloudInit

Este mes anunciamos una alianza muy emocionante alianza muy emocionante con Canonical, os creadores de Ubuntu. Un elemento clave de esta alianza es la introducción de soporte de entre la nube de CloudSigma y Ubuntu.

Una introducción a CloudInit

Si no estás familiarizado con CloudInit, es el forma estándar de la industria para rápidamente configurar e inicializar servidores en la nube. Usando un simple DSL, ies posible fácilmente realizar tareas al primer arranque. También vale la pena señalar que CloudInit no se limita a Ubuntu. Hoy en día encontrará soporte por CloudInit en la mayoría de distribuciones de Linux (pero las nubes que lo soportan variará).

Antes de empezar con CloudInit, es importante comprender dónde CloudInit encaja en el ecosistema de aprovisionamiento. Mientras es posible ejecutar CloudInit como un sistema de aprovisionamiento independiente, es mucho más común usarlo en conjunto con otros sistemas de aprovisionamiento, como Ansible, Chef, Puppet o Salt. En ese caso, utilizaría CloudInit para llevar su nuevo servidor a un estado al cual el sistema de aprovisionamiento puede tomar control. Personalmente, utilizo CloudInit a menudo en combinación con Ansible.

Utilizando CloudInit en CloudSigma

Utilizando CloudInit en CloudSigma es muy sencillo.

Para utilizar CloudInit en un servidor de Ubuntu 14.04, hay que tomar los siguientes pasos:

  • Clone la unidad de disco «Ubuntu 14.04 Cloud Image» de la biblioteca de unidades (actualmente la única unidad totalmente compatible con CloudInit). Asegúrese de cambiar el tamaño de la unidad clonada al tamaño deseado y entonces el sistema operativo lo ampliará automáticamente en el primer arranque.
  • Cree un nuevo servidor.
  • Con el servidor creado, verá el botón CloudInit por debajo del estado del servidor.
  • CloudInit

  • Al hacer clic en este botón, el diálogo siguiente aparecerá:.
  • CloudInit_activate

  • Simplemente copie y pegue sus datos de CloudInit aquí, y pulse ‘Activate’.
  • Comienze su servidor y el script se ejecutará al primer arranque

Instalación de clave(s) SSH con CloudInit

Ahora que sabe cómo ttilizar CloudInit en nuestra nube, vamos a poner estos nuevos conocimientos al uso instalando dos claves de SSH.Utilizaremos dos claves ficcionales de SSH. Los dos ficticias claves públicas de SSH que vamos a utilizar son ‘ssh-rsa AAA[…] user1@host‘ and ‘ssh-rsa AAA[…] user2@host‘. (Para obtener más información sobre la generación de claves de SSH, por favor, lea esta página on Github.)

En las imágenes de nube de Ubuntu, el nombre de usuario por defecto es ‘ubuntu’. Por lo tanto, las claves serán instaladas 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]

Por favor tenga en cuenta que los espacios son importantes. Hay dos espacios antes del ‘-‘. Si usted pone solamente uno, no sera leido por el servidor.

Una vez que haya guardado la configuración CloudInit e iniciado el servidor, usted deberá ser capaz de conectar al servidor por SSH usado 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]

Instalación de actualizaciones del sistema con CloudInit

Otra cosa muy útil que se puede lograr fácilmente con CloudInit es ejecutar las actualizaciones del sistema en el primer arranque. Aunque actualizamos nuestras imágenes de disco con alta frecuencia, es todavía una buena idea tomar precauciones adicionales para asegurarse de que sus sistemas están al día.

Para instalar las actualizaciones del sistema en el primer arranque, añade lo siguiente:

[ruby] #cloud-config
apt_update: true
apt_upgrade: true
[/ruby]

También podrá observar que existe una opción similar llamada ‘package_update’, que su alias de distribución neutral es ‘apt_update’ en Ubuntu.

Además, ‘apt_update’ se establece en true de forma predeterminada si se encuentra «packages» (por debajo) activado, lo he añadido para hacerlo más explícito.

Instalar paquetes con CloudInit

Una parte fundamental de sistemas de gestación iniciales poder instalar paquetes al arranque. Afortunadamente, CloudInit hace esto fácilmente también. Todo lo que necesitamos hacer es especificar la lista de paquetes que queremos instalar. Por ejemplo, si queremos instalar ‘python-pip’ ‘, fail2ban’ y ‘vim’, se haría de la siguiente manera:

[ruby] #cloud-config
packages:
– python-pip
– fail2ban
– vim
[/ruby]

De nuevo, por favor observe que los espacios son importantes. Hay dos espacios antes del ‘-‘.

Configurando el hostname usando CloudInit

Cuando aprovisiona un nuevo servidor, es posible que también desee establecer el hostname para ello.

[ruby] #cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]

Ejecutar comandos al primer arranque con CloudInit

Suponiendo que estás haciendo algo más sofisticado con sus servidores, lo más probable es que usted tiene algún comando que necesita ejecutar en el primer arranque.

Aquí es donde viene a juego ‘runcmd’ y ‘bootcmd’. Ambos permiten ejecutar comandos al primer arranque. La diferencia es que ‘bootcmd’ ejecuta anteriormente en el proceso de arranque que ‘runcmd.’

Para utilizar cualquiera de estos comandos, añada lo siguiente a su CloudInit:

[ruby] #cloud-config
runcmd:
– ls -l /root
– [ wget, "https://news.ycombinator.com", -O, /tmp/index.html ] [/ruby]

Como puede ver por encima, hay dos maneras de escribir los comandos. Puede proporcionarlos en forma de lista de comas delimitada:

Utilizando CloudInit con un gestor de configuración

Por último, si usted es un usuario de la nube más sofisticado, es muy probable que tenga en uso algún gestor de configuración. Afortunadamente, CloudInit viene preparado para esto. Es, sin embargo, un tema bastante complejo para cubrir aquí, dados los múltiples variables.

He aquí algunos ejemplos que los apuntaría en la dirección correcta:

Cómo unir estos múltiples elementos

Para aquellos no familiarizados con los archivos de estilo YAML, puede no ser obvio cómo encadenar múltiples elementos de CloudInit. Sin embargo, es sencillo. En la primera línea, necesita ‘#cloud-config‘. Después de esto, sólo tiene que añadir su configuración.

Por ejemplo, la combinación de todos los ejemplos anteriores en una configuración sería por siguiente:

[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

Hemos realmente sólo raspado la superficie de lo que CloudInit puede lograr en este artículo. Hay muchas otras cosas que puede hacer, como crear grupos y usuarios, escribir archivos a disco y llamar URLs cuando ha terminado (para notificar a otros sistemas).

Si usted desea aprender más acerca de CloudInit, recomiendo las siguientes fuentes:

About Patrick Baillie

Patrick is co-founder of CloudSigma, and comes from a career working in Investment Banking Technology, as well as having previously ran his own business.