- 将元数据存储在配置盘中
- 使用本功能的要求,和本功能的几个注意事项
- 启用和访问配置盘
- 配置盘中的内容
- OpenStack元数据格式
- EC2元数据格式
- 用户数据
- 配置盘格式
将元数据存储在配置盘中
您可以让OpenStack将元数据写入到一个特殊的“配置盘”中,实例启动时可以挂载这个盘来读取配置信息。一般情况下,这些信息是由元数据服务提供的。注意,这里的元数据和用户数据不同。
这个功能的一个用例是在没有DHCP的情况下给实例分配IP地址。例如,您可以通过配置盘将IP地址配置传给实例,实例挂载上这个盘以后,读取其中的IP信息,before you configure the network settings for the instance.
使用本功能的要求,和本功能的几个注意事项
要使用配置盘,您的主机和镜像必须满足以下要求。
对主机的要求:
- 以下虚拟机管理器支持配置盘:libvirt,XenServer,Hyper-V和VMware。
- 如果要在libvirt,XenServer或者VMware中使用配置盘,您必须先在每个compute host上安装
genisoimage。否则,实例无法正常启动。
您需要用mkisofs_cmd来标记您安装genisoimage程序的路径。如果genisoimage和nova-compute服务在一个路径下,就不用设置了。 - 如果您要在Hyper-V下使用配置盘,您必须用
mkisofs_cmd来标记您安装的mkisofs.exe的全路径。此外,您还要在hyperv中设置qemu_img_cmd值,将其指向qemu-img这个命令的安装位置。
对镜像的要求:
- 带有新版本cloud-init包的镜像能够自动获取到配置盘中的元数据。0.7.1版本的cloud-init包能用在Ubuntu和Fedora系的操作系统上,比如说RHEL。
- 如果镜像中没有安装cloud-init包,您必须定制一下这个镜像:写一个能执行各种动作的脚本,比如在启动的时候挂载配置盘,从盘中读数据,然后做一些诸如导入公钥的动作。您可以在本文档中读到更多配置盘中数据格式的内容。
几个注意事项:
不要依赖配置盘中的EC2元数据,因为这些内容在新版本中可能会被移除。例如,不要依赖
ec2文件中的文件。在您创建可读取配置盘的镜像时,如果有
openstack文件夹下有多个文件夹,您一定要选择用户支持的最高版本的API(以日期标注)。比如说,如果您的镜像支持2012-03-05,2012-08-05和2013-04-13版本,先尝试使用2013-04-13版本,如果该版本不存在,再尝试前面的版本。
启用和访问配置盘
- 如果要启用配置盘,将
--config-driver true参数传给nova boot命令即可。
在下面的例子里,我们启用了配置盘,将用户数据,两个文件,以及两个键/值元数据对传给了它,这些都可以在配置盘中获取到。
$ nova boot --config-drive true --image my-image-name --key-name mykey \--flavor 1 --user-data ./my-user-data.txt myinstance \--file /etc/network/interfaces=/home/myuser/instance-interfaces \--file known_hosts=/home/myuser/.ssh/known_hosts \--meta role=webservers --meta essential=false
您也可以把Compute服务配置成每次都使用配置盘。在/etc/nova/nova.conf文件中配置如下条目:
force_config_drive=true
注意:
如果某位用户将--config-drive true参数传递给了nova boot命令,连管理员也没法禁用。
- 如果您的实例支持通过标签来访问磁盘,您可以以
/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命令来查找配置盘对应的块设备。比如,如果您用CirrOS镜像,在m1.tiny的配置下启动了实例,配置盘应该是/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.jsonec2/2009-04-04/user-dataec2/latest/meta-data.jsonec2/latest/user-dataopenstack/2012-08-10/meta_data.jsonopenstack/2012-08-10/user_dataopenstack/contentopenstack/content/0000openstack/content/0001openstack/latest/meta_data.jsonopenstack/latest/user_data
配置盘中有哪些内容取决于您使用nova boot时传入了哪些参数。
OpenStack元数据格式
下面的内容展示了openstack/2012-08-10/meta_data.json和openstack/latest/meta_data.json文件。这两个文件是完全一样的。为了方便阅读,内容已经做过排版。
{"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"}
请注意您使用nova boot参数时配置的参数--file /etc/network/interfaces=/home/myuser/instance-interfaces产生的效果。这个文件的内容被保存在了openstack/content/0000文件中,路径信息指定为/etc/network/interface/,保存在meta_data.json中。
EC2元数据格式
下面的内容展示了ec2/2009-04-04/meta_data.json和ec2/latest/meta_data.json文件。这两个文件是完全一样的。为了方便阅读,内容已经做过排版。
{"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这四个文件只有在您使用nova boot文件时传入了--user-data参数和用户数据文件时才会出现。
配置盘格式
默认的配置盘格式时ISO 9660。如果要显式地指定ISO 9660格式,请在/etc/nova/nova.conf文件中添加以下配置:
config_drive_format=iso9660
默认情况下,您只能将配置盘以硬盘的形式装载在实例上,而不能用光盘的形式。如果要以CD的形式装载,请在/etc/nova/nova.conf文件中添加以下配置:
config_drive_cdrom=true
为了提供对旧设备的支持,您还可以将配置盘设置为VFAT格式。您可能不会需要用到VFAT,因为ISO 9660已被绝大多数操作系统所支持。然而,要使用VFAT格式,请在/etc/nova/nova.conf文件中添加以下配置:
config_drive_format=vfat
如果您选择了VFAT,配置盘的大小将会是64 MB。
注意:
在当前的OpenStack版本中(Liberty),给用到config_drive的本地盘做热迁移的功能被禁用了,因为libvirt在复制只读盘时有bug。然而,如果我们使用VFAT格式作为config_drive的格式,热迁移的功能是可用的。
