Supporto di cloud-init per macchine virtuali in AzureCloud-init support for virtual machines in Azure

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.This article explains the support that exists for cloud-init to configure a virtual machine (VM) or virtual machine scale sets (VMSS) at provisioning time in Azure. Questi script cloud-init vengono eseguiti al primo avvio dopo il provisioning delle risorse da parte di Azure.These cloud-init scripts run on first boot once the resources have been provisioned by Azure.

Panoramica di cloud-initCloud-init overview

Cloud-init è un approccio diffuso per personalizzare una macchina virtuale Linux al primo avvio.Cloud-init is a widely used approach to customize a Linux VM as it boots for the first time. Cloud-init consente di installare pacchetti e scrivere file o configurare utenti e impostazioni di sicurezza.You can use cloud-init to install packages and write files, or to configure users and security. Poiché cloud-init viene chiamato durante il processo di avvio iniziale, non è necessario applicare passaggi aggiuntivi o agenti alla configurazione.Because cloud-init is called during the initial boot process, there are no additional steps or required agents to apply your configuration. Per altre informazioni su come formattare correttamente i file #cloud-config, vedere il sito della documentazione di cloud-init.For more information on how to properly format your #cloud-config files, see the cloud-init documentation site. I file #cloud-config sono file di testo codificati in formato base64.#cloud-config files are text files encoded in base64.

Cloud-init funziona anche fra distribuzioni.Cloud-init also works across distributions. Ad esempio, non si usa apt-get install o yum install per installare un pacchetto.For example, you don't use apt-get install or yum install to install a package. In alternativa, è possibile definire un elenco di pacchetti da installare.Instead you can define a list of packages to install. Cloud-init userà automaticamente lo strumento di gestione del pacchetto nativo per la distribuzione selezionata.Cloud-init automatically uses the native package management tool for the distro you select.

Microsoft sta collaborando attivamente con i partner di distribuzione Linux approvati per offrire immagini abilitate per cloud-init in Azure Marketplace.We are actively working with our endorsed Linux distro partners in order to have cloud-init enabled images available in the Azure marketplace. Queste immagini permetteranno il funzionamento uniforme di distribuzioni e configurazioni di cloud-init con macchine virtuali e set di scalabilità di macchine virtuali.These images will make your cloud-init deployments and configurations work seamlessly with VMs and VM Scale Sets (VMSS). La tabella seguente contiene le attuali immagini abilitate per cloud-init disponibili nella piattaforma Azure:The following table outlines the current cloud-init enabled images availability on the Azure platform:

EditorePublisher OffertaOffer SKUSKU VersionVersion Pronta per cloud-initcloud-init ready
CanonicalCanonical UbuntuServerUbuntuServer 16.04-LTS16.04-LTS più recentilatest yes
CanonicalCanonical UbuntuServerUbuntuServer 14.04.5-LTS14.04.5-LTS più recentilatest yes
CoreOSCoreOS CoreOSCoreOS StabileStable più recentilatest yes
OpenLogicOpenLogic CentOSCentOS 7-CI7-CI più recentilatest previewpreview
RedHatRedHat RHELRHEL 7-RAW-CI7-RAW-CI più recentilatest previewpreview

Qual è la differenza tra cloud-init e l'agente Linux (WALA)?What is the difference between cloud-init and the Linux Agent (WALA)?

WALA è un agente specifico per la piattaforma Azure usato per il provisioning e la configurazione di macchine virtuali e la gestione delle estensioni di Azure.WALA is an Azure platform-specific agent used to provision and configure VMs, and handle Azure extensions. Microsoft sta 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.We are enhancing the task of configuring VMs to use cloud-init instead of the Linux Agent in order to allow existing cloud-init customers to use their current cloud-init scripts. Se sono stati effettuati investimenti in script cloud-init per la configurazione di sistemi Linux, non sono necessarie altre impostazioni per abilitarli.If you have existing investments in cloud-init scripts for configuring Linux systems, there are no additional settings required to enable them.

Se non si include l'interfaccia CLI di Azure --custom-data switch provisioning ora, WALA accetta la macchina virtuale minima provisioning i parametri necessari per eseguire il provisioning della macchina virtuale e completare la distribuzione con i valori predefiniti.If you do not include the Azure CLI --custom-data switch at provisioning time, WALA takes the minimal VM provisioning parameters required to provision the VM and complete the deployment with the defaults. Se si fa riferimento il cloud-init --custom-data passare, tutti i valori contenuti nei dati personalizzati (singole impostazioni o uno script completo) sostituisce le impostazioni predefinite WALA.If you reference the cloud-init --custom-data switch, whatever is contained in your custom data (individual settings or full script) overrides the WALA defaults.

Le configurazioni di WALA delle macchine virtuali sono ora limitate a funzionare nella macchina virtuale massimo tempo di provisioning.WALA configurations of VMs are time-constrained to work within the maximum VM provisioning time. Le configurazioni cloud-init applicate alle macchine virtuali non hanno vincoli di tempo e non causano la mancata riuscita della distribuzione a causa del timeout.Cloud-init configurations applied to VMs do not have time constraints and will not cause a deployment to fail by timing out.

Distribuzione di una macchina virtuale abilitata per cloud-initDeploying a cloud-init enabled Virtual Machine

Distribuire una macchina virtuale abilitata per cloud-init è facile come fare riferimento a una distribuzione abilitata per cloud-init.Deploying a cloud-init enabled virtual machine is as simple as referencing a cloud-init enabled distribution during deployment. I gestori di distribuzioni Linux devono scegliere se abilitare e integrare cloud-init nelle proprie immagini pubblicate in Azure.Linux distribution maintainers have to choose to enable and integrate cloud-init into their base Azure published images. Dopo aver verificato l'immagine da distribuire è cloud-init abilitato, è possibile utilizzare l'interfaccia CLI di Azure per distribuire l'immagine.Once you have confirmed the image you want to deploy is cloud-init enabled, you can use the Azure CLI to deploy the image.

Il primo passaggio della distribuzione di questa immagine è creare un gruppo di risorse con il comando az group create.The first step in deploying this image is to create a resource group with the az group create command. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.An Azure resource group is a logical container into which Azure resources are deployed and managed.

L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella località stati uniti orientali.The following example creates a resource group named myResourceGroup in the eastus location.

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.The next step is to create a file in your current shell, named cloud-init.txt and paste the following configuration. Per questo esempio, creare il file in Cloud Shell anziché nel computer locale.For this example, create the file in the Cloud Shell not on your local machine. È possibile usare qualsiasi editor.You can use any editor you wish. Immettere sensible-editor cloud-init.txt per creare il file e visualizzare un elenco degli editor disponibili.Enter sensible-editor cloud-init.txt to create the file and see a list of available editors. Scegliere #1 per usare l'editor nano.Choose #1 to use the nano editor. Assicurarsi che l'intero file cloud-init venga copiato correttamente, in particolare la prima riga:Make sure that the whole cloud-init file is copied correctly, especially the first line:

#cloud-config
package_upgrade: true
packages:
  -httpd

Premere ctrl-X per uscire dal file, digitare y per salvare il file e premere enter per confermare il nome del file alla chiusura.Press ctrl-X to exit the file, type y to save the file and press enter to confirm the file name on exit.

Il passaggio finale consiste nel creare una macchina virtuale con il comando az vm create.The final step is to create a VM with the az vm create command.

L'esempio seguente crea una macchina virtuale denominata centos74 e le chiavi SSH, se non esistono già in un percorso predefinito.The following example creates a VM named centos74 and creates SSH keys if they do not already exist in a default key location. Per usare un set specifico di chiavi, utilizzare l'opzione --ssh-key-value.To use a specific set of keys, use the --ssh-key-value option. Usare il parametro --custom-data per specificare il file di configurazione di cloud-init.Use the --custom-data parameter to pass in your cloud-init config file. Se il file è stato salvato all'esterno della directory di lavoro corrente, specificare il percorso completo della configurazione cloud-init.txt .Provide the full path to the cloud-init.txt config if you saved the file outside of your present working directory. L'esempio seguente crea una macchina virtuale denominata centos74:The following example creates a VM named centos74:

az vm create \
  --resource-group myResourceGroup \
  --name centos74 \
  --image OpenLogic:CentOS:7-CI: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.When the VM has been created, the Azure CLI shows information specific to your deployment. Prendere nota di publicIpAddress.Take note of the publicIpAddress. Questo indirizzo viene usato per accedere alla VM.This address is used to access the VM. Sono necessari alcuni minuti per creare la macchina virtuale, installare il pacchetto e avviare l'app.It takes some time for the VM to be created, the packages to install, and the app to start. Sono presenti attività in background la cui esecuzione continua dopo che l'interfaccia della riga di comando di Azure è tornata al prompt.There are background tasks that continue to run after the Azure CLI returns you to the 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.You can SSH into the VM and use the steps outlined in the Troubleshooting section to view the cloud-init logs.

Risoluzione dei problemi relativi a cloud-initTroubleshooting cloud-init

Dopo che è stato eseguito il provisioning della macchina virtuale, cloud init verranno eseguite tramite tutti i moduli e script definito in --custom-data per configurare la macchina virtuale.Once the VM has been provisioned, cloud-init will run through all the modules and script defined in --custom-data in order to configure the VM. 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.If you need to troubleshoot any errors or omissions from the configuration, you need to search for the module name (disk_setup or runcmd for example) in the cloud-init log - located in /var/log/cloud-init.log.

Nota

Non tutti gli errori dei moduli generano un errore di configurazione di cloud-init completo e irreversibile.Not every module failure results in a fatal cloud-init overall configuration failure. 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.For example, using the runcmd module, if the script fails, cloud-init will still report provisioning succeeded because the runcmd module executed.

Per altre informazioni sulla registrazione di cloud-init, fare riferimento alla documentazione di cloud-initFor more details of cloud-init logging, refer to the cloud-init documentation

Passaggi successiviNext steps

Per esempi cloud-init di modifiche di configurazione, vedere i documenti seguenti:For cloud-init examples of configuration changes, see the following documents: