Openstack文件和元数据注入

本博客介绍如何在OpenStack中创建实例时注入SSH密钥、文件以及元数据。包括如何创建密钥对、注入密钥、文件和元数据的方法,以及解决在实例文件注入过程中遇到的错误。通过实例演示,帮助用户实现对实例的个性化定制。

说明:

openstack在创建实例的时候可以将文件注入到实例中,也可以传一些参数到实例,这在有些情况下会非常有用,比如修改root密码,注入ssh密钥,对实例的个性化定制(后面会举例子)

 

Note: 只有注入文件失败才会使创建实例过程失败

 

对注入的支持可以有loop,guestfs, nbd, mount等,其中 mount 不安全。缺省使用:

img_handlers=”loop,nbd,guestfs”

 

对于nbd,在ubuntu下只需要加载内核模块(modprobenbd)和安装qemu-nbd

在centos下就比较麻烦了,需要手工编译 nbd 和qemu-nbd

 

Guestfs方法比较简单,只需要安装正确的包就可以,ubuntu下安装guestmount, centos需要安装libguestfs和fuse

 

本文档是以nova命令行的方式,图形对有些参数的支持还没有

使用nova命令需要设置以下参数

export OS_USERNAME=user

export OS_PASSWORD=pass

export OS_TENANT_NAME='tenant'

export OS_AUTH_URL=http://localhost:5000/v2.0

 

 

1. 注入ssh密钥

a)   创建密钥(ssh-keygen)

b)   添加密钥对

i.   novakeypair-add --pub_key .ssh/id_rsa.pub mykey

c)   创建实例的时候注入密钥

i.   novaboot --key_name mykey --image id_of_image --flavor 1 name_of_instance

Note: id_of_image可以通过novaimage-list取得

 

2. 注入文件

假如我要注入.vimrc这个文件到新创建的实例中,可以:

nova boot --file/root/.vimrc=/root/.vimrc --image id_of_image --flavor 1 name_of_instance

Note: 可以注入多个文件(最多5个),只要写多个--file<dst-path=src-path>

 

3. 注入元数据

可以通过--meta给实例中传入键值对,注入后会写在/meta.js文件里,以类似python字典的方式存储在虚拟机的/meta.js文件中

nova boot --meta key2=value2 --metakey1=value1 --image id_of_image --flavor 1 name_of_instance

 

Cat/meta.js  # 虚拟机中

{"key2": "value2","key1": "value1"}

4. 示例:

假如我们想让新创建的实例运行一个初始化脚本,但这个脚本会根据不用的需求有所变化,我们可以这样做

 

在创建镜像模板的时候在/etc/rc.local中加入

/opt/init.py

 

Init.py可以读取注入的元数据(meta.js)比如
{"url":"http://example.com/init.sh"}

 

得到初始化脚本的地址,下载下来并执行,这样的好处是对不同的需要可以有多个初始化文件,而不用修改模板

 

 

6. DEBUG

将操作过程中遇到的报错信息帖出来帮助除错

报错信息:

 

2012-06-04 17:48:14 TRACEnova.rpc.amqp Failed to mount filesystem: Unexpected error while running command.

2012-06-04 17:48:14 TRACEnova.rpc.amqp Command: sudo nova-rootwrap guestmount--rw -a /var/lib/nova/instances/instance-00000075/disk -m /dev/sda1/tmp/tmpJNUwS9

2012-06-0417:48:14 TRACE nova.rpc.amqp Exit code: 1

2012-06-04 17:48:14 TRACE nova.rpc.amqpStdout: ''

2012-06-04 17:48:14 TRACEnova.rpc.amqp Stderr: 'Traceback (most recent call last):\n  File "/usr/bin/nova-rootwrap", line5, in <module>\n   pkg_resources.run_script(\'nova==2012.2\', \'nova-rootwrap\')\n  File "/usr/lib/python2.6/site-packages/pkg_resources.py",line 461, in run_script\n   self.require(requires)[0].run_script(script_name, ns)\n  File"/usr/lib/python2.6/site-packages/pkg_resources.py", line 1194, inrun_script\n    execfile(script_filename,namespace, namespace)\n  File"/usr/lib/python2.6/site-packages/nova-2012.2-py2.6.egg/EGG-INFO/scripts/nova-rootwrap",line 69, in <module>\n   env=filtermatch.get_environment(userargs))\n  File"/usr/lib64/python2.6/subprocess.py", line 639, in __init__\n    errread, errwrite)\n  File"/usr/lib64/python2.6/subprocess.py", line 1228, in_execute_child\n    raisechild_exception\nOSError: [Errno 2] No such file or directory\n'

解决办法:安装libguestfs-mount(CentOS)

 

报错信息

Command: sudo nova-rootwrap fusermount -u /tmp/tmpJNUwS9

Exit code: 1

Stdout: ''

2012-06-04 17:52:02 TRACEnova.rpc.amqp   File"/usr/lib/python2.6/site-packages/nova-2012.2-py2.6.egg/nova/virt/disk/api.py",line 258, in inject_files

2012-06-04 17:52:02 TRACEnova.rpc.amqp     img.umount()

2012-06-04 17:52:02 TRACE nova.rpc.amqp   File"/usr/lib/python2.6/site-packages/nova-2012.2-py2.6.egg/nova/virt/disk/api.py",line 222, in umount

2012-06-04 17:52:02 TRACEnova.rpc.amqp    os.rmdir(self.mount_dir)

2012-06-04 17:52:02 TRACEnova.rpc.amqp OSError: [Errno 16] Device or resourcebusy: '/tmp/tmpIfnkPL'

2012-06-04 17:52:02 TRACEnova.rpc.amqp

解决办法:安装fuse(CentOS)

 

参考资料:

1. centos 下openstack的实例文件注入(nbd)(公网云)

http://www.pubyun.com/blog/openstack/centos-%E4%B8%8Bopenstack%E7%9A%84%E5%AE%9E%E4%BE%8B%E6%96%87%E4%BB%B6%E6%B3%A8%E5%85%A5%EF%BC%88nbd%EF%BC%89/

 

2. 什么是openstack的metadata (公网云)

http://www.pubyun.com/blog/openstack/%E4%BB%80%E4%B9%88%E6%98%AFopenstack%E7%9A%84-metadata/

 

3. 邮件

https://lists.launchpad.net/openstack/msg12628.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值