华为服务器适配银河麒麟V10+OpenStack train版本单机部署

2021-08-21   


华为服务器适配银河麒麟V10+OpenStack train版本实现单机部署

1、OpenStack和devstack简介

OpenStack 是一个社区,也是一个项目。它提供了一个部署云的操作平台或工具集,为组织提供可扩展的、灵活的云计算。

作为一个开源的云计算管理平台,OpenStack 由nova、neutron、glance、keystone、horizon等几个主要的组件组合起来完成具体工作。OpenStack 支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack 通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供 API 进行集成。

openstack基础管理服务包含Keystone、Glance、Nova、Neutron、Horizon五个服务

Keystone:认证管理服务、提供了其余所有组件的认证信息/令牌的管理、创建、修改等等、使用MySQL等数据库存储认证信息。

Glance:镜像管理服务,提供了对虚拟机部署的时候所能提供镜像的管理、包含镜像的导入、格式以及制作相应的模板

Nova:计算管理服务,提供了对计算节点的Nova管理、使用Nova-API进行通信

Neutron:网络管理服务、提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理界面

Horizon:控制台服务,提供了以Web形式对所有节点的所有服务的管理,通常把该服务成为Dashboard

扩展服务一般安装cinder

Cinder:提供管理存储节点的Cinder相关、同时提供Cinder在Horizon中的管理面板

OpenStack是一个十分复杂的分布式系统,部署难度较大,调试也较困难。幸运的是社区已经提供了现成的快速部署工具,即DevStack(Develop OpenStack),从英文名称上也能看出这是专为开发OpenStack量身打造的工具

DevStack不依赖于任何自动化部署工具,纯Bash脚本实现,因此不需要花费大量时间耗在部署工具准备上,而只需要简单地编辑配置文件,然后运行脚本即可实现一键部署OpenStack环境。利用DevStack基本可以部署所有的OpenStack组件,但并不是所有的开发者都需要部署所有的服务,比如Nova开发者可能只需要部署核心组件就够了,其它服务比如Swift、Heat、Sahara等其实并不需要。DevStack充分考虑这种情况,一开始的设计就是可扩展的,除了核心组件,其它组件都是以插件的形式提供,开发者只需要根据自己的需求定制配置自己的插件即可

2、系统ISO镜像和麒麟适配OpenStack需要的rpm包组

百度网盘下载点击这里,提取码为:e6c9

3、windowServer远程重装服务器系统

3.1 登录跳板机

在自己的笔记本上打开远程桌面连接,输入跳板机的IP地址和端口号,再输入登录的账号,点击连接后,最后输入登录用户和密码就可以访问到跳板机了

8-20-1

3.2 远程给服务器重装系统

因为之前的系统部署过别的版本的,所以需要重装一下系统。这里也演示一下重装系统。操作其实就跟Centos里面的KVM虚拟机装系统类似。打开windowServer上的KVM软件,按照下图提示登录你要控制的服务器

8-20-2

登录上以后,点击上方悬浮栏的光驱图标,将你需要安装的镜像放进光驱,然后连接上就可以点电源按键重新启动服务器

8-20-3

服务器重启后会有一个welcome界面消息,在准备进入系统之前,按F2键进入bios设置(一般服务器左下方也都会有提示是按哪个键),上下键选中UEFI DVD-ROM为系统启动项后按Enter确认,就进入系统安装界面开始安装麒麟V10最新版系统。后面基本就和实体机装系统的选择一样,选择需要安装的语言、系统盘大小、设置时区等,依次设置好就行

8-20-4

4、配置和修改OpenStack的环境

4.1 系统配置

系统安装好以后,肯定是要配置好IP、网关、dns服务器。然后通过远程软件例如Xshell或是MobaXshell等连接上服务器,将链接里的压缩包传入服务器的/root目录下。再设置好主机名,关闭seLinux和防火墙,以免部署时拦截开启的一些服务和端口,最后设置OpenStack的yum源仓库(tar包在链接里面有)

这里补充说一下,因为windows打包的文件是rar包,在linux里解压的话,默认需要安装rarlinux软件才能使用rar命令(也可以先在Windows里解压好后再上传到linux系统,网盘链接里我也有解压),rarlinux软件源码包下载地址,下载好后要编译安装后才能使用哦,使用命令语法如下:

rar -a test.rar file1 file2是归档

unrar -e test.rar DestPath是把当前压缩包内容解压到当前目录内(容易造成解压内容和当前目录原文件混合,不容易区分,不建议使用)

unrar -x test.rar DestPath是在当前解压目录内产生一个以压缩包名字命名的目录,目录内是解压内容

[root@controller3 ~]# hostnamectl set-hostname controller3
[root@controller3 ~]# yum -y remove firewalld
[root@controller3 ~]# setenforce 0
[root@controller3 ~]# sed -i '/^SELINUX/s/enforcing/disabled/' /etc/sysconfig/selinux
[root@controller3 ~]# tar -zxf openstack-train-aarch.tar.gz
[root@controller3 ~]# tar -zxf dep2.tar.gz
[root@controller3 ~]# vim /etc/yum.repos.d/kylin_aarch64.repo
#在文件前面或者后面追加上这三个yum源
[openstack]
name = openstack
baseurl = file:///root/openstack
enabled = 1
gpgcheck = 0
     
[dep2]
name = dep2
baseurl = file:///root/dep2
enabled = 1
gpgcheck = 0
     
[open-iscsi]
name = open-iscsi
baseurl = file:///root/open-iscsi
enabled = 1
gpgcheck = 0
     
……
[root@controller3 ~]# yum makecache

4.2 安装依赖包

因为我们这次选用的是openstack比较老的方法,借助devstack开发者工具来自动化安装,因此设置好yum源以后我们需要先手动安装好一些依赖包,缺少依赖包的话后面devstack自动化部署的时候会报错

[root@controller3 ~]# yum -y install git gcc-c++ python3-systemd 
[root@controller3 ~]# yum -y install libxml2-devel libffi-devel
[root@controller3 ~]# yum -y install open-iscsi-devel
[root@controller3 ~]# yum -y install python3-lxml python3-libxml2 libxslt libxslt-devel
[root@controller3 ~]# yum -y install pcp-system-tools haproxy
[root@controller3 ~]# cd dep2
[root@controller3 dep2]# yum -y install ./qemu-4.0.1-11.p01.ky10.aarch64.rpm qemu-guest-agent.aarch64
[root@controller3 dep2]# yum -y install libvirt*  python3-libvirt
[root@controller3 dep2]# yum -y install httpd httpd-devel
[root@controller3 dep2]# yum -y install memcached mariadb-server
[root@controller3 dep2]# yum -y install python3-devel
[root@controller3 dep2]# yum -y install python3-sqlalchemy python3-SQLAlchemy-Utils
[root@controller3 dep2]# yum -y install python3-uWSGI python3-mod_wsgi
[root@controller3 dep2]# yum -y install python3-scss python-pip rabbitmq-server
[root@controller3 dep2]# cd /root/edk2
[root@controller3 edk2]# yum -y install ./*
[root@controller3 edk2]# pip3 install copr -i https://mirrors.aliyun.com/pypi/simple
[root@controller3 edk2]# pip3 install scss -i https://mirrors.aliyun.com/pypi/simple
[root@controller3 edk2]# pip3 install uWSGI -i https://mirrors.aliyun.com/pypi/simple
[root@controller3 edk2]# pip3 install mod_wsgi -i https://mirrors.aliyun.com/pypi/simple
[root@controller3 edk2]# pip3 install sqlalchemy-utils -i https://mirrors.aliyun.com/pypi/simple

4.3 修改主机相关的环境

4.3.1 允许httpd服务加载python的插件
[root@controller3 edk2]# vim /etc/httpd/conf/httpd.conf
# 在第55行后追加
LoadModule wsgi_module modules/mod_wsgi_python3.so

修改后如图所示:

4.3.2 配置edk2.x86_64环境

如果进入AAVMF目录发现链接文件已经存在便可以不用再操作4.3.2这步了说明之前yum安装的edk2的包都已经成功装上了,写出来只是为了防止因为漏装导致后面出现问题

[root@controller3 edk2]# cd /usr/share
[root@controller3 share]# chmod -R 755 AAVMF && cd AAVMF
[root@controller3 AAVMF]# ln -s ../edk2/aarch64/QEMU_EFI-pflash.raw AAVMF_CODE.fd
[root@controller3 AAVMF]# ln -s ../edk2/aarch64/vars-tmplate-pflash.raw AAVMF_VARS.fd
4.3.3 增加qemu对uefi的支持
[root@controller3 AAVMF]# vim /etc/libvirt/qemu.conf
# 在第775行后增加
nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd","/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw"]

4.3.4 创建stack用户,用来运行devstack脚本
[root@controller3 AAVMF]# useradd -s /bin/bash -d /home/stack -m stack
[root@controller3 AAVMF]# vim /etc/sudoers
# 在第100行后面增加,如下图所示:
stack	ALL=(ALL)	NOPASSWD: ALL

[root@controller3 AAVMF]# tar -zxf /root/devstack.tar.gz -C /home/stack/
[root@controller3 AAVMF]# chown -R stack:stack /home/stack/devstack/
4.3.5 修改devstack脚本和相关配置

把文件中的IP地址换成当前主机的,下面的173.9.1.17记得换成你自己的主机IP

[root@controller3 AAVMF]# su - stack
[stack@controller3 ~]$ cd devstack/
[stack@controller3 devstack]$ sed -i '/^HOST_IP/s/10.1.122.236/173.9.1.17/' local.conf
[stack@controller3 devstack]$ sed -i 's/IMAGE_URLS/\n&/' local.conf
4.3.6 修改安装的openstack版本

如果是解压devstack.tar.gz包的话,里面的文件是修改过的,不用做这步。配置比较多,建议直接用解压包能简单省事一些

[stack@controller3 ~]$ git clone http://git.trystack.cn/openstack/devstack.git
[stack@controller3 ~]$ cd devstack
[stack@controller3 devstack]$ git checkout 8c93049220bd3551b53513426c5a7bfdb7bac1d9
[stack@controller3 devstack]$ sed -i '/^HOST_IP/s/10.1.122.236/173.9.1.17/' local.conf
[stack@controller3 devstack]$ sed -i 's/IMAGE_URLS/\n&/' local.conf
[stack@controller3 devstack]$ vim stackrc
# 将第19行、22行、27行的master改成系统准备使用的openstack版本
TARGET_BRANCH=stable/train

TRAILING_TARGET_BRANCH=stable/train

BRANCHLESS_TARGET_BRANCH=stable/train

[stack@controller3 devstack]$ sed -i '/\# Git Functions/i\\function is_kylin {\n\tif [[ -z \"\$os_VENDOR\" ]]; then\n\tGetOSVersion\n\tfi\n\n\t[[ \"\$os_VENDOR\" =~ (Kylin) ]]\n}\n' functions-common
[stack@controller1 devstack]$ sed -i 's/elif is_fedora/elif is_fedora || is_kylin/g' functions-common
[stack@controller3 devstack]$ sed -i '/DISTRO=\"f\$os_RELEASE\"/a\ \ \ \ elif [[ \"\$os_VENDOR\" =~ (Kylin) ]]; then\n\tDISTRO=\"Kylin-\$os_RELEASE\"' functions-common
[stack@controller1 devstack]$ grep -nir "is_fedora" | grep -v functions-common | cut -d ":" -f1 | sort | uniq | for line in `xargs`;do sed -i 's/is_fedora/is_fedora || is_kylin/g' $line;done
[stack@controller3 devstack]$ vim functions-common
# 修改GetOSVersion函数,将第350行注释掉,第352行~354行改成固定系统版本
function GetOSVersion {
    # We only support distros that provide a sane lsb_release
    #_ensure_lsb_release

    os_RELEASE=V10
    os_CODENAME=juniper
    os_VENDOR=Kylin

[stack@controller3 devstack]$ vim lib/nova_plugins/functions-libvirt
# 将第88行和89行注释掉,跳过libvirt安装,提高安装速度
       # pip_uninstall libvirt-python
       # pip_install_gr libvirt-python

[stack@controller3 devstack]$ vim inc/python
# 将第138行的镜像源修改为国内的源,提高安装速度
    cmd_pip="$cmd_pip install -i https://mirrors.aliyun.com/pypi/simple"
    
……
# 默认安装glance组件,在第251行后面增加如下
    if [ $name == "glance_store" ];then
            enabled=0
    fi

[stack@controller3 devstack]$ vim lib/neutron_plugins/services/l3
# 在create_neutron_initial_network函数内增加登录用户
function create_neutron_initial_network {
    local project_id
    source openrc admin admin
    project_id=$(openstack project list | grep " demo " | get_field 1)
    die_if_not_set $LINENO project_id "Failure retrieving project_id for demo"

[stack@controller3 devstack]$ cd files/
[stack@controller3 files]$ wget https://mirrors.huaweicloud.com/etcd/v3.3.12/etcd-v3.3.12-linux-arm64.tar.gz
[stack@controller3 files]$ wget https://github.com/cirros-dev/cirros/releases/download/0.5.1/cirros-0.5.1-aarch64-disk.img

5、开始进行部署

5.1 执行自动部署脚本

[stack@controller3 devstack]$ FORCE=yes ./stack.sh

若部署过程中有libvirt相关报错,需在/opt/stack/requirements/upper-constraints.txt文件注释掉libvirt-python===5.7.0,若无请忽略这句话

上图为安装成功后的显示
Stack脚本执行结束后,请检查/etc/nova/nova.conf文件,查看virt_type是否为kvm,若为qemu需修改为kvm,并执行systemctl restart devstack@n-cpu

使用root权限开放端口,一般80也是默认开放的,可以不操作

[stack@controller3 devstack]$ exit
[root@controller3 AAVMF]# iptables -I INPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT
[root@controller3 AAVMF]# systemctl restart httpd

然后跳板机上可以访问http://ip地址/dashboard
输入用户名admin密码qwer1234即可进入管理面板

注意:新版本的devstack是用systemd来管理服务的,系统重启以后会自己拉起服务。不过重启之前需要将OpenStack服务所依赖的httpd服务和memcached服务设置为开机自启。若要手动拉起的话,你可先用systemctl list-units|grep devstack看一下服务名称,然后用systemctl把服务拉起来

[root@controller3 ~]# systemctl enable httpd
[root@controller3 ~]# systemctl enable memcached
[root@controller3 ~]# systemctl enable mysql
[root@controller3 ~]# systemctl list-units|grep devstack     # 查看devstack有哪些服务
[root@controller3 ~]# systemctl restart devstack@*     # 重启devstack的所有服务

5.2 软件运行的相关指令

要用stack身份运行如下命令或者使用root身份以绝对路径运行如下命令,设置全局变量后,就可以查询openstack各个子服务模块的状态了

[stack@controller3 devstack]$ source openrc admin admin
或者
[root@controller3 ~]# source /home/stack/devstack/openrc admin admin

获取镜像资源列表:openstack image list

获取网络资源列表:openstack network list

获取配置类型资源列表:openstack flavor list

查看openstack各子服务模块状态:

  • glance image-list
  • nova list - openstack user list
  • openstack endpoint list
  • openstack service list
  • neutron net-list
  • cinder list

启动一个实例:openstack server create --image cirros-0.5.1-aarch64-disk --flavor 1 vm1

6、devstack的卸载

如果后面改动配置文件导致devstack服务报错,或是部署成功后安装其他高可用服务导致某个单元服务起不来,报错又无法解决的,可以尝试卸载后重新安装的方式来解决。注意:删除的时候一定要谨慎操作哦

[root@controller3 ~]# systemctl stop mysqld
[root@controller3 ~]# rm -f /etc/my.cnf
[root@controller3 ~]# rm -rf /etc/my.cnf.d
[root@controller3 ~]# rm -rf /etc/my.cnf.rpmsave
[root@controller3 ~]# rm -rf /opt/stack/
[root@controller3 ~]# su - stack
[stack@controller3 ~]$ cd devstack
[stack@controller3 devstack]$ ./clean.sh
[stack@controller3 devstack]$ ./unstack.sh

7、麒麟官方适配包yum源地址

记录一下,以防后面需要用时找不到地址到处问人,对应的版本与yum源地址

Q.E.D.