设为首页 收藏本站
云服务器等爆品抢先购,低至4.2元/月
查看: 1864|回复: 0

[经验分享] Openstack文件和元数据注入

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-6-2 15:00:50 | 显示全部楼层 |阅读模式
  
Openstack
文件和元数据注入

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

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

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

对于nbd,ubuntu下只需要加载内核模块(modprobe nbd)和安装qemu-nbd
centos下就比较麻烦了,需要手工编译 nbd qemu-nbd

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

本文档是以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. nova keypair-add --pub_key .ssh/id_rsa.pub mykey
c) 创建实例的时候注入密钥
i. nova boot --key_name mykey --image id_of_image --flavor 1 name_of_instance
Note: id_of_image可以通过nova image-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 --meta key1=value1 --image id_of_image --flavor 1 name_of_instance

Cat /meta.js  # 虚拟机中
{"key2&quot;: &quot;value2&quot;, &quot;key1&quot;: &quot;value1&quot;}
4. 示例:
假如我们想让新创建的实例运行一个初始化脚本,但这个脚本会根据不用的需求有所变化,我们可以这样做

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

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

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


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

2012-06-04 17:48:14 TRACE nova.rpc.amqp Failed to mount filesystem: Unexpected error while running command.
2012-06-04 17:48:14 TRACE nova.rpc.amqp Command: sudo nova-rootwrap guestmount --rw -a /var/lib/nova/instances/instance-00000075/disk -m /dev/sda1 /tmp/tmpJNUwS9
2012-06-04 17:48:14 TRACE nova.rpc.amqp Exit code: 1
2012-06-04 17:48:14 TRACE nova.rpc.amqp Stdout: ''
2012-06-04 17:48:14 TRACE nova.rpc.amqp Stderr: 'Traceback (most recent call last):\n  File &quot;/usr/bin/nova-rootwrap&quot;, line 5, in <module>\n    pkg_resources.run_script(\'nova==2012.2\', \'nova-rootwrap\')\n  File &quot;/usr/lib/python2.6/site-packages/pkg_resources.py&quot;, line 461, in run_script\n    self.require(requires)[0].run_script(script_name, ns)\n  File &quot;/usr/lib/python2.6/site-packages/pkg_resources.py&quot;, line 1194, in run_script\n    execfile(script_filename, namespace, namespace)\n  File &quot;/usr/lib/python2.6/site-packages/nova-2012.2-py2.6.egg/EGG-INFO/scripts/nova-rootwrap&quot;, line 69, in <module>\n    env=filtermatch.get_environment(userargs))\n  File &quot;/usr/lib64/python2.6/subprocess.py&quot;, line 639, in __init__\n    errread, errwrite)\n  File &quot;/usr/lib64/python2.6/subprocess.py&quot;, line 1228, in _execute_child\n    raise child_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 TRACE nova.rpc.amqp   File &quot;/usr/lib/python2.6/site-packages/nova-2012.2-py2.6.egg/nova/virt/disk/api.py&quot;, line 258, in inject_files
2012-06-04 17:52:02 TRACE nova.rpc.amqp     img.umount()
2012-06-04 17:52:02 TRACE nova.rpc.amqp   File &quot;/usr/lib/python2.6/site-packages/nova-2012.2-py2.6.egg/nova/virt/disk/api.py&quot;, line 222, in umount
2012-06-04 17:52:02 TRACE nova.rpc.amqp     os.rmdir(self.mount_dir)
2012-06-04 17:52:02 TRACE nova.rpc.amqp OSError: [Errno 16] Device or resource busy: '/tmp/tmpIfnkPL'
2012-06-04 17:52:02 TRACE nova.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. 什么是openstackmetadata (公网云)
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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-508195-1-1.html 上篇帖子: openstack目前个人认为要解决的问题总结,会持续更新 下篇帖子: openstack安装系列之一:操作系统自动安装篇
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表