搭建OpenStack实验环境

  1. 部署拓扑
  2. 物理资源需求
  3. 网络规划
  4. 部署DevStack
    1. 基于Ubuntu 14.04 LTS安装
    2. 基于Ubuntu 22.04 LTS安装All-in-One

部署拓扑

首先来设计一下OpenStack的部署拓扑。
OpenStack是一个分布式系统,由若干不同功能的节点(Node)组成:

  • 控制节点(Controller Node):管理OpenStack,其上运行的服务有KeystoneGlanceHorizon以及NovaNeutron中管理相关的组件。控制节点也运行支持OpenStack的服务,例如SQL数据库(通常是MySQL)、消息队列(通常是RabbitMQ)和网络时间服务NTP。
  • 网络节点(Network Node):其上运行的服务为Neutron,为OpenStack提供L2和L3网络,包括虚拟机网络、DHCP、路由、NAT等。
  • 存储节点(Storage Node):提供块存储(Cinder)或对象存储(Swift)服务。
  • 计算节点(Compute Node):其上运行Hypervisor(默认使用KVM),同时运行Neutron服务的agent,为虚拟机提供网络支持。

这几类节点是从功能上进行的逻辑划分,在实际部署时可以根据需求灵活配置,比如:

  • 在大规模OpenStack生产环境中,每类节点都分别部署在若干台物理服务器上,各司其职并互相协作。这样的环境具备很好的性能、伸缩性和高可用性。
  • 在最小的实验环境中,可以将4类节点部署到一个物理的甚至是虚拟服务器上。麻雀虽小五脏俱全,通常也称为All-in-One部署。

在本实验环境中,为了使得拓扑简洁同时功能完备,用两个虚拟机:

  • devstack-controller:控制节点 + 网络节点 + 块存储节点 + 计算节点
  • devstack-compute:计算节点

物理资源需求

物理资源中,CPU和内存配置如下图,供参考。

如果是在PC机上创建虚机部署,资源可能达不到这个要求,可以适当调整。

网络规划

网络部署方面,规划了三个网络,如下图所示。

Management Network:用于OpenStack内部管理用,比如各服务之间通信,这里使用eth0
VM(Tenant)Network:OpenStack部署的虚拟机所使用的网络。OpenStack支持多租户,虚机是放在Tenant下的,所以叫Tenant Network,这里使用eth1
External Network:一般来说,Tenant Network是内部私有网络,只用于VM之间通信,与其他非VM网络是隔离的,这里规划了一个外部网络(External Network),通过devstack-controller的eth2连接。

Neutron通过L3服务让VM能够访问到External Network。
对于公有云,External Network一般指的是Internet;对于企业私有云,External Network则可以是lntranet中的某个网络。

部署DevStack

按照以下步骤部署DevStack。

基于Ubuntu 14.04 LTS安装

使用devstack的分支stable/newton安装时,报错:

2023-12-05 14:00:32.799 | Error on exit
2023-12-05 14:00:32.800 | ./stack.sh: line 508: generate-subunit: command not found

在通过sudo apt install os-testr安装os-testr解决缺少generate-subunit命令问题时又各种依赖包报错,遂放弃,改为基于Ubuntu 22.04 LTS All-in-One 方式安装。

1.创建虚拟机

按照物理资源需求创建devstack-controller和devstak-compute虚拟机。

2.安装操作系统

安装Ubuntu14.04,并配置eth0的IP:

  • devstack-controller:192.168.104.10
  • devstak-compute:192.168.104.11
# 在devstack-controller上给eth0配置IP地址
$ ifconfig eth0 192.168.104.10 netmask 255.255.255.0 up
$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:ad:92:29  
          inet addr:192.168.104.10  Bcast:192.168.104.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fead:9229/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:902 errors:0 dropped:0 overruns:0 frame:0
          TX packets:617 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:113157 (113.1 KB)  TX bytes:60955 (60.9 KB)
# 在devstack-compute上给eth0配置IP地址
$ ifconfig eth0 192.168.104.11 netmask 255.255.255.0 up
$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:04:dc:e6  
          inet addr:192.168.104.11  Bcast:192.168.104.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe04:dce6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:297 errors:0 dropped:0 overruns:0 frame:0
          TX packets:165 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:35963 (35.9 KB)  TX bytes:25167 (25.1 KB)

3.下载代码

下载devstack代码,并切换到stable/newton分支。

$ apt-get install git -y
$ git clone https://git.openstack.org/openstack-dev/devstack -b stable/newton

4.配置stack用户

创建stack用户:

$ bash devstack/tools/create-stack-user.sh 
Creating a group called stack
Creating a user called stack
Giving stack user passwordless sudo privileges

为方便起见,将devstack目录放到/opt/stack目录下,并设置权限。

$ mv devstack /opt/stack
$ chown -R stack:stack /opt/stack/devstack

切换到stack用户:

$ su - stack
$ cd devstack
$ pwd
/opt/stack/devstack

5.编写运行配置文件

/opt/stack/devstack目录下,创建local.conf
(1)devstack-controller

[[local|localrc]]

MULTI_HOST=true
HOST_IP=192.168.104.10 # management & api network
LOGFILE=/opt/stack/logs/stack.sh.log

# Credentials
ADMIN_PASSWORD=admin
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
SERVICE_TOKEN=abcdefghijklmnopqrstuvwxyz

# enable neutron—ml2—vlan
disable_service n-net
enable_service q-svc,q-agt,q-dhcp,q-l3,q-meta,neutron,q-lbaas,q-fwaas,q-vpn
Q_AGENT=linuxbridge
ENABLE_TENANT_VLANS=True
TENANT_VLAN_RANGE=3001:4000
PHYSICAL_NETWORK=default
LOG_COLOR=False
LOGDIR=$DEST/logs
SCREEN_LOGDIR=$LOGDIR/screen

(2)devstack-compute

[[local|localrc]]

MULTI_HOST=true
HOST_IP=192.168.104.11 # management & api network

# Credentials
ADMIN_PASSWORD=admin
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
SERVICE_TOKEN=abcdefghijklmnopqrstuvwxyz

# Service information
SERVICE_HOST=192.168.104.10 
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
GLANCE_HOSTPORT=$SERVICE_HOST:9292 
Q_HOST=$SERVICE_HOST
KEYSTONE_AUTH_HOST=$SERVICE_HOST
KEYSTONE_SERVICE_HOST=$SERVICE_HOST
CEILOMETER_BACKEND=mongodb
DATABASE_TYPE=mysql
ENABLED_SERVICES=n-cpu,q-agt,neutron
Q_AGENT=linuxbridge
ENABLE_TENANT_VLANS=True
TENANT_VLAN_RANGE=3001:4000
PHYSICAL_NETWORK=default

# vnc config
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html" 
VNCSERVER_LISTEN=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
LOG_COLOR=False 
LOGDIR=$DEST/logs 
SCREEN_LOGDIR=$LOGDIR/screen

另外,为了加快安装速度,还可以加上下面的配置使用国内的devstack镜像站点。

# use TryStack git mirror
GIT_BASE=http://git.trystack.cn
NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git

6.开始部署

分别在devstack-controller和devstak-compute上执行命令。

$ ./stack.sh

会输出各项操作的结果。
日志会写到stack.sh.log文件。
整个过程需要连接,网速慢可能会花较长时间,成功后最后会打印出相关信息。
devstack-controller上的输出:

This is your host IP address: 192.168.104.10
This is your Host IPv6 address: ::1
Horizon is now available at http://192.168.104.10/
Keystone is serving at http://192.168.104.10:5000/
The default users are: admin and demo
The password: admin

devstack-compute上的输出:

This is your host IP address: 192.168.104.11
This is your host IPv6 address: ::1
stack.sh completeed in 256 seconds.

下面验证OpenStack己经正常运行。
通过浏览器访问http://192.168.104.10 (devstack-controller的IP),使用admin/admin登录。

基于Ubuntu 22.04 LTS安装All-in-One

所谓”All-in-One”,就是将OpenStack的所有服务都安装在一台主机上。

如下安装基于一个虚拟服务器实现,安装前的准备工作:
1.创建一台虚拟机(例如:基于VMware Workstation创建虚拟机),并设置处理器开启虚拟化支持
2.磁盘空间使用40G
3.网卡模式设置为NAT,确保可以连接外网
4.安装操作系统:Ubuntu 22.04 LTS server版
5.设置apt国内镜像源,如下设置aliyun镜像源(这一步可以在安装系统的时候就设置好):

$ cat /etc/apt/source.list
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

6.设置pip国内镜像源,解决下载软件包超时问题,如下全局设置pip使用豆瓣源:

$ ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple
trusted-host = mirrors.aliyun.com
timeout = 120

安装kvm:

$ sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils

如下安装步骤均是参照官方文档执行。

添加用户:

$ sudo useradd -s /bin/bash -d /opt/stack -m stack

设置目录权限:

$ sudo chmod +x /opt/stack

设置执行sudo时免密码:

$ echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack

切换到stack用户:

$ sudo -u stack -i

下载devstack代码:

$ git clone https://opendev.org/openstack/devstack
$ cd devstack

在devstack目录下添加配置文件local.conf,内容如下:

[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

# 添加如下镜像是为了在安装过程中下载openstack组件代码时加速
GIT_BASE=http://git.trystack.cn
NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git

执行安装:

$ ./stack.sh

成功安装完毕后,显示如下信息:

This is your host IP address: 192.168.3.155
This is your host IPv6 address: ::1
Horizon is now available at http://192.168.3.155/dashboard
Keystone is serving at http://192.168.3.155/identity/
The default users are: admin and demo
The password: secret

Services are running under systemd unit files.
For more information see: 
https://docs.openstack.org/devstack/latest/systemd.html

DevStack Version: 2024.1
Change: 
OS Version: Ubuntu 22.04 jammy

2023-12-07 15:22:19.189 | stack.sh completed in 794 seconds.

通过浏览器访问http://192.168.3.155/dashboard,使用admin/secret登录。

注:
1.中途需要从github下载etc包,如果下载失败,可以手动下载了放在路径:/opt/stack/devstack/files/,继续执行脚本:./stack.sh
2.下载cirros镜像文件也可能会超时失败,手动下载后放在/opt/stack/devstack/files路径即可后继续执行脚本:./stack.sh
3.遇到报错:

Error while executing command: HttpException: 503, Unable to create the network. No tenant network is available for allocation.

参考:devstack安装报错解决方法:Failure creating NET_ID for xxxxx (ml2+ovs网络模式),在local.conf中添加配置:

Q_PLUGIN=ml2
ENABLE_TENANT_VLANS=True
ML2_VLAN_RANGES=physnet1:1000:2000

先执行./clean.sh,继续执行./stack.sh

【参考】
Install And Set Up KVM On Ubuntu 20.04 Focal Fossa Linux
try devstack
安装openstack—all-in-one
Ubuntu 20使用devstack快速安装openstack最新版
DevStack
如何重启DevStack所有服务
停止DevStack


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,在下面评论区告诉我^_^^_^