通过 Devstack 多节点安装 OpenStack

宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述通过 Devstack 多节点安装 OpenStack相关的知识,希望能为你提供帮助。
前言本次通过在 VMware Workstation 上创建虚拟机完成实验部署
软件版本
OpenStack 版本:ussuri
宿主操作系统:Ubuntu 18.04.2 Desktop
VMware Workstation:15.5.2 build-15785246
一、部署规划 1.1 前置知识
OpenStack 是一个分布式系统,由若干节点(Node)组成
控制节点管理 OpenStack,其上运行的服务有 Keystone、Glance、Horizon 以及 Nova、Neutron 中和管理相关的组件;其上也运行支持 OpenStack 的服务,例如 SQL 数据库(通常是 mysql)、消息队列(通常是 RabbitMQ)和网络时间服务(NTP)。
网络节点其上运行 Neutron 为 OpenStack 提供 L2 和 L3 网络,包括虚拟机网络、DHCP、路由、NAT等。
存储节点提供块存储(Cinder)或对象存储(Swift)服务。
计算节点其上运行 Hypervisor(默认使用 KVM),同时运行 Neutron 服务的 Agent,为虚拟机提供网络支持。
1.2 节点规划
这几类节点是从功能上进行的逻辑划分,在实际部署时可以根据需求进行灵活配置,本次实验我们使用两个虚拟节点:
OpenStack-controller:控制节点+网络节点+存储节点+计算节点
openStack-compute:计算节点

通过 Devstack 多节点安装 OpenStack

文章图片

1.3 资源规划
资源配置参考如图,如果是在自己的 PC 机上创建虚拟机部署,资源可能无法满足,可以适当调整。
通过 Devstack 多节点安装 OpenStack

文章图片

1.4 网络规划
网络拓扑
通过 Devstack 多节点安装 OpenStack

文章图片

  • Management Network:用于 OpenStack 内部管理,比如各个服务之间通信;
  • VM(Tenant) Network:OpenStack 部署的虚拟机所使用的网络;
  • External Network:外部网络,Neutron 通过 L3 服务让 VM 能够访问到 External Network。
网络设置
  • 网关:192.168.10.1
  • 物理节点:192.168.10.11-192.168.10.99
  • 浮动IP:192.168.10.128-192.168.10.254
二、部署 DevStack 2.1 创建虚拟机网络
在 VMware Workstation 上创建三个网络:VMnet0、VMnet1、VMnet8
通过 Devstack 多节点安装 OpenStack

文章图片

  • VMnet0:作为 External Network
  • VMnet1:作为 VM(Tenant) Network
  • VMnet8:作为 Management Network
2.2 创建虚拟机
【通过 Devstack 多节点安装 OpenStack】根据物理资源需求创建 OpenStack-controller 和 OpenStack-compute 两台虚拟机(此处省略)
2.3 安装并配置操作系统
安装 Ubuntu 18.04.2 Desktop(此处省略),切换到 root 用户完成基本配置并配置 eth0 的 IP 地址和 DNS 地址
2.3.1 配置 IP 地址和 DNS 地址编辑网卡配置文件vi /etc/network/interfaces
OpenStack-controller
auto eth0 iface eth0 inet static address 192.168.10.11 netmask 255.255.255.0 gateway 192.168.10.1

OpenStack-compute
auto eth0 iface eth0 inet static address 192.168.10.21 netmask 255.255.255.0 gateway 192.168.10.1

将 DNS 地址写入配置文件
root@localhost:~# echo "DNS=114.114.114.114" > > /etc/systemd/resolved.conf

2.3.2 修改主机名OpenStack-controller
将主机名写入 hostname 文件
root@localhost:~# echo "controller01" > /etc/hostname

编辑 hosts 文件vi /etc/hosts,末尾加入如下配置
root@localhost:~# echo "192.168.10.11 controller01" > > /etc/hosts root@localhost:~# echo "192.168.10.21 compute01" > > /etc/hosts

OpenStack-compute
将主机名写入 hostname 文件
root@localhost:~# echo "compute01" > /etc/hostname

编辑 hosts 文件vi /etc/hosts,末尾加入如下配置
root@localhost:~# echo "192.168.10.11 controller01" > > /etc/hosts root@localhost:~# echo "192.168.10.21 compute01" > > /etc/hosts

2.3.3 重启两台虚拟机也可以只重启相关的网络服务
root@localhost:~# reboot

2.3.4 修改软件源2.3.4 到 2.3.8 步骤,OpenStack-controller 和 OpenStack-compute 节点都需要配置,此处仅以 OpenStack-controller 节点为例配置
备份配置文件
root@controller01:~# cp -a /etc/apt/sources.list{,.bak}

编辑 sources.list 文件vi /etc/apt/sources.list,将原来的源地址,替换成阿里的源地址(https://developer.aliyun.com/mirror/ubuntu)
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

更新软件索引并更新软件
root@controller01:~# apt-get update root@controller01:~# apt-get upgrade

2.3.5 安装基本软件和服务
root@controller01:~# apt-get install -y openssh-server vim net-tools bash-completion lrzsz unzip git wget ntpdate

2.3.6 配置 ssh 服务编辑配置文件,允许 root 用户使用密码 ssh 登陆
root@controller01:~# echo "PermitRootLogin yes" > > /etc/ssh/sshd_config root@controller01:~# echo "PasswordAuthentication yes" > > /etc/ssh/sshd_config

重启 ssh 服务并设置开机自启动
root@controller01:~# systemctl restart sshd.service root@controller01:~# systemctl enable ssh.service

2.3.7 设定时区
root@controller01:~# dpkg-reconfigure tzdata

选择Asia--> Shanghai--> OK
root@controller01:~# ntpdate cn.pool.ntp.org//与网络服务器同步时间 root@controller01:~# date//查看时间是否同步

2.3.8 更换 pip 源
root@controller01:~# mkdir .pip root@controller01:~# vim .pip/pip.conf

写入如下内容
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn

2.4 部署 Devstack
2.4.1 使用 git 下载 Devstack下载的为 ussuri 版本
root@controller01:~# git clone https://github.com/openstack/devstack.git -b stable/ussuri

2.4.2 创建 stack 用户
root@controller01:~# devstack/tools/create-stack-user.sh


root@controller01:~# useradd -s /bin/bash -d /opt/stack -m stack root@controller01:~# echo "stack ALL=(ALL) NOPASSWD: ALL" > > /etc/sudoers

2.4.3 将 Devstack 复制到 /ope/stack 目录
root@controller01:~# mv devstack /opt/stack

2.4.4 设置权限
root@controller01:~# chown -R stack:stack /opt/stack/devstack root@controller01:~# chmod -R 777 /opt/stack/devstack

2.4.5 切换到 stack 用户
root@controller01:~# su - stack

2.4.6 以 stack 用户身份更换 pip 源
stack@controller01:~$ sudo mkdir .pip stack@controller01:~$ sudo vim .pip/pip.conf

写入如下内容
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn

2.4.7 配置 OpenStack-controller进入到 devstack 目录 cd /opt/stack/devstack,创建 local.conf 文件 vim local.conf 配置如下内容
[[local|localrc]] # 根据实际情况配置主机 IP HOST_IP=192.168.10.11 # 根据实际情况内网 IP FIXED_RANGE=10.1.1.0/24 # 设置浮动 IP FLOATING_RANGE=192.168.10.128/25 LOGFILE=/opt/stack/logs/stack.sh.log ADMIN_PASSWORD=labstack DATABASE_PASSWORD=supersecret RABBIT_PASSWORD=supersecret SERVICE_PASSWORD=supersecret

多节点配置中,一般保留私网地址前 10 个,创建 local.sh 文件vim local.sh,使其在 stack.sh 运行后运行
for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 10.1.1.$i; done

2.4.8 启动安装 OpenStack-controller
stack@controller01:~$ ./stack.sh

2.4.9 配置 OpenStack-compute进入到 devstack 目录 cd /opt/stack/devstack,创建 local.conf 文件 vim local.conf 配置如下内容
[[local|localrc]] # 根据实际情况配置主机 IP HOST_IP=192.168.10.21 # 根据实际情况内网 IP FIXED_RANGE=10.1.1.0/24 # 设置浮动 IP FLOATING_RANGE=192.168.10.128/25 LOGFILE=/opt/stack/logs/stack.sh.log ADMIN_PASSWORD=labstack DATABASE_PASSWORD=supersecret RABBIT_PASSWORD=supersecret SERVICE_PASSWORD=supersecret DATABASE_TYPE=mysql # 根据实际情况填写控制节点 IP SERVICE_HOST=192.168.10.11 MYSQL_HOST=$SERVICE_HOST RABBIT_HOST=$SERVICE_HOST GLANCE_HOSTPORT=$SERVICE_HOST:9292 ENABLED_SERVICES=n-cpu,q-agt,c-vol,placement-client NOVA_VNC_ENABLED=True NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_lite.html" VNCSERVER_LISTEN=$HOST_IP VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN

2.4.10 启动安装 OpenStack-compute
stack@compute01:~$ ./stack.sh

2.4.11 后续步骤从 Ocata 版本开始,Nova 需要部署一个 Cells v2。所以必须先将计算节点服务映射到单元 cell 然后才能使用。在每个计算节点部署后,轮询运行nova service-list --binary nova-compute验证计算节点是否出现在输出中,一旦显示计算节点服务,马上在控制节点运行脚本./tools/discover_hosts.sh将计算节点映射到 cell。
三、注意事项 3.1 git 软件包较慢问题
OpenStack 等相关软件包代码托管在 github.com 上,由于国内网络问题,下载会比较慢,如果出现这个问题,可以先将相关软件包下载下来。
3.1.1 下载 etcd,cirros切换到 files 目录cd /opt/stack/devstack/files,运行以下命令,下载软件包。可以使用其他方式下载后,放入到opt/stack/devstack/files目录。
root@controller01:~# wget -c https://github.com/coreos/etcd/releases/download/v3.3.12/etcd-v3.3.12-linux-amd64.tar.gz root@controller01:~# wget -c http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img root@controller01:~# wget -c https://github.com/coreos/etcd/releases/download/v3.1.10/etcd-v3.1.10-linux-amd64.tar.gz root@controller01:~# wget -c https://github.com/coreos/etcd/releases/download/v3.1.7/etcd-v3.1.7-linux-amd64.tar.gz root@controller01:~# wget -c https://bootstrap.pypa.io/get-pip.py

3.1.2 下载 OpenStack 组件使用 root 用户下载 OpenStack 组件,包括 horizon、glance、noVNC、swift、neutron、placement、tempest、cinder、keystone、nova、requirements 等。
root@controller01:~# git clone https://github.com/openstack/horizon.git -b stable/ussuri /home/stack/ussuri/horizon root@controller01:~# git clone https://github.com/openstack/glance.git -b stable/ussuri /home/stack/ussuri/glance root@controller01:~# git clone https://github.com/openstack/swift.git -b stable/ussuri /home/stack/ussuri/swift root@controller01:~# git clone https://github.com/openstack/neutron.git -b stable/ussuri /home/stack/ussuri/neutron root@controller01:~# git clone https://github.com/openstack/placement.git -b stable/ussuri /home/stack/ussuri/placement root@controller01:~# git clone https://github.com/openstack/tempest.git -b /home/stack/ussuri/temptest root@controller01:~# git clone https://github.com/openstack/cinder.git -b stable/ussuri /home/stack/ussuri/cinder root@controller01:~# git clone https://github.com/openstack/keystone.git -b stable/ussuri /home/stack/ussuri/keystone root@controller01:~# git clone https://github.com/openstack/nova.git -b stable/ussuri /home/stack/ussuri/nova root@controller01:~# git clone https://github.com/openstack/requirements.git -b stable/ussuri /home//stack/ussuri/requirements root@controller01:~# git clone https://github.com/novnc/noVNC.git -b stable/v0.6 /home/stack/ussuri/noVNC

3.1.3 将下载的软件包放入安装目录
root@controller01:~# cp -f/home/stack/ussri /opt/stack

更改权限
root@controller01:~# chown -R stack:stack /opt/stack root@controller01:~# sudo chmod -R 777 /opt/stack

3.2 其他问题
< !--后续慢慢补充--->
四、总结整个安装流程下载还比较流畅,主要是软件包需要从 github.com 上下载,网络条件不好,速度很慢。

    推荐阅读