赞
踩
DevStak 是 OpenStack 官方文档中提供的一套用于快速部署 OpenStack 实验性环境的脚本。文档中提到 DevStack 可以部署在物理机、虚拟机甚至LXC Container中,笔者尝试按照文档描述使用 LXC Container 方式部署,结果遇到各种报错。由于笔者对 LXC 的操作不熟悉,解决报错很困难,于是决定改用比较流行Docker 容器来部署。
CPU: 飞腾2000+ 64核
内存: 256g
操作系统: CentOS Linux release 7.9.2009 (AltArch)
Docker版本: 19.03.8
由于 DevStack 使用了 systemd ,需要在容器中安装 systemd,并使用 systemd 作为入口命令,构建一个安装 systemd的基础镜像,Dockerfile如下:
FROM fedora:35 # 当前 openstack 版本 zed ,最新支持fedora 35
RUN yum install systemd -y
构建基础镜像,在 Dockerfile 目录下执行
docker build -t devstack .
启动 devstack 容器
docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged -it -v /lib/modules:/lib/modules -p 8029:80 -p 6080:6080 --sysctl=net.ipv6.conf.all.disable_ipv6=0 --cpuset-cpus '0-7' --cpuset-mems 0 --name devstack devstack /sbin/init
1、 使用了-p参数,这里由于当前环境原因没有使用 host network,使用host network会方便很多, 80端口是horizon web端口,6080是vnc端口
2、 --sysctl参数的使用是devstack部署过程中需要修改的sysctl相关参数,当然可以提前在宿主机上修改,就不用在容器中改动了
3、 --cpuset-cpus --cpuset-mems 绑核绑numa节点,提升点性能
执行以下命令
docker exec -it devstack bash #进入devstack容器 dnf install git sudo vi #安装必须软件 useradd -s /bin/bash -d /opt/stack -m stack chmod +x /opt/stack echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack su - stack # 切换stack用户 git clone https://opendev.org/openstack/devstack -b stable/zed #下载DevStack脚本 cd devstack #创建local.conf文件 vi local.conf #输入以下内容 [[local|localrc]] ADMIN_PASSWORD=secret DATABASE_PASSWORD=$ADMIN_PASSWORD RABBIT_PASSWORD=$ADMIN_PASSWORD SERVICE_PASSWORD=$ADMIN_PASSWORD #执行安装脚本 ./stack.sh
等待stack.sh脚本运行完成,脚本运行时间比较长,可能会遇到报错退出,解决报错后重新运行,只到运行成功结束。
脚本中的有一段逻辑是等待 http://xxx.xx.xx.xx/image 接口返回200,如果出现等待超时报错,一般重新glance服务可以恢复正常
# 可以将该命令加到脚本执行等待逻辑的前面
systemctl restart devstack@g-*
由于报错在重复执行./stack.sh时,会出现创建/var/run/openvswitch软件链接失败的问题
systemctl stop openvswitch
rm -rf /var/run/ovn
rm -rf /var/run/openvswitch
可能devstack的脚本对于arm64环境未做充分验证,在生产nova compute服务的配置文件时,出现了判断错误,修改脚本中生成nova compute配置文件的地方,去掉cpu_module即可。
devstack脚本自动配置的lvmdriver-1 在容器环境中启动失败。
如果发现以下服务启动失败
system status stack-volumes-lvmdriver-1-backing-file.service
则执行 losetup -D,再restart一下服务即可。
在执行创建卷时,cinder-vol 服务仍然报错,查看日志,发现是创建lv失败了,可以尝试在/etc/lvm/lvm.conf文件中,修改:
udev_sync = 0
udev_rules = 0
创建卷成功,但在openstack执行绑定卷时失败了,提示 volume不是一个block device。
最终笔者放弃使用devstack脚本自动配置的lvmdriver-1,改用NfsDriver了,需外部再搭一个nfs服务。
由于笔者没有使用host network网络,所以需要将vnc服务设置外网访问代理,修改 /etc/nova/nova-cpu.conf文件,添加novncproxy_base_url配置,设置为外网代理地址
[vnc]
novncproxy_base_url = http://10.1.3.111:10381/vnc_lite.html
DevStack文档中提到的lxc container部署方式,在arm64环境下会出现各种报错,可能是 openstack版本更新太快,而DevStack的脚本更新并未跟上。笔者在使用docker部署devstack的过程,通过解决报错问题,加深了openstack各组件的理解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。