Voltar ao blog

Uma introdução ao provisionamento de servidores com CloudInit

Uma introdução ao provisionamento de servidores com CloudInit

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.

CloudInit

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

CloudInit_activate

  • 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:

author

Viktor Petersson

Autor · CloudSigma

Preslav Dobrev é um designer criativo na CloudSigma, focado na construção de uma identidade empresarial consistente por meio de canais de marketing tradicionais e inovadores. Ele é hábil em combinar a visão artística com o marketing estratégico para criar narrativas de marca impactantes.

Comentários

Nenhum comentário ainda. Seja o primeiro.