部署拓扑
首先来设计一下OpenStack的部署拓扑。
OpenStack是一个分布式系统,由若干不同功能的节点(Node)组成:
- 控制节点(Controller Node):管理OpenStack,其上运行的服务有Keystone,Glance,Horizon以及Nova和Neutron中管理相关的组件。控制节点也运行支持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
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,在下面评论区告诉我^_^^_^