Condividi tramite


Supporto di cloud-init per le macchine virtuali in Azure

Si applica a: ✔️ macchine virtuali Linux ✔️ set di scalabilità flessibili

Questo articolo descrive il supporto disponibile per cloud-init per configurare una macchina virtuale (VM) o i set di scalabilità di macchine virtuali in fase di provisioning in Azure. Queste configurazioni cloud-init vengono eseguite al primo avvio dopo il provisioning delle risorse da parte di Azure.

Il provisioning delle VM è il processo in cui Azure passerà i valori del parametro VM Create, ad esempio nome host, nome utente, password e così via e li renderà disponibili alla VM all'avvio. Un 'agente di provisioning' utilizzerà tali valori, configurerà la macchina virtuale e restituirà un report al termine dell'operazione.

Azure supporta due agenti di provisioning, cloud-init e Azure Linux Agent (WALA).

Panoramica di cloud-init

Cloud-init è un approccio ampiamente diffuso per personalizzare una macchina virtuale Linux al primo avvio. Cloud-init consente di installare pacchetti e scrivere file o configurare utenti e impostazioni di sicurezza. Poiché cloud-init viene chiamato durante il processo di avvio iniziale, non è necessario applicare passaggi aggiuntivi o agenti alla configurazione. Per altre informazioni su come formattare correttamente i file #cloud-config o altri input, vedere il sito della documentazione di cloud-init. I file #cloud-config sono file di testo codificati in formato base64.

Cloud-init funziona anche tra distribuzioni. Ad esempio, non si usa apt-get install o yum install per installare un pacchetto. In alternativa, è possibile definire un elenco di pacchetti da installare. Cloud-init userà automaticamente lo strumento nativo di gestione pacchetti per la distribuzione selezionata.

Microsoft sta collaborando attivamente con i partner di distribuzione Linux approvati per offrire immagini abilitate per cloud-init in Azure Marketplace. Queste immagini permettono il funzionamento uniforme di distribuzioni e configurazioni di cloud-init con macchine virtuali e set di scalabilità di macchine virtuali. Inizialmente collaboriamo con i partner di distribuzioni Linux approvati e a monte per garantire che cloud-init funzioni con il sistema operativo in Azure, quindi i pacchetti vengono aggiornati e resi disponibili pubblicamente nei repository dei pacchetti di distribuzioni.

Sono previste due fasi per rendere disponibile cloud-init per le distribuzioni Linux approvate in Azure, il supporto dei pacchetti e il supporto delle immagini:

  • Il "Supporto dei pacchetti cloud-init in' Azure" fa riferimento ai pacchetti cloud-init supportati in futuro o in anteprima, che possono quindi essere usati nel sistema operativo in un'immagine personalizzata.
  • Per 'immagine pronta per cloud-init' si intende se l'immagine è già configurata per l'uso di cloud-init.

Canonical

Editore/versione Offerta SKU Versione Immagine pronta per cloud-init Supporto dei pacchetti cloud-init in Azure
Canonical 24.04 UbuntuServer 22.04-LTS più recente yes yes
Canonical 22.04 UbuntuServer 22.04-LTS più recente yes yes
Canonical 20.04 UbuntuServer 20.04-LTS più recente yes yes

RHEL

Editore/versione Offerta SKU Versione Immagine pronta per cloud-init Supporto dei pacchetti cloud-init in Azure
RedHat 7 RHEL 7.7, 7.8, 7_9 più recente yes yes
RedHat 8 RHEL 8.1, 8.2, 8_3, 8_4 più recente yes yes
RedHat 9 RHEL 9_0, 9_1 più recente yes yes
  • Tutti gli altri SKU RedHat a partire da RHEL 7 (versione 7.7) e RHEL 8 (versione 8.1), incluse sia le immagini Gen1 che Gen2, vengono sottoposti a provisioning usando cloud-init. Cloud-init non è supportato in RHEL 6.

Oracle

Editore/versione Offerta SKU Versione Immagine pronta per cloud-init Supporto dei pacchetti cloud-init in Azure
Oracle 7 Oracle Linux 77, 78, ol79 più recente yes yes
Oracle 8 Oracle Linux 81, ol82, ol83-lvm, ol84-lvm più recente yes yes
  • Tutti gli altri SKU Oracle a partire da Oracle 7 (versione 7.7) e Oracle 8 (versione 8.1), incluse sia le immagini Gen1 che Gen2, vengono sottoposti a provisioning usando cloud-init.

SUSE SLES

Editore/versione Offerta SKU Versione Immagine pronta per cloud-init Supporto dei pacchetti cloud-init in Azure
SUSE 15 SLES (SUSE Linux Enterprise Server) sp1, sp2, sp3 più recente yes yes
SUSE 12 SLES (SUSE Linux Enterprise Server) sp5 più recente yes yes

Debian

Editore/versione Offerta SKU Versione Immagine pronta per cloud-init Supporto dei pacchetti cloud-init in Azure
debian-10 Debian 10-cloudinit-gen2 Debian:debian-10:10-cloudinit-gen2:0.0.1015 yes yes
debian-10 Debian 10-cloudinit-gen2 Debian:debian-10:10-cloudinit-gen2:0.0.991 yes yes
debian-10 Debian 10-cloudinit-gen2 Debian:debian-10:10-cloudinit-gen2:0.0.999 yes yes

Attualmente, Azure Stack supporta il provisioning delle immagini abilitate per cloud-init.

Qual è la differenza tra cloud-init e l'agente Linux (WALA)?

WALA è un agente specifico per la piattaforma Azure usato per il provisioning e la configurazione di macchine virtuali e per la gestione delle estensioni di Azure.

Stiamo migliorando l'attività di configurazione delle macchine virtuali per l'uso di cloud-init al posto dell'agente Linux per consentire agli attuali clienti di cloud-init di usare gli script cloud-init correnti o ai nuovi clienti di sfruttare le funzionalità avanzate di configurazione di cloud-init. Se sono stati effettuati investimenti in script cloud-init per la configurazione di sistemi Linux, non sono necessarie altre impostazioni per elaborarli tramite cloud-init.

cloud-init non è in grado di elaborare le estensioni di Azure, quindi WALA è ancora necessario nell'immagine per elaborare le estensioni, ma è prima necessario disabilitare il codice di provisioning. Per le distribuzioni Linux approvate che vengono convertite in provisioning da cloud-init, dispongono di WALA installato correttamente e sono configurate in modo appropriato.

Quando si crea una VM, se non si include l'opzione --custom-data dell'interfaccia della riga di comando di Azure in fase di provisioning, cloud-init o WALA accetta i parametri di provisioning minimi necessari per il provisioning e il completamento della distribuzione delle VM con le impostazioni predefinite. Se si fa riferimento alla configurazione di cloud-init con l'opzione --custom-data, tutto il contenuto dei dati personalizzati sarà disponibile per cloud-init all'avvio della VM.

Le configurazioni di cloud-init applicate alle VM non hanno vincoli di tempo e non causano la mancata riuscita della distribuzione dovuta al timeout. Ciò non vale per WALA. Se si cambiano le impostazioni predefinite di WALA per elaborare dati personalizzati, non è possibile superare il limite consentito di 40 minuti del tempo di provisioning totale della VM, altrimenti il comando VM Create genererà un errore.

Provisioning di macchine virtuali cloud-init senza un driver UDF

A partire da cloud-init 21.2, è possibile usare cloud-init per effettuare il provisioning di una macchina virtuale in Azure senza un driver UDF. Se un driver UDF non è disponibile nell'immagine, cloud-init usa i metadati disponibili nel servizio metadati dell'istanza di Azure per effettuare il provisioning della macchina virtuale. Questa opzione funziona solo per la chiave SSH e dati utente. Per passare una password o dati personalizzati a una macchina virtuale durante il provisioning, è necessario usare un driver UDF.

Distribuzione di una macchina virtuale abilitata per cloud-init

Distribuire una macchina virtuale abilitata per cloud-init è facile come fare riferimento a una distribuzione abilitata per cloud-init. I gestori di distribuzioni Linux devono scegliere se abilitare e integrare cloud-init nelle proprie immagini pubblicate in Azure. Dopo aver verificato che l'immagine che si vuole distribuire sia abilitata per cloud-init, è possibile usare l'interfaccia della riga di comando di Azure per distribuirla.

Il primo passaggio della distribuzione di questa immagine è creare un gruppo di risorse con il comando az group create. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.

L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella località stati uniti orientali.

az group create --name myResourceGroup --location eastus

Il passaggio successivo consiste nel creare un file denominato cloud-init.txt nella shell corrente e incollare la configurazione seguente. Per questo esempio, creare il file in Cloud Shell anziché nel computer locale. È possibile usare qualsiasi editor. Immettere sensible-editor cloud-init.txt per creare il file e visualizzare un elenco degli editor disponibili. Usare l'editor preferito. Alcune scelte tipiche sono nano, vim o ed. Assicurarsi che l'intero file cloud-init venga copiato correttamente, in particolare la prima riga:

SLES Ubuntu RHEL
# cloud-config
package_upgrade: true
packages:
- apache2
# cloud-config
package_upgrade: true
packages:
- httpd
# cloud-config
package_upgrade: true
packages:
- httpd

Nota

cloud-init ha più tipi di input, cloud-init userà la prima riga di customData/userData per indicare come elaborare l'input, ad esempio #cloud-config indica che il contenuto deve essere elaborato come configurazione cloud-init.

Uscire dal file e salvare il file in base all'editor. Verificare il nome del file all'uscita.

Il passaggio finale consiste nel creare una macchina virtuale con il comando az vm create.

L'esempio seguente crea una VM denominata ubuntu2204 e crea le chiavi SSH se non esistono già in una posizione predefinita. Per usare un set specifico di chiavi, utilizzare l'opzione --ssh-key-value. Usare il parametro --custom-data per specificare il file di configurazione di cloud-init. Se il file è stato salvato all'esterno della directory di lavoro corrente, specificare il percorso completo della configurazione cloud-init.txt .

az vm create \
  --resource-group myResourceGroup \
  --name ubuntu2204 \
  --image Canonical:UbuntuServer:22_04-lts:latest \
  --custom-data cloud-init.txt \
  --generate-ssh-keys 

Dopo la creazione della macchina virtuale, l'interfaccia della riga di comando di Azure mostra informazioni specifiche della distribuzione. Prendere nota di publicIpAddress. Questo indirizzo viene usato per accedere alla VM. Sono necessari alcuni minuti per creare la macchina virtuale, installare il pacchetto e avviare l'app. Sono presenti attività in background la cui esecuzione continua dopo che l'interfaccia della riga di comando di Azure è tornata al prompt. È possibile eseguire SSH nella macchina virtuale e seguire i passaggi descritti nella sezione della risoluzione dei problemi per visualizzare i log di cloud-init.

È anche possibile distribuire una macchina virtuale abilitata per cloud-init passando i parametri nel modello di Resource Manager.

Risoluzione dei problemi relativi a cloud-init

Al termine del provisioning della macchina virtuale, cloud-init verrà eseguito in tutti i moduli e gli script definiti in --custom-data per configurare la macchina virtuale. Se è necessario correggere eventuali errori o omissioni della configurazione, cercare il nome del modulo (ad esempio, disk_setup o runcmd) nel log di cloud-init che si trova in /var/log/cloud-init.log.

Nota

Non tutti gli errori dei moduli generano un errore di configurazione di cloud-init completo e irreversibile. Ad esempio, se usando il modulo runcmd lo script non riesce, cloud-init segnalerà comunque che il provisioning è riuscito perché il modulo runcmd è stato eseguito.

Per altre informazioni sulla registrazione di cloud-init, vedere la documentazione di cloud-init

Telemetria

cloud-init raccoglie i dati di utilizzo e li invia a Microsoft per contribuire a migliorare i prodotti e i servizi offerti. I dati di telemetria vengono raccolti solo durante il processo di provisioning (primo avvio della macchina virtuale). I dati raccolti consentono di analizzare gli errori di provisioning e monitorare le prestazioni e l'affidabilità. I dati raccolti non includono identificatori (identificatori personali). Leggere l'informativa sulla privacy per altre informazioni. Alcuni esempi di telemetria raccolti sono (a titolo di esempio): informazioni relative al sistema operativo (versione cloud-init, versione della distribuzione, versione del kernel), metriche delle prestazioni delle azioni di provisioning delle macchine virtuali essenziali (tempo per ottenere il lease DHCP, tempo necessario per recuperare i metadati necessari per configurare la macchina virtuale e così via), log cloud-init e log dmesg.

La raccolta di dati di telemetria è attualmente abilitata per la maggior parte delle immagini del marketplace che usano cloud-init. È abilitata specificando il reporter di telemetria KVP per cloud-init. Nella maggior parte delle immagini di Azure Marketplace questa configurazione è disponibile nel file /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg. La rimozione di questo file durante la preparazione dell'immagine disabiliterà la raccolta di dati di telemetria per qualsiasi macchina virtuale creata da questa immagine.

Contenuto di esempio di 10-azure-kvp.cfg

reporting:
  logging:
    type: log
  telemetry:
    type: hyperv

Passaggi successivi

Risolvere i problemi con cloud-init.

Per esempi cloud-init di modifiche di configurazione, vedere i documenti seguenti: