openstack nova集成docker部署过程记录

  • Post author:
  • Post category:其他


openstack nova集成docker部署过程记录

docker已经可以作为compute driver来使用,脱离了原来HEAT的模式,可以做到真正地使用nova来启动容器.这里记录一下openstack Kilo + docker 1.8的集成过程.所有组件环境基于centos7.

架构图如下:

这里写图片描述

安装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

这里写图片描述

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项目的最新代码可以看到是有的.

这里写图片描述

把这个类的代码复制到本地的hardware.py里面

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

这里写图片描述

异常提示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

此时启动实例正常无报错

[root@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 |
+--------------------------------------+---------+--------+------------+-------------+-------------------------------------------+
[root@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
[root@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



版权声明:本文为lion_cui原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。