通过 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:计算节点

image-20210127203914892

1.3 资源规划

资源配置参考如图,如果是在自己的 PC 机上创建虚拟机部署,资源可能无法满足,可以适当调整。

image-20210128102850441

1.4 网络规划

网络拓扑

image-20210128104100491

  • 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

image-20210128110553144

  • VMnet0:作为 External Network
  • VMnet1:作为 VM(Tenant) Network
  • VMnet8:作为 Management Network

2.2 创建虚拟机

根据物理资源需求创建 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 multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb 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 = http://pypi.douban.com/simple/
trusted-host = pypi.douban.com

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 = http://pypi.douban.com/simple/
trusted-host = pypi.douban.com

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 上下载,网络条件不好,速度很慢。


THE END