在Ubuntu16.04中搭建Devstack(Train版本)

在Ubuntu16.04中搭建Devstack(Train版本)

环境搭建

参考:

  1. Pike版环境搭建
  2. 官方版环境搭建

本人为Openstack萌新,谨以此文作为学习记录,方便以后查看,同时希望文中的解决方法可以帮到你。

反反复复,平台搭了好多次。最开始在VMware虚拟机中进行搭建,由于可以创建快照,遇到错误就退回,虽然方便,但并不是学习的好方法。

当时是按照第一个Pike版本的教程走,环境搭建虽然成功,但是因为需要设备透传,按照很多教程配置好之后,在virsh-mamager透传设备总是提示“主机不支持设备透传”,因此转而直接用另一台物理机进行环境搭建。

可能因为物理机之前搭建的环境没删除干净,在物理机搭建Pike版本成功后,在Horizon中创建实例时总是报错,在查找解决方法的过程中,发现了一个应该是开发维护人员的网站:review.opendev.org

另外还有两个经常会遇到的网站:bugs.launchpad.netask.openstack.org

最终,还是跟着官方教程,通过

git clone https://git.openstack.org/openstack-dev/devstack

下载到Train版本的Devsatck后,成功完成环境搭建,如下图:
图片正在顺着网线过来......
具体搭建流程参考以上链接,以下着重说明搭建以及之后创建实例过程中遇到的各种问题和对应解决方法。

搭建过程相关问题

  1. apt-get update
    错误描述1:无法下载XXX,Hash校验和不符
    解决方法:删除 /var/lib/apt/lists/partial 下的所有文件
    错误描述2:命令卡在某个“等待获取报头”较长时间无响应
    解决方法:进入 /etc/apt/sources.list.d 目录,将相应 ppa 源的保存文件删除
    具体参考:https://blog.csdn.net/dilyuanb/article/details/45410197

  2. su - stack
    错误描述:输入密码认证失败
    解决方法:sudo su - stack
    另注意,stack用户创建后需要设置密码:sudo passwd stack

  3. ./stack.sh
    错误描述1:get-pip.py下载失败
    解决方法:单独下载好该文件,官方链接:pip.pypa.io/en/latest/installing
    接着编辑 devstack/tools/install_pip.py,注释掉install_get_pip函数调用。
    错误描述1.1:Failed to connect to bootstrap.pypa.io port 443: 没有到主机的路由
    解决方法:重新执行
    sudo curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

    错误描述2:Job for [email protected] failed
    解决方法:编辑stack.sh并注释掉下图所示的相关内容:
    图片正在顺着网线过来......
    参考:https://cloud.tencent.com/developer/ask/186172/answer/291756

    错误描述3:提示keystone服务没有启动
    解决方法:归结到local.conf的HOST_IP,使用的ip不能联网,注释掉,不配置即可。(这种情况建议重装= =)
    参考:https://ask.openstack.org/en/question/21582/keystone-did-not-start/
    https://ask.openstack.org/en/question/876/cant-install-keystone-devstack-stacksh326-keystone-did-not-start/

    错误描述4:g-api did not start
    解决方法1:编辑 devstack/functions-common,进行如下修改:
    图片正在顺着网线过来......
    参考:https://blog.csdn.net/ANXIN997483092/article/details/87884420
    解决方法2:同样的报错,采用上述方法后,可能会出现[email protected] failed,重启服务没多久继续failed,直接重装,unstack、clean之后,通过killall -u stack命令杀死stack用户所有相关进程。

    错误描述5:ContextualVersionConflict
    解决方法:搜索版本冲突的软件包,进入官网查看更新命令,如:
    os-win更新:pip install -U os-win
    PyJWT更新:pip install --upgrade pyjwt

    错误描述6:ERROR: xxx has requirement xxx, but you’ll have xxx which is incompatible.
    解决方法:类似错误5,通过pip install –upgrade xxx更新

    错误描述7:FailedToDropPrivileges: privsep helper command exited non-zero (1)
    解决方法:属于用户权限问题,首先sudo visudo,确保最后一行为:#includedir /etc/sudoers.d,这样保证修改有效。
    其次,通过whereis privsep-helperwhereis iptables-save找到需要赋予权限的文件位置,因为不同环境文件位置不同,如下图:
    图片正在顺着网线过来......
    不是直接修改/etc/sudoers文件,而是将修改写在/etc/sudoers.d/目录下的文件中:
    图片正在顺着网线过来......
    其中的stack文件是根据官网devstack创建的权限文件,分别在stack文件和在neutron-rootwrap文件中添加如下两行:
    stack ALL=(root) NOPASSWD: /usr/local/bin/privsep-helper   stack ALL=(root) NOPASSWD: /sbin/iptables-save
    参考:https://ask.openstack.org/en/question/117996/solved-rocky-linuxbridge-agent-privsep-helper-command-exited-non-zero/
    https://segmentfault.com/a/1190000007394449

创建实例相关问题

1. Volume did not finish being created even after we waited 96 seconds or 30 attempts. And its status is error.
解决方法:这种情况出现在重启主机后,创建实例时选择创建卷,会报此错误。
参照:https://www.oschina.net/question/3848264_2279029中的回复,不创建卷,就可以正常创建实例,但不是长久之计。
注意到每次创建好带卷的实例后,会自动挂载卷,而重启之后,卷不会自动挂载,因此需要挂载卷。通过losetup命令挂载应该可以解决(未尝试),具体参考:https://blog.csdn.net/qingyuanluofeng/article/details/70136182

2. Volume did not finish being created even after we waited 0 seconds or 1 attempts. And its status is error.
解决方法:注意与1的区别,1次尝试就报错,此时如果不创建卷而去创建实例,又会进一步报错:Timed out waiting for a reply to message ID XXX
通过查看日志,又发现各种错误,如:

[email protected] failed
cinder-volume is reporting problems, not sending heartbeat. 
Failed to spawn rootwrap process

通过各种查找修改,均无果,最后还是重装最新的Train版本解决了(= =)

3. Volume did not finish being created even after we waited 187 seconds or 61 attempts. And its status is creating.
解决方法:!!!怎么又是这问题!当上传了6个多G的ubuntu镜像后,创建实例又报错,看到61次尝试,考虑到应该修改配置,将次数调大。
编辑nova.conf:sudo gedit /etc/nova/nova.conf
在[DEFAULT]配置项下添加:block_device_allocate_retries = 180
最后重启devstack所有服务:sudo systemctl restart [email protected]*

4. No sql_connection parameter is established.
解决方法:修改sudo gedit /etc/nova/nova_cell1.conf
根据自己的环境添加,内容参考 etc/nova/nova.conf

[api_database]
connection = mysql+pymysql://root:[email protected]/nova_api?charset=utf8

最后重启devstack所有服务即可

5. External network is not reachable from subnet.
解决方法:绑定浮动ip出错,因为刚搭建好的平台,默认的子网和外网之间没有连接路由。
参考:https://ask.openstack.org/en/question/113553/i-am-unable-to-associate-floating-ips-with-instances-created-in-openstack/
https://docs.openstack.org/horizon/stein/user/create-networks.html
https://blog.csdn.net/yasyal515/article/details/73196181

其他问题

1.Permission deniedsu root
2.python manage.py出现key file类似错误:chmod不能直接修改/horizon所有的文件权限为777
正确方法:仅修改需要修改的文件权限为777,方便之后修改;或类似sudo gedit xxx进行编辑


更多精彩内容