L'avvio della macchina virtuale abilitata per Cloud init richiede molto tempo

Questo articolo descrive come risolvere un ritardo di avvio imprevisto in una macchina virtuale di Azure che usa la funzionalità cloud-init. Questo ritardo può causare l'avvio di una distribuzione di macchine virtuali di Azure abilitata per cloud init che richiede più di due minuti (120 secondi).

Sintomi

L'avvio di una macchina virtuale di Azure richiede più di due minuti per completare i prodotti di macchine virtuali che non forniscono dischi temporanei locali, ad esempio i prodotti seguenti:

Se si controllano file di log come /var/log/cloud-init.log e /var/log/waagent.log (fase init), verrà visualizzato un output simile all'esempio seguente:

# grep "did not appear after 120 seconds"  *

cloud-init.log:2021-12-01 19:35:50,455 - DataSourceAzure.py[WARNING]: ephemeral device '/dev/disk/cloud/azure_resource' did not appear after 120 seconds.
cloud-init.log:2021-12-01 21:19:58,531 - DataSourceAzure.py[WARNING]: ephemeral device '/dev/disk/cloud/azure_resource' did not appear after 120 seconds.
cloud-init-output.log:2021-12-01 19:35:50,455 - DataSourceAzure.py[WARNING]: ephemeral device '/dev/disk/cloud/azure_resource' did not appear after 120 seconds.
cloud-init-output.log:2021-12-01 21:19:58,531 - DataSourceAzure.py[WARNING]: ephemeral device '/dev/disk/cloud/azure_resource' did not appear after 120 seconds.
messages:Dec  1 19:35:50 redhat84noephstor01 cloud-init[1065]: 2021-12-01 19:35:50,455 - DataSourceAzure.py[WARNING]: ephemeral device '/dev/disk/cloud/azure_resource' did not appear after 120 seconds.
messages:Dec  1 21:19:58 redhat84noephstor01 cloud-init[931]: 2021-12-01 21:19:58,531 - DataSourceAzure.py[WARNING]: ephemeral device '/dev/disk/cloud/azure_resource' did not appear after 120 seconds.
# /var/log/cloud-init.log

2021-12-01 19:35:50,481 - util.py[WARNING]: Failed partitioning operation
Device /dev/disk/cloud/azure_resource did not exist and was not created with a udevadm settle.
2021-12-01 19:35:50,481 - util.py[DEBUG]: Failed partitioning operation
Device /dev/disk/cloud/azure_resource did not exist and was not created with a udevadm settle.
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", line 141, in handle
    func=mkpart, args=(disk, definition))
  File "/usr/lib/python3.6/site-packages/cloudinit/util.py", line 2292, in log_time
    ret = func(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", line 780, in mkpart
    assert_and_settle_device(device)
  File "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", line 

Causa

Durante l'avvio della macchina virtuale, cloud-init esegue il file DataSourceAzure.py in Python e quindi attende che i dischi temporanei locali (/mnt/azure_resource) diventino disponibili. Poiché si usa una macchina virtuale di Azure che non dispone di dischi temporanei locali, cloud-init deve attendere il timeout del processo. L'intervallo di timeout per i dischi temporanei è di 120 secondi prima che il processo di avvio continui.

Soluzione

Aggiornare la copia di cloud-init alla versione 21.2 o successiva.

Soluzione alternativa

Se non è possibile aggiornare cloud-init alla versione 21.2 o successiva, è possibile modificare il file DataSourceAzure.py per ridurre il valore di timeout. L'esempio seguente modifica il valore di timeout da 120 secondi a due secondi:

sudo sed -i 's/maxwait=120/maxwait=2/g' $(locate DataSourceAzure.py)

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.