Este mês anunciamos uma muito emocionante parceria com a Canonical, os criadores do Ubuntu. Acima de tudo, o principal elemento nesta parceria é a introdução do suporte completo ao CloudInit entre a nuvem CloudSigma e o Ubuntu.
Uma introdução ao CloudInit
Se não está familiarizado com o CloudInit, ele é o padrão da indústria para inicialização de servidores na nuvem. Para esclarecer, se estiver a usar um simples DSL é possível realizar tarefas facilmente na primeira inicialização. Também vale a pena salientar que o CloudInit não se limita ao Ubuntu. Hoje em dia, encontrará suporte ao CloudInit na maioria das distribuições Linux modernas (mas as nuvens suportadas variam).
Antes de começarmos com o CloudInit, é importante compreender onde o CloudInit se enquadra no ecossistema de provisionamento. Embora seja possível executar o CloudInit como um sistema de provisionamento autónomo, é muito mais comum utilizá-lo em conjunto com outro sistema de provisionamento, como o Ansible, Chef, Puppet ou Salt. Nesse caso, bastaria utilizar o CloudInit para colocar o seu novo servidor num estado em que o sistema de provisionamento possa assumir o controlo. Pessoalmente, utilizo frequentemente o CloudInit em combinação com o Ansible.
Utilizar o CloudInit na CloudSigma
Utilizar o CloudInit na CloudSigma é muito simples.
Para utilizar o CloudInit num servidor Ubuntu 14.04, siga os seguintes passos:
-
- Clone o disco “Ubuntu 14.04 Cloud Image” a partir do marketplace (atualmente o único disco totalmente suportado com CloudInit). Certifique-se de redimensionar o disco clonado para o tamanho pretendido e este expandirá automaticamente o sistema de ficheiros na primeira inicialização.
- Crie um novo servidor.
- Com o servidor criado, verá um botão CloudInit abaixo do estado do servidor.

-
- Ao clicar neste botão, aparecerá a seguinte caixa de diálogo.

- Basta colar aqui os seus dados do CloudInit e premir ‘Ativar’.
- Pode iniciar o seu servidor e o script será executado na primeira inicialização.
Instalar Chave(s) SSH com o CloudInit
Agora que já sabe como usar o CloudInit na nossa nuvem, vamos colocar em prática este novo conhecimento utilizando-o para instalar duas chaves SSH. As duas chaves SSH públicas fictícias que iremos utilizar são ‘ssh-rsa AAA[…] user1@host‘ e ‘ssh-rsa AAA[…] user2@host‘. (Para saber mais sobre como gerar chaves SSH, consulte esta página no Github.)
Nas Imagens de Nuvem do Ubuntu (Ubuntu Cloud Images), o nome de utilizador predefinido é ‘ubuntu’. Por isso, as chaves serão instaladas nessa conta de utilizador.
A configuração do CloudInit para isto seria a seguinte:
[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]
Tenha em atenção que os espaços importam. Existem dois espaços antes do ‘-‘. Se colocar apenas um, poderá não ser lido pelo servidor.
Depois de guardar a configuração do CloudInit e iniciar o servidor, deverá conseguir aceder ao servidor via SSH utilizando o utilizador ‘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 atualizações do sistema com o CloudInit
Outra coisa muito útil que pode facilmente realizar com o CloudInit é executar atualizações do sistema na primeira inicialização. Embora atualizemos as nossas imagens de disco frequentemente, continua a ser uma boa ideia tomar precauções adicionais para garantir que os seus sistemas estão atualizados.
Para instalar atualizações do sistema na primeira inicialização, adicione o seguinte:
[ruby]
#cloud-config
apt_update: true
apt_upgrade: true
[/ruby]
Você também pode notar que existe uma opção semelhante chamada ‘package_update,’ que é um alias neutro de distribuição para ‘apt_update’ no Ubuntu.
Além disso, o ‘apt_update’ será definido como true por padrão se ‘packages’ (abaixo) estiver definido, mas eu o adicionei acima para torná-lo mais explícito.
Instalar pacotes com o CloudInit
Uma parte fundamental para a inicialização de sistemas é ser capaz de instalar pacotes na inicialização. Felizmente, o CloudInit também facilita isso. Tudo o que precisamos fazer é especificar uma lista dos pacotes que queremos instalar sob ‘packages.’ Por exemplo, se quisermos instalar ‘python-pip,’ ‘fail2ban’ e ‘vim’, seria da seguinte forma:
[ruby]
#cloud-config
packages:
- python-pip
- fail2ban
- vim
[/ruby]
Novamente, observe que os espaços importam. Existem dois espaços antes do ‘-‘.
Configurando o hostname usando o CloudInit
Quando você provisiona um novo servidor, você também pode querer definir o hostname para ele.
[ruby]
#cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]
Executar comandos na primeira inicialização com o CloudInit
Assumindo que você esteja fazendo algo mais sofisticado com seus servidores, é provável que você tenha algum comando que precise executar na primeira inicialização.
É aqui que o ‘runcmd’ e o ‘bootcmd’ entram em jogo. Ambos permitem que você execute comandos na primeira inicialização. A diferença é que o ‘bootcmd’ é executado mais cedo no processo de inicialização do que o ‘runcmd.’
Para usar qualquer um desses comandos, adicione o seguinte ao seu CloudInit:
[ruby]
#cloud-config
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]
Usando o CloudInit com um gerenciador de configuração
Por fim, se você for um usuário de nuvem mais refinado, provavelmente está usando algum gerenciador de configuração. Felizmente, o CloudInit vem preparado para isso. No entanto, é um tópico bastante complexo de cobrir, dadas as muitas variáveis.
Então, aqui estão alguns exemplos que devem ser capazes de apontar você na direção certa:
Como unir múltiplos elementos
Para aqueles que não estão familiarizados com arquivos no estilo YAML, pode não ser óbvio como encadear múltiplos elementos do CloudInit. No entanto, é simples. Na primeira linha, você precisa de ‘#cloud-config‘. Depois disso, você simplesmente adiciona sua configuração.
Por exemplo, combinar todos os exemplos acima em uma única configuração seria da seguinte forma:
[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 adicionais
Nós realmente apenas arranhamos a superfície do que o CloudInit pode fazer neste artigo. Há uma infinidade de outras coisas que você também pode fazer para aprender, como criar usuários e grupos, gravar arquivos no disco e chamar URLs quando terminar (para notificar outros sistemas).
Se você quiser aprender mais sobre o CloudInit, recomendo as seguintes fontes:
- Documentação oficial do CloudInit
- Guia do CloudInit do Ubuntu
- Documentação do CloudInit da RedHat
- Biblioteca de exemplos do CloudInit do Ubuntu
Comentários
Nenhum comentário ainda. Seja o primeiro.