Cloud-init 対応 VM の起動に長い時間がかかる

この記事では、 cloud-init 機能を使用する Azure Virtual Machine (VM) で予期しない起動遅延のトラブルシューティングを行う方法について説明します。 この遅延により、クラウド init 対応の Azure VM デプロイの起動に 2 分 (120 秒) 以上が必要になることがあります。

現象

次の製品など、ローカルエフェメラル ディスクを提供しない VM 製品の完了には、Azure VM の起動に 2 分以上かかります。

/var/log/cloud-init.log や /var/log/waagent.log (init ステージ) などのログ ファイルをチェックすると、次の例のような出力が表示されます。

# 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 

原因

VM の起動中 、cloud-init は Python でDataSourceAzure.py ファイルを実行し、ローカルエフェメラル ディスク (/mnt/azure_resource) が使用可能になるまで待機します。 ローカルエフェメラル ディスクがない Azure VM を使用しているため、cloud-init はプロセスがタイムアウトするまで待機する必要があります。エフェメラル ディスクのタイムアウト間隔は、スタートアップ プロセスが続行されるまでの 120 秒です。

ソリューション

cloud-init のコピーをバージョン 21.2 以降にアップグレードします。

回避策

cloud-init をバージョン 21.2 以降にアップグレードできない場合は、 DataSourceAzure.py ファイルを編集してタイムアウト値を短縮できます。 次の例では、タイムアウト値を 120 秒から 2 秒に変更します。

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

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。