openstack 中 metadata 和 userdata 的配置和使用

openstack 中 metadata 和 userdata 的配置和使用


什么是metadata和userdata?它们存在的意义何在?

使用云部署(launch)了虚拟机后,想定制化自己的虚拟机,比如配置 IP,设置硬盘分区等等,为了不需要每次部署虚拟机,都要做定制化的镜像,费时费力,这样metadata和userdata就出现了,提供向虚拟机注入信息的机制。
metadata 的介绍在ec2-instance-metadata
userdata 的介绍在userdata

metadata和userdata的区别和应用场景

  • metadata 是 key/value的方式,长度控制在 255 字符,重点在提供,比如 IP,安全组等;而 userdata 多是脚本的方式,重点在配置,比如提供shell脚本,设置root用的密码等等;

  • launch(boot)虚拟机时传入的参数不同,metadata 使用 –meta,key和value的长度控制在255个字符,而userdata使用–user-data,使用文件传入,dashboard上直接上内容;

  • userdata一旦虚拟机launched,虚拟机运行过程中无法进行修改,且仅适用在launch阶段,后续的重启都不会运行,而metadata在nova有独立的RESTful API 接口,可在虚拟机运行过程中动态修改;

  • metadata 在openstack中会放置在meta服务器上或者虚拟机内部,分光驱方式和修改镜像方式,后面讲到,需要虚拟机用户主动去获取,而userdata则是由cloudinit软件执行,在虚拟机launch时运行;

配置和使用

metadata 配置参照metadata, 而 userdata 无需特殊配置。
如果使用镜像服务器的话,还有可能配置 neutron-dhcp-agent 的配置文件

vi /etc/neutron/dhcp_agent.ini
enable_isolated_metadata = True
enable_metadata_network = True

贴一张网上截取的图,解释meta服务器的工作流程
openstack 中 metadata 和 userdata 的配置和使用_第1张图片
使用:

  • boot 时,–meta/–user-data 传入

  • metadata 可由 nova meta/host-meta 修改

虚拟机内存放位置

  • metadata
    需要介绍3中注入方式

    1. 镜像修改方式,以 meta_data.json 文件存放在虚拟机/目录下。
    2. 光驱注入方式,以 meta_data.json 文件存放在光驱设备中,需要 mount /dev/sr0 /mnt; /mnt/openstack/latest/meta_data.json。
    3. meta服务器方式,nova-api 服务集成了此服务器,通过 RESTful API,直观点,nova meta/host-meta 均可以设置虚拟机的meta,存放在nova数据库的instance_metadata中,虚拟机使用 curl http://169.254.169.254 来获取。
  • userdata
    2中注入方式

    1. 镜像修改方式,以 user_data.json 文件存放在虚拟机/目录下。
    2. 光驱注入方式,以 user_data.json 文件存放在光驱设备中,需要 mount /dev/sr0 /mnt; /mnt/openstack/latest/user_data.json。

注:上述的 1 和 2 方式为 二选一 的关系


你可能感兴趣的:(openstack,nova)