若是 instance 没法经过 metadata service 获取 metadata(无 DHCP 或者 nova-api-metadata 服务),instance 还能够经过 config drive 得到 metadata。json
config drive 是一个特殊的文件系统,OpenStack 会将 metadata 写到 config drive,并在 instance 启动时挂载给 instance。如过 instance 安装了 cloud-init,config drive 会被自动 mount 并从中读取 metadata,进而完成后续的初始化工做。api
接下来咱们将实践 config-drive。ssh
config drive 默认是 disable 的,因此首先得启用。有两种方法启用 config drive:spa
启动 instance 时指定 --config-drive true
。code
在计算节点的 /etc/nova/nova.conf 中配置 force_config_drive = true
,这样部署到此计算节点的 instance 都会使用 config drive。咱们实验中使用的就是这种方法。orm
config drive 支持两种格式,iso9660 和 vfat,默认是 iso9660,但这会致使 instance 没法在线迁移,必须设置成config_drive_format=vfat
才能在线迁移,这一点须要注意。ci
配置完成后,重启 nova-compute 服务。部署
部署一个新的 cirros instance c2
,咱们先到计算节点的 instances 目录下看看 c1 与 c2 的区别。it
c2 的目录下会多一个 disk.config
文件,这就是 config drive。经过virsh edit
能够看到 disk.config 已经挂载到 instance 上了。form
打开 c2 的控制台,hostname 已经配置好,说明 metadata 拿到了。
为了确保 metadata 不是从 nova-api-metadata 获取,我已经提早关闭了 DHCP 服务,能够看到当前 c2 是没有 IP 的。
lsblk
查看块设备,iso 设备 sr0
就是 config drive。
mount sr0,查看 config drive 的内容。
meta_data.json
中存放了 ssh public key, hostname 等信息。
instance 能够经过 nova-api-metadata 或者 config drive 这两种途径拿到 metadata,如何使用这些 data 是 cloud-init 要完成的工做,下节咱们将开始详细讨论 cloud-init。