cloud-init を深く知る

適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット

cloud-init の詳細を学んだり、深いレベルでトラブルシューティングするには、しくみを理解する必要があります。 このドキュメントでは、重要な部分を示し、Azure 固有の内容について説明します。

cloud-init は、一般化されたイメージに 含まれており、VM がそのイメージから作成されている場合、構成が処理され、初期ブート時に 5 つのステージを経て実行されます。 これらのステージは、cloud-init が構成を適用するポイントを示します。

cloud-Init 構成を理解する

プラットフォーム上で実行するように VM を構成すると、cloud-init を使用して複数の構成が適用されます。 操作する主な構成は User data (customData) であり、複数の形式をサポートしています。 詳細については、ユーザー データ形式と cloud-init 21.2 のドキュメントを参照してください。 また、スクリプト (/var/lib/cloud/scripts) を追加して、他の構成のために実行することもできます。

事前構成済みの Azure Marketplace イメージ

いくつかの構成は、cloud-init に付属する Azure Marketplace イメージに既に組み込まれています。

  • クラウド データ ソース - cloud-init には、クラウド プラットフォームと対話できるコードが含まれます。これらのコードは "データソース" と呼ばれます。 Azure で VM が cloud-init イメージから作成されると、cloud-init は Azure データソースを読み込み、それが Azure メタデータ エンドポイントと対話して VM 固有の構成を取得します。

  • ランタイム構成 (/run/cloud-init)。

  • イメージ構成 (/etc/cloud)、/etc/cloud/cloud.cfg/etc/cloud/cloud.cfg.d/*.cfg など。 Azure でこの構成が使用される場所の例。通常、cloud-init を含む Linux OS イメージには Azure データソース ディレクティブがあります。この構成により、どのデータソースを使用するべきかが cloud-init に示され、cloud-init の時間が節約されます。

    sudo cat /etc/cloud/cloud.cfg.d/90_dpkg.cfg
    
    # to update this file, run dpkg-reconfigure cloud-init
    datasource_list: [ Azure ]
    

cloud-init ブート ステージ (処理構成)

cloud-init を使用して VM をプロビジョニングする場合、5 つの構成ブート ステージがあります。 これらのステージの出力はログに表示されます。

  1. ジェネレーター ステージ:cloud-init systemd ジェネレーターが開始され、cloud-init をブート目標に含めるべきかどうかを判別します。含める必要がある場合は cloud-init を有効にします。

  2. cloud-init ローカル ステージ: ここで、cloud-init はローカルの "Azure" データソースを検索します。これによって、cloud-init と Azure のインターフェイスが有効になり、フォールバックを含むネットワーク構成が適用されます。

  3. cloud-init 初期化ステージ (ネットワーク):ネットワークをオンラインにして、NIC とルート テーブル情報が生成される必要があります。 このステージでは、/etc/cloud/cloud.cfgcloud_init_modules に一覧表示されているモジュールが実行されます。 Azure の VM がマウントされ、エフェメラル ディスクがフォーマットされ、ホスト名が設定されます。その他のタスクも行われます。

    cloud_init_modules のいくつかを次に示します。

    - migrator
    - seed_random
    - bootcmd
    - write-files
    - growpart
    - resizefs
    - disk_setup
    - mounts
    - set_hostname
    - update_hostname
    - ssh
    

    このステージの後で、cloud-init は、VM が正常にプロビジョニングされたことを伝える信号を Azure プラットフォームに送信します。 一部のモジュールで障害が発生している可能性がありますが、すべてのモジュール エラーによって自動的にプロビジョニングが失敗するわけではありません。

  4. cloud-init 構成ステージ: このステージでは、/etc/cloud/cloud.cfg に定義され一覧表示されている cloud_config_modules のモジュールが実行されます。

  5. cloud-init 最終ステージ: この最終ステージでは、/etc/cloud/cloud.cfg に一覧表示されている、cloud_final_modules のモジュールが実行されます。 ここでは、ブート プロセスの後半で実行される必要があるモジュールが実行されます。パッケージのインストールやスクリプトの実行などです。

    • このステージでは、スクリプトを /var/lib/cloud/scripts の下のディレクトリに配置して実行できます。
      • per-boot - このディレクトリ内のスクリプトは、再起動のたびに実行されます。
      • per-instance - このディレクトリ内のスクリプトは、新しいインスタンスが最初に起動されるときに実行されます。
      • per-once - このディレクトリ内のスクリプトは、1 回だけ実行されます。

次のステップ

cloud-init のトラブルシューティング