设为首页 收藏本站
查看: 1012|回复: 0

[经验分享] openstack nova集成docker部署过程记录

[复制链接]
发表于 2015-10-11 07:32:04 | 显示全部楼层 |阅读模式
openstack nova集成docker部署过程记录
  docker已经可以作为compute driver来使用,脱离了原来HEAT的模式,可以做到真正地使用nova来启动容器.这里记录一下openstack Kilo + docker 1.8的集成过程.所有组件环境基于centos7.

架构图如下:

DSC0000.jpg
安装docker
  在compute node节点上安装docker,强烈建议安装docker-engine 1.8,需要linux3.1的kernal版本,拥有较高的生产稳定性,并且有启动用户组,旧版的docker-io是没有用户组,集成的时候docker.sock的权限每次都是手工修改很不方便.


curl -sSL https://get.docker.com/ | sh
usermod -aG docker nova
systemctl enable docker.service
systemctl start docker.service

安装novadocker
  直接从github上clone安装


pip install -e git+https://github.com/stackforge/nova-docker#egg=novadocker
cp -R src/etc/nova/rootwrap.d /etc/nova/
chmod -R root.nova /etc/nova/rootwrap.d
cd src/novadocker/
python setup.py install

配置nova调用docker驱动
  vi /etc/nova/nova.conf


compute_driver = novadocker.virt.docker.DockerDriver

配置glance支持容器格式
  vi /etc/glance/glance-api.conf (修改后重启glance-api服务)


container_formats = ami,ari,aki,bare,ovf,docker

Fix bug设置
  由于novadocker开发的版本是基于nova比较新的版本,在现在发行的版本中使用会有一个BUG,下面是修复记录.
  1.重启openstack-nova-compute服务时提示没有找到oslo_log模块


pip install oslo.log
  2.重启openstack-nova-compute服务时提示没有找到hv_type模块
  通过代码定位发现目前的版本中模块是nova.compute.hvtype
修改/usr/lib/python2.7/site-packages/novadocker/virt/docker/driver.py
把from nova.compute import hv_type 改为 from nova.compute import hvtype

  3.直接导入driver测试提示报错,CONF没有’my_ip’这个opt配置
  通过代码排查发现目前的openstack是使用oslo.config这个模块包来做cfg的导入和导出
但是在novadocker整个项目里面使用的oslo_config这个独立的模块
修改driver.py, client.py, hostinfo.py, vifs.py模块
from oslo_config import cfg 改为 from oslo.config import cfg

  4.直接导入driver测试提示继续报错,没有找到hvtype.DOCKER属性
  修改 /usr/lib/python2.7/site-packages/nova/compute/hvtype.py
在# specific ‘baremetal’ & ‘fake’ then added in.下面增加
DOCKER=’docker’

  此时启动openstack-nova-compute已经正常
glance导入docker镜像


docker pull hipache
docker save hipache | glance image-create --is-public=True --container-format=docker --disk-format=raw --name hipache
  需要注意的是glance导入后的名字一定要和docker images下显示的名字一模一样,否则创建时会提示无法找到镜像

启动容器实例


nova boot --image hipache --flavor 1 --nic net-id=342a0eef-e03d-4fd8-af3c-1ed485bee989 docker
DSC0001.jpg

1.此时启动容器实例报错失败,从nova-compute.log的日志看异常信息是”attach vif error”,具体是无法使用nova-rootwrap来提权进入namespace创建实例的网络接口
  google找到的这个BUG的解决是禁用compute节点的selinux

  2.继续下一个BUG,日志抛出一个Python异常是没有找到hardware.InstanceInfo模块
  进入目录/usr/lib/python2.7/site-packages/nova/virt
查看hardware.py的代码的确没有找到这个类或者函数,在github上找到nova项目的最新代码可以看到是有的.
DSC0002.jpg
把这个类的代码复制到本地的hardware.py里面

  3.重启启动一个实例后,异常继续保持

DSC0003.jpg
  异常提示InstanceInfo没有getitem这个内置方法
根据driver.py里面的调用可以发现get_info调用的时候是hardware.InstanceInfo是返回一个字典
删除刚才在hardware.py复制的代码,重写InstanceInfo


def InstanceInfo(state=None, max_mem_kb=0, mem_kb=0, num_cpu=0,cpu_time_ns=0, id=None):
Info={}
Info['state'] = state
Info['max_mem_kb'] = max_mem_kb
Info['self.mem_kb'] = mem_kb
Info['num_cpu'] = num_cpu
Info['cpu_time_ns'] = cpu_time_ns
Info['id'] = id
return Info
  此时启动实例正常无报错



[iyunv@openstack-k ~]# nova list
+--------------------------------------+---------+--------+------------+-------------+-------------------------------------------+
| ID                                   | Name    | Status | Task State | Power State | Networks                                  |
+--------------------------------------+---------+--------+------------+-------------+-------------------------------------------+
| c9d7ef23-f0fe-488d-88b1-3b5650901820 | hipache | ACTIVE | -          | Running     | admin_private=192.168.0.101, 172.24.4.228 |
+--------------------------------------+---------+--------+------------+-------------+-------------------------------------------+
[iyunv@openstack-k ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
14583d5d6308        hipache             "supervisord -n"    5 hours ago         Up 5 hours                              nova-c9d7ef23-f0fe-488d-88b1-3b5650901820
[iyunv@openstack-k ~]#

参考连接:
  https://wiki.openstack.org/wiki/Docker
http://docs.docker.com/installation/centos/
https://bugs.launchpad.net/nova-docker/+bug/1480246
https://github.com/openstack/nova/
https://github.com/stackforge/nova-docker


版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 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-125228-1-1.html 上篇帖子: openstack_ice之wsgi详解(paste从ini配置文件->routesr具体发布流程) 下篇帖子: OpenStack Nova 安装后的 FlatManager 网络配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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