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
ディレクトリにあるファイルに依存しないでください。openstack
ディレクトリに複数のディレクトリが存在する場合、常にコンシューマーのサポートがある日付で最新の API バージョンのものを選択するようにしてください。例えば、ゲストイメージがバージョン 2012-03-05、2012-08-05、2013-04-13 をサポートする場合、まず 2013-04-13 を試します。2013-04-13 がない場合は次に新しいバージョンを見ていきます。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
フラグを渡した場合、管理者はコンフィグドライブを無効化できません。
お使いのゲストオペレーティングシステムが、ラベルによるディスクアクセスをサポートしている場合、コンフィグドライブを /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/2012-08-10/meta_data.json
、openstack/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/2009-04-04/meta-data.json
、ec2/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_data
、 openstack/latest/user_data
、 ec2/2009-04-04/user-data
、 ec2/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 を使用している場合、ライブマイグレーションの機能は正常に動作します。
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.