Condividi tramite


Supporto di cloud-init per le macchine virtuali in Azure

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

Questo articolo illustra il supporto disponibile per cloud-init per configurare una macchina virtuale (VM) o 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 macchine virtuali è il processo in cui Azure passa i valori dei parametri di creazione della macchina virtuale, ad esempio nome host, nome utente e password e renderli disponibili per la macchina virtuale durante l'avvio. Un 'agente di provisioning' utilizzerà tali valori, configurerà la macchina virtuale e restituirà un report al termine.

Azure supporta due agenti di provisioning cloud-init e l'agente Linux di Azure (WALA).

Panoramica di cloud-init

cloud-init è un approccio ampiamente usato per personalizzare una macchina virtuale Linux durante l'avvio per la prima volta. 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 #cloud-config file o altri input, vedere il sito della documentazione di cloud-init. #cloud-config i file sono file di testo codificati in base64.

cloud-init funziona anche tra distribuzioni. Ad esempio, non si usa apt-get install o yum install per installare un pacchetto. È invece possibile definire un elenco di pacchetti da installare. cloud-init usa automaticamente lo strumento di gestione dei pacchetti nativo per la distribuzione selezionata.

Microsoft collabora attivamente con i partner di distribuzione Linux approvati per avere immagini abilitate per cloud-init disponibili in Azure Marketplace. Queste immagini renderanno le distribuzioni e le configurazioni cloud-init perfettamente funzionanti con macchine virtuali e set di scalabilità di macchine virtuali. Inizialmente collaboriamo con i partner di distribuzione Linux approvati e upstream per garantire le funzioni cloud-init con il sistema operativo in Azure, quindi i pacchetti vengono aggiornati e resi disponibili pubblicamente nei repository dei pacchetti di distribuzione.

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

  • I documenti "cloud-init package support on Azure" (Supporto dei pacchetti cloud-init in Azure) sono supportati o in anteprima, in modo da poter usare questi pacchetti con il sistema operativo in un'immagine personalizzata.
  • Documenti "image cloud-init ready" se l'immagine è già configurata per l'uso di cloud-init.

Canonico

Server di pubblicazione/versione Offer SKU Versione image cloud-init ready Supporto del pacchetto cloud-init in Azure
Canonico 24.04 UbuntuServer 24.04-LTS più recente yes yes
Canonico 22.04 UbuntuServer 22.04-LTS più recente yes yes
Canonico 20.04 UbuntuServer 20.04-LTS più recente yes yes

Red Hat Enterprise Linux (RHEL)

Server di pubblicazione/versione Offer SKU Versione image cloud-init ready Supporto del pacchetto cloud-init in Azure
RedHat 7 Red Hat Enterprise Linux (RHEL) 7.7, 7.8, 7_9 più recente yes yes
RedHat 8 Red Hat Enterprise Linux (RHEL) 8.1, 8.2, 8_3, 8_4 più recente yes yes
RedHat 9 Red Hat Enterprise Linux (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 sottoposte a provisioning usando cloud-init. Cloud-init non è supportato in RHEL 6.

Oracle

Server di pubblicazione/versione Offer SKU Versione image cloud-init ready Supporto del pacchetto 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 sottoposte a provisioning usando cloud-init.

SUSE SLES

Server di pubblicazione/versione Offer SKU Versione image cloud-init ready Supporto del pacchetto cloud-init in Azure
SUSE 15 SLES (SUSE Linux Enterprise Server) tutti i provider di servizi di configurazione più recente yes yes
SUSE 12 SLES (SUSE Linux Enterprise Server) sp5 più recente yes yes
  • SUSE Linux Enterprise Server 12 è EOL dal 31 ottobre 2024, SP5 è stato l'ultimo SP

Debian

Server di pubblicazione/versione Offer SKU Versione image cloud-init ready Supporto del pacchetto 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 di immagini abilitate per cloud-init.

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

WALA è un agente specifico della piattaforma Azure usato per effettuare il provisioning e configurare le macchine virtuali e gestire le estensioni di Azure.

Stiamo migliorando l'attività di configurazione delle macchine virtuali per l'uso di cloud-init anziché dell'agente Linux per consentire ai clienti esistenti di cloud-init di usare gli script cloud-init correnti o i nuovi clienti per sfruttare le funzionalità avanzate di configurazione di cloud-init. Se si hanno investimenti esistenti in script cloud-init per la configurazione di sistemi Linux, non sono necessarie impostazioni aggiuntive per abilitare il processo cloud-init.

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

Quando si crea una macchina virtuale, se non si include il commutatore dell'interfaccia della riga di comando di Azure --custom-data in fase di provisioning, cloud-init o WALA accetta i parametri minimi di provisioning delle macchine virtuali necessari per effettuare il provisioning della macchina virtuale e completare la distribuzione con le impostazioni predefinite. Se si fa riferimento alla configurazione di cloud-init con il --custom-data commutatore, qualsiasi elemento contenuto nei dati personalizzati sarà disponibile per cloud-init all'avvio della macchina virtuale.

Le configurazioni cloud-init applicate alle macchine virtuali non hanno vincoli di tempo e non causeranno un errore di distribuzione per timeout. Questo non vale per WALA, se si modifica l'impostazione predefinita walA per elaborare i dati personalizzati, non può superare il limite totale di tempo di provisioning delle macchine virtuali di 40 minuti, in caso affermativo, la creazione della macchina virtuale avrà esito negativo.

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 i 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

La distribuzione di una macchina virtuale abilitata per cloud-init è semplice come fare riferimento a una distribuzione abilitata per cloud-init durante la distribuzione. I gestori di distribuzione Linux devono scegliere di abilitare e integrare cloud-init nelle immagini pubblicate di Azure di base. Dopo aver verificato che l'immagine da distribuire sia abilitata per cloud-init, è possibile usare l'interfaccia della riga di comando di Azure per distribuire l'immagine.

Il primo passaggio per distribuire questa immagine consiste nel 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.

Nell'esempio seguente viene creato un gruppo di risorse denominato myResourceGroup nella posizione eastus .

az group create --name myResourceGroup --location eastus

Il passaggio successivo consiste nel creare un file nella shell corrente, denominato cloud-init.txt e incollare la configurazione seguente. Per questo esempio, creare il file in Cloud Shell non nel computer locale. È possibile usare qualsiasi editor di propria scelta. Immettere cloud-init.txt editor sensibile 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 Red Hat Enterprise Linux (RHEL)
# cloud-config
package_upgrade: true
packages:
- apache2
# cloud-config
package_upgrade: true
packages:
- httpd
# cloud-config
package_upgrade: true
packages:
- httpd

Annotazioni

cloud-init ha più tipi di input, cloud-init userà la prima riga di customData/userData per indicare come deve 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 macchina virtuale denominata ubuntu2204 e crea chiavi SSH se non esistono già in un percorso di chiave predefinito. Per usare un set specifico di chiavi, usare l'opzione --ssh-key-value . Usare il --custom-data parametro per passare il file di configurazione cloud-init. Specificare il percorso completo della configurazionecloud-init.txt se è stato salvato il file all'esterno della directory di lavoro corrente.

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

Quando viene creata la macchina virtuale, l'interfaccia della riga di comando di Azure mostra informazioni specifiche per la distribuzione. Prendere nota di publicIpAddress. Questo indirizzo viene usato per accedere alla macchina virtuale. L'avvio della macchina virtuale richiede tempo, i pacchetti da installare e l'app. Sono presenti attività in background che continuano a essere eseguite dopo che l'interfaccia della riga di comando di Azure restituisce il prompt. È possibile connettersi tramite SSH alla macchina virtuale e usare i passaggi descritti nella sezione Risoluzione dei problemi per visualizzare i log 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

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

Annotazioni

Non tutti gli errori del modulo generano un errore di configurazione complessivo di cloud-init irreversibile. Ad esempio, se lo runcmd script ha esito negativo, cloud-init segnala 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 migliorare i prodotti e i servizi. 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). Per altre informazioni, leggere l'informativa sulla privacy . Alcuni esempi di telemetria raccolti sono (questo non è un elenco completo): 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 disabilita 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 relativi a cloud-init.

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