コンフィグドライブへのメタデータの保存

コンフィグドライブへのメタデータの保存

OpenStack は、起動時にインスタンスに接続される特別な設定ドライブにメタデータを書き込むように設定することができます。インスタンスはこのディスクをマウントしてそこからファイルを読み込むことで、通常 メタデータサービス から提供される情報を取得することができます。このメタデータは、ユーザーデータと異なります。

コンフィグドライブを使用するユースケースとして、インスタンスへの IP アドレスの割り当てに DHCP を使用しない場合に (IP アドレス、ネットマスク、ゲートウェイなどの) ネットワーク設定を config ドライブで渡すことなどが挙げられます。コンフィグドライブは、インスタンスのネットワーク設定が設定される前にマウント、アクセスできるため、コンフィグドライブを使用して IP アドレス設定を転送することができます。

コンフィグドライブは、ISO 9660 または VFAT のファイルシステムをマウントできるゲストオペレーティングシステムからであればどれでも使用することができます。この機能は、最近のオペレーティングシステムのすべてで利用できるはずです。

要件とガイドライン

コンフィグドライブを使用するために、コンピュートホストとイメージに関する以下の要件を満たす必要があります。

コンピュートホストの要件

  • 次のハイパーバイザーがコンフィグドライブをサポートします。libvirt、XenServer、Hyper-V、VMware。

    Bare Metal サービスもコンフィグドライブをサポートしています。

  • libvirt、XenServer、VMware でコンフィグドライブを使用するには、genisoimage プログラムを各コンピュートホストにインストールする必要があります。

    mkisofs_cmd フラグを使用して、genisoimage プログラムをインストールするパスを設定します。genisoimage が nova-compute サービスと同じパスの場合、このフラグを設定する必要がありません。

  • Hyper-V でコンフィグドライブを使用する場合、mkisofs_cmd の値を mkisofs.exe の完全パスに設定する必要があります。さらに、qemu-img コマンドのインストレーションへの完全パスに hyperv 設定セクションの qemu_img_cmd フラグの値を設定する必要があります。

  • Bare Metal サービスでコンフィグドライブを使用するために、準備すべきことはありません。 Bare Metal サービスがコンフィグドライブを適切に処理してくれます。

イメージの要件

  • An image built with a recent version of the cloud-init package can automatically access metadata passed through the configuration drive. The following table lists the references for cloud-init versions mapped to a particular operating system:

    Operating system Reference for cloud-init version
    Ubuntu http://packages.ubuntu.com/search?keywords=cloud-init
    Fedora (RHEL) https://www.rpmfind.net/linux/rpm2html/search.php?query=cloud-init
    openSUSE (SLE) http://software.opensuse.org/download.html?project=Cloud%3ATools&package=cloud-init
  • イメージに cloud-init パッケージがインストールされていない場合、起動時に config ドライブをマウントしドライブからデータを読み込み公開鍵をアカウントに追加するなどといった適切なアクションをとれるようにスクリプトを実行するように、このイメージをカスタマイズする必要があります。データがコンフィグドライブでどのように整理されているかについて、詳細を参照できます。

  • Xen でコンフィグドライブを使用する場合、エージェントを無効化するために xenapi_disable_agent 設定パラメーターを使用します。

ガイドライン

  • コンフィグドライブにある EC2 メタデータに依存しないようにしてください。この内容は将来のリリースで削除される可能性があります。たとえば、ec2 ディレクトリにあるファイルに依存しないでください。
  • コンフィグドライブデータにアクセスするイメージを作成する際に、openstack ディレクトリに複数のディレクトリが存在する場合、常にコンシューマーのサポートがある日付で最新の API バージョンのものを選択するようにしてください。例えば、ゲストイメージがバージョン 2012-03-05、2012-08-05、2013-04-13 をサポートする場合、まず 2013-04-13 を試します。2013-04-13 がない場合は次に新しいバージョンを見ていきます。

コンフィグドライブの有効化とアクセス

  1. openstack server create コマンドに --config-drive true パラメーターを付け、コンフィグドライブを有効化します。

    以下の例は、コンフィグドライブを有効化し、ユーザーデータを渡します。このデータはコンフィグドライブからアクセスできる、2 つのファイル、2 つのキーバリューメタデータペアです。

    $ openstack server create --config-drive true --image my-image-name \
      --flavor 1 --key-name mykey --user-data ./my-user-data.txt \
      --file /etc/network/interfaces=/home/myuser/instance-interfaces \
      --file known_hosts=/home/myuser/.ssh/known_hosts \
      --property role=webservers --property essential=false MYINSTANCE
    

    /etc/nova/nova.conf ファイルに以下のオプションを設定することにより、常にコンフィグドライブを作成するよう、Compute サービスを設定することもできます。

    force_config_drive = true
    

    注釈

    ユーザーが nova boot コマンドに --config-drive true フラグを渡した場合、管理者はコンフィグドライブを無効化できません。

  2. お使いのゲストオペレーティングシステムが、ラベルによるディスクアクセスをサポートしている場合、コンフィグドライブを /dev/disk/by-label/configurationDriveVolumeLabel デバイスとしてマウントできます。以下の例は、コンフィグドライブが config-2 ボリュームラベルを持ちます。

    # mkdir -p /mnt/config
    # mount /dev/disk/by-label/config-2 /mnt/config
    

注釈

必ずコンフィグドライブをサポートする CirrOS バージョン 0.3.1 以降を利用してください。

お使いのゲストオペレーティングシステムが udev を使用していなければ、/dev/disk/by-label ディレクトリが存在しません。

コンフィグドライブに対応するブロックデバイスを識別するために、blkid コマンドを使用できます。たとえば、m1.tiny フレーバーで CirrOS イメージを起動するとき、このデバイスは /dev/vdb になります。

# blkid -t LABEL="config-2" -odevice
/dev/vdb

認識されると、デバイスをマウントできます。

# mkdir -p /mnt/config
# mount /dev/vdb /mnt/config

コンフィグドライブの内容

この例では、コンフィグドライブの内容は以下のとおりです。

ec2/2009-04-04/meta-data.json
ec2/2009-04-04/user-data
ec2/latest/meta-data.json
ec2/latest/user-data
openstack/2012-08-10/meta_data.json
openstack/2012-08-10/user_data
openstack/content
openstack/content/0000
openstack/content/0001
openstack/latest/meta_data.json
openstack/latest/user_data

コンフィグドライブに表示されるファイルは、openstack server create コマンドに渡した引数に依存します。

OpenStack メタデータの形式

openstack/2012-08-10/meta_data.jsonopenstack/latest/meta_data.json (これらのファイルは 2 つとも同じ内容です) の内容の例を以下に示しています。読みやすいようにフォーマットを少し改善しています。

{
    "availability_zone": "nova",
    "files": [
        {
            "content_path": "/content/0000",
            "path": "/etc/network/interfaces"
        },
        {
            "content_path": "/content/0001",
            "path": "known_hosts"
        }
    ],
    "hostname": "test.novalocal",
    "launch_index": 0,
    "name": "test",
    "meta": {
        "role": "webservers",
        "essential": "false"
    },
    "public_keys": {
        "mykey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDBqUfVvCSez0/Wfpd8dLLgZXV9GtXQ7hnMN+Z0OWQUyebVEHey1CXuin0uY1cAJMhUq8j98SiW+cU0sU4J3x5l2+xi1bodDm1BtFWVeLIOQINpfV1n8fKjHB+ynPpe1F6tMDvrFGUlJs44t30BrujMXBe8Rq44cCk6wqyjATA3rQ== Generated by Nova\n"
    },
    "uuid": "83679162-1378-4288-a2d4-70e13ec132aa"
}

--file /etc/network/interfaces=/home/myuser/instance-interfaces 引数の効果は、オリジナルの openstack server create コマンドに渡される点に注意してください。このファイルの内容は、コンフィグドライブの openstack/content/0000` ファイルに含まれており、パスは meta_data.json ファイルに /etc/network/interfaces として指定されています。

EC2 メタデータの形式

ec2/2009-04-04/meta-data.jsonec2/latest/meta-data.json (これらのファイルは 2 つとも同じ内容です) の内容の例を以下に示しています。読みやすいようにフォーマットを少し改善しています。

{
    "ami-id": "ami-00000001",
    "ami-launch-index": 0,
    "ami-manifest-path": "FIXME",
    "block-device-mapping": {
        "ami": "sda1",
        "ephemeral0": "sda2",
        "root": "/dev/sda1",
        "swap": "sda3"
    },
    "hostname": "test.novalocal",
    "instance-action": "none",
    "instance-id": "i-00000001",
    "instance-type": "m1.tiny",
    "kernel-id": "aki-00000002",
    "local-hostname": "test.novalocal",
    "local-ipv4": null,
    "placement": {
        "availability-zone": "nova"
    },
    "public-hostname": "test.novalocal",
    "public-ipv4": "",
    "public-keys": {
        "0": {
            "openssh-key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDBqUfVvCSez0/Wfpd8dLLgZXV9GtXQ7hnMN+Z0OWQUyebVEHey1CXuin0uY1cAJMhUq8j98SiW+cU0sU4J3x5l2+xi1bodDm1BtFWVeLIOQINpfV1n8fKjHB+ynPpe1F6tMDvrFGUlJs44t30BrujMXBe8Rq44cCk6wqyjATA3rQ== Generated by Nova\n"
        }
    },
    "ramdisk-id": "ari-00000003",
    "reservation-id": "r-7lfps8wj",
    "security-groups": [
        "default"
    ]
}

ユーザーデータ

openstack/2012-08-10/user_dataopenstack/latest/user_dataec2/2009-04-04/user-dataec2/latest/user-data のファイルは、--user-data フラグを openstack server create コマンドに指定した場合のみ存在し、引数で指定したユーザーデータファイルの内容がこれらのファイルに含まれます。

コンフィグドライブのフォーマット

コンフィグドライブのデフォルトのフォーマットは、ISO 9660 ファイルシステムです。ISO 9660 フォーマットを明示的に指定する場合、以下の行を /etc/nova/nova.conf に含めます。

config_drive_format=iso9660

デフォルトでは、ディスクドライブの代わりに CD ドライブとしてコンフィグドライブのイメージを接続することはできません。CD ドライブを接続する場合は、/etc/nova/nova.conf の以下の行を追加します。

config_drive_cdrom=true

レガシー関連の理由から、config ドライブを ISO 9660 ではなく VFAT フォーマットを使用するように設定できます。ISO 9660 は様々なオペレーティングシステムで幅広くサポートされているため、VFAT フォーマットが必要になる可能性は低いはずです。ただし、VFAT フォーマットを使用する場合は /etc/nova/nova.conf に以下の行を指定します。

config_drive_format=vfat

VFAT を選択した場合、コンフィグドライブは 64 MB です。

注釈

OpenStack Compute の現在のバージョン (Liberty) では、ローカルディスクに「コンフィグドライブ」を持つライブマイグレーションは、libvirt の読み込み専用ディスクのコピーに関するバグのため、禁止されています。しかしながら、「コンフィグドライブ」のフォーマットとして VFAT を使用している場合、ライブマイグレーションの機能は正常に動作します。

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.