当前位置:   article > 正文

docker 容器方式单机部署 openstack(arm64 环境)_docker部署openstack

docker部署openstack

背景

DevStak 是 OpenStack 官方文档中提供的一套用于快速部署 OpenStack 实验性环境的脚本。文档中提到 DevStack 可以部署在物理机、虚拟机甚至LXC Container中,笔者尝试按照文档描述使用 LXC Container 方式部署,结果遇到各种报错。由于笔者对 LXC 的操作不熟悉,解决报错很困难,于是决定改用比较流行Docker 容器来部署。  
  • 1

环境

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
  • 1
  • 2

构建基础镜像,在 Dockerfile 目录下执行

docker build -t devstack .
  • 1

启动 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

1、 使用了-p参数,这里由于当前环境原因没有使用 host network,使用host network会方便很多, 80端口是horizon web端口,6080是vnc端口
2、 --sysctl参数的使用是devstack部署过程中需要修改的sysctl相关参数,当然可以提前在宿主机上修改,就不用在容器中改动了
3、 --cpuset-cpus --cpuset-mems 绑核绑numa节点,提升点性能

DevStack安装

执行以下命令

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

等待stack.sh脚本运行完成,脚本运行时间比较长,可能会遇到报错退出,解决报错后重新运行,只到运行成功结束。

处理报错

glance 接口返回503

脚本中的有一段逻辑是等待 http://xxx.xx.xx.xx/image 接口返回200,如果出现等待超时报错,一般重新glance服务可以恢复正常

# 可以将该命令加到脚本执行等待逻辑的前面
systemctl restart devstack@g-*
  • 1
  • 2

/var/run/openvswitch 目录已存在

由于报错在重复执行./stack.sh时,会出现创建/var/run/openvswitch软件链接失败的问题

systemctl stop openvswitch
rm -rf /var/run/ovn
rm -rf /var/run/openvswitch
  • 1
  • 2
  • 3

nova compute 服务报错,非 custom的cpu_mode不能设置cpu_module

可能devstack的脚本对于arm64环境未做充分验证,在生产nova compute服务的配置文件时,出现了判断错误,修改脚本中生成nova compute配置文件的地方,去掉cpu_module即可。

cinder-volume服务报错

devstack脚本自动配置的lvmdriver-1 在容器环境中启动失败。
如果发现以下服务启动失败

system status stack-volumes-lvmdriver-1-backing-file.service
  • 1

则执行 losetup -D,再restart一下服务即可。
在执行创建卷时,cinder-vol 服务仍然报错,查看日志,发现是创建lv失败了,可以尝试在/etc/lvm/lvm.conf文件中,修改:

udev_sync = 0
udev_rules = 0
  • 1
  • 2

创建卷成功,但在openstack执行绑定卷时失败了,提示 volume不是一个block device。
最终笔者放弃使用devstack脚本自动配置的lvmdriver-1,改用NfsDriver了,需外部再搭一个nfs服务。

云主机 vnc console访问不了

由于笔者没有使用host network网络,所以需要将vnc服务设置外网访问代理,修改 /etc/nova/nova-cpu.conf文件,添加novncproxy_base_url配置,设置为外网代理地址

[vnc]
novncproxy_base_url = http://10.1.3.111:10381/vnc_lite.html
  • 1
  • 2

总结

DevStack文档中提到的lxc container部署方式,在arm64环境下会出现各种报错,可能是 openstack版本更新太快,而DevStack的脚本更新并未跟上。笔者在使用docker部署devstack的过程,通过解决报错问题,加深了openstack各组件的理解。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/74058
推荐阅读
相关标签
  

闽ICP备14008679号