Torna al blog

Un’introduzione al provisioning dei server con CloudInit

Un’introduzione al provisioning dei server con CloudInit

Questo mese abbiamo annunciato una entusiasmante partnership con Canonical, i creatori di Ubuntu. Soprattutto, l'elemento principale di questa partnership è l'introduzione del supporto completo a CloudInit tra il cloud di CloudSigma e Ubuntu.

Un’introduzione a CloudInit

Se non hai familiarità con CloudInit, è lo standard del settore per il bootstrap dei server cloud. Per chiarire,  se stai usando un semplice DSL è possibile eseguire facilmente attività al primo avvio. Vale anche la pena notare che CloudInit non è limitato a Ubuntu. Quest’oggi troverai il supporto per CloudInit nella maggior parte delle distribuzioni Linux moderne (ma i cloud supportati varieranno).

Prima di iniziare con CloudInit, è importante capire come CloudInit si inserisce nell'ecosistema di provisioning. Sebbene sia possibile eseguire CloudInit come sistema di provisioning autonomo, è molto più comune utilizzarlo in combinazione con un altro sistema di provisioning, come Ansible, Chef, Puppet o Salt. In tal caso, utilizzeresti semplicemente CloudInit per portare il tuo nuovo server a uno stato in cui il sistema di provisioning possa subentrare. Personalmente, uso spesso CloudInit in combinazione con Ansible.

Utilizzare CloudInit su CloudSigma

Utilizzare CloudInit su CloudSigma è molto semplice.

Per utilizzare CloudInit su un server Ubuntu 14.04, segui i seguenti passaggi:

    • Clona l'unità “Ubuntu 14.04 Cloud Image” dal marketplace (attualmente l'unica unità completamente supportata con CloudInit). Assicurati di ridimensionare l'unità clonata alla dimensione desiderata e questa espanderà automaticamente il file system al primo avvio.
    • Crea un nuovo server.
    • Una volta creato il server, vedrai un pulsante CloudInit sotto lo stato del server.

CloudInit

    • Quando fai clic su questo pulsante, apparirà la seguente finestra di dialogo.

CloudInit_activate

  • Incolla semplicemente i tuoi dati CloudInit qui e premi ‘Attiva’.
  • Puoi avviare il tuo server e lo script verrà eseguito al primo avvio.

Installa chiave/i SSH con CloudInit

Ora che sai come usare CloudInit sul nostro cloud, mettiamo a frutto questa nuova conoscenza usandola per installare due chiavi SSH. Le due chiavi SSH pubbliche fittizie che useremo sono ‘ssh-rsa AAA[…] user1@host‘ e ‘ssh-rsa AAA[…] user2@host‘. (Per saperne di più sulla generazione delle chiavi SSH, dai un’occhiata a questa pagina su Github.)

Sulle Ubuntu Cloud Images, il nome utente predefinito è ‘ubuntu’. Di conseguenza, le chiavi verranno installate in quell'account utente.

La configurazione CloudInit per questo si presenterebbe come segue:

[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]

Nota bene che gli spazi sono importanti. Ci sono due spazi prima del ‘-‘. Se ne inserisci solo uno, potrebbe non essere letto dal server.

Una volta salvata la configurazione CloudInit e avviato il server, dovresti essere in grado di accedere tramite SSH al server utilizzando l'utente ‘ubuntu’:

[bash light="true"]
$ ssh ubuntu@aaa.bbb.ccc.ddd
Benvenuto su Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)

* Documentazione: https://help.ubuntu.com/

Informazioni di sistema al Sun Oct 19 21:51:54 UTC 2014

Carico di sistema: 0.0 Utenti connessi: 0
Utilizzo di /: 77.4% di 39.34GB Indirizzo IP per eth0: aaa.bbb.ccc.ddd
Utilizzo memoria: 26%
Utilizzo swap: 0%
Processi: 113

Grafica questi dati e gestisci questo sistema su:
https://landscape.canonical.com/

Ottieni supporto cloud con Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud

0 pacchetti possono essere aggiornati.
0 aggiornamenti sono aggiornamenti di sicurezza.
[...]
ubuntu@myserver:~$
[/bash]

Installare gli aggiornamenti di sistema con CloudInit

Un'altra cosa molto utile che puoi facilmente realizzare con CloudInit è eseguire gli aggiornamenti di sistema al primo avvio. Sebbene aggiorniamo frequentemente le nostre immagini del disco, è comunque una buona idea prendere ulteriori precauzioni per garantire che i tuoi sistemi siano aggiornati.

Per installare gli aggiornamenti di sistema al primo avvio, aggiungi quanto segue:

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

Potresti anche notare che esiste un'opzione simile chiamata ‘package_update,’ che è un alias indipendente dalla distribuzione per ‘apt_update’ su Ubuntu.

Inoltre, ‘apt_update’ verrà impostato su true per impostazione predefinita se ‘packages’ (sotto) è impostato, ma l’ho aggiunto sopra per renderlo più esplicito.

Installare pacchetti con CloudInit

Una parte fondamentale per il bootstrap dei sistemi consiste nel poter installare pacchetti all'avvio. Fortunatamente, anche CloudInit rende questo facile. Tutto ciò che dobbiamo fare è specificare un elenco dei pacchetti che vogliamo installare sotto ‘packages.’ Ad esempio, se volessimo installare ‘python-pip,’ ‘fail2ban’ e ‘vim’, si presenterebbe così:

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

Di nuovo, si prega di notare che gli spazi sono importanti. Ci sono due spazi prima del ‘-‘.

Impostare l'hostname utilizzando CloudInit

Quando esegui il provisioning di un nuovo server, potresti anche voler impostare l'hostname per esso.

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

Eseguire comandi al primo avvio con CloudInit

Supponendo che tu stia facendo qualcosa di più sofisticato con i tuoi server, è probabile che tu abbia qualche comando che devi eseguire al primo avvio.

È qui che entrano in gioco ‘runcmd’ e ‘bootcmd’. Entrambi consentono di eseguire comandi al primo avvio. La differenza è che ‘bootcmd’ viene eseguito prima nel processo di avvio rispetto a ‘runcmd’.

Per utilizzare uno di questi comandi, aggiungi quanto segue al tuo CloudInit:

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

Utilizzo di CloudInit con un gestore di configurazione

Infine, se sei un utente cloud più avanzato, molto probabilmente utilizzi un gestore di configurazione. Fortunatamente, CloudInit è già pronto per questo. Si tratta tuttavia di un argomento piuttosto complesso da trattare, date le molte variabili.

Quindi, ecco alcuni esempi che dovrebbero essere in grado di indirizzarti nella giusta direzione:

Come collegare insieme più elementi

Per chi non ha familiarità con i file in stile YAML, potrebbe non essere ovvio come concatenare più elementi CloudInit. È tuttavia semplice. Sulla prima riga, è necessario ‘#cloud-config‘. Dopodiché, ti basterà aggiungere la tua configurazione.

Ad esempio, combinando tutti gli esempi precedenti in un'unica configurazione, l'aspetto sarebbe il seguente:

[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]

Risorse aggiuntive

In questo articolo abbiamo davvero solo scalfito la superficie di ciò che CloudInit può fare. Ci sono un sacco di altre cose che puoi fare per imparare, come creare utenti e gruppi, scrivere file su disco e chiamare URL al termine (per notificare altri sistemi).

Se vuoi saperne di più su CloudInit, ti consiglio le seguenti fonti:

author

Viktor Petersson

Autore · CloudSigma

Preslav Dobrev è un designer creativo presso CloudSigma, con un focus su un'identità aziendale coerente attraverso l'uso di canali di marketing tradizionali e innovativi. È abile nel fondere la visione artistica con il marketing strategico per creare narrazioni di brand di grande impatto.

Commenti

Ancora nessun commento. Scrivi il primo.