OpenStack-Stein版搭建-1控制1计算
版本选择
Open stack的版本是从A-Z之后的版本似乎是通过年月日来命名的,目前最新版本为2025.1-dev
2024.2的版本,从U版开始就得用CentOS8部署了,具体原因没考究,大概率是因为内核的原因,本篇是S版本的教程,具体参考
组件选择
本文只装最基础的组件,Keystone、Glance、Placement、Nova、Neutron、Horizon
基础环境配置
网络环境配置
我这里采用两台主机构建基础的openstack,具体可参考文档: https://docs.openstack.org/install-guide/environment-networking-controller.html
| 角色 | 系统 | 配置 |
|---|---|---|
| controller | CentOS 7.9 | 4G2H |
| compute1 | CentOS7.9 | 1G1H |
| 所有主机都配置一下hosts文件,有DNS服务则更好,主机名请跟随hosts文件。 |
# controller
# compute1
时间同步
OpenStack所有服务之前是使用Token进行验证的,token都是有有效期的,如果时间对不上则可能会出现token刚分配好就过期了的问题,为了避免时间上不一样的问题,这里使用NTP来进行时间同步。这里使用controller(控制节点)来做NTP服务主机。 在每台主机中执行下面命令来设置时区和安装NTP服务
下面编辑配置文件/etc/chrony.conf,内容主要参考下面内容
|
重启服务
其他openstack主机参考下面配置
|
重启服务
查看状态
# controller 主机
===============================================================================
# compute1 主机
===============================================================================
时间已经同步。
基础软件包
我这里是安装s版本的openstack,参考文档地址: https://docs.openstack.org/install-guide/environment-packages-rdo.html 所有主机都执行下面命令,用来安装openstack对应的yum仓库。
在24年12月28日,他自己的这些源有一部分是不可以用的,通过下面命令进行替换阿里的镜像站
安装openstack的客户端管理工具
数据库支持
在控制节点安装下面工具,文档参考地址: https://docs.openstack.org/install-guide/environment-sql-database-rdo.html
根据配置文件,修改一下数据库的配置,编辑文件/etc/my.cnf.d/openstack.cnf,添加下面内容
[mysqld]
bind-address = 10.0.0.11
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
启动服务
之后执行命令mysql_secure_installation安全初始化一下数据库
我执行的是,并且它们分别代表的含义是
- 登录的密码 回车(刚装的都是没密码的,所以直接回车)
- 是否设置root密码 n(不设置,这个等后面设置)
- 是否移除匿名用户 Y(移除)
- 是否禁用root远程登陆 Y(禁用)
- 是否移除test数据库 Y(移除)
- 是否重载权限表 Y(重载)
消息队列支持
open stack支持多种的消息队列,建议使用rabbitmq,这里也不用其他的了。具体可以参考文档: https://docs.openstack.org/install-guide/environment-messaging-rdo.html 在控制节点执行下面命令安装
# 这一步是创建一个rabbit的用户,并且设置密码
# 授权新建的用户权限
缓存支持
在控制节点为openstack提供缓存支持,具体可参考文档: https://docs.openstack.org/install-guide/environment-memcached-rdo.html 执行下面命令
紧接着修改一下他的配置文件`/etc/sysconfig/memcached
OPTIONS="-l 127.0.0.1,::1"
# 把上面内容替换成下面的内容
OPTIONS="-l 127.0.0.1,::1,controller"
替换的作用主要是为了公开服务,默认只是监听本地的127.0.0.1,外部是无法访问的,controller则是自己的主机的域名,指向的是自己在当前网络环境的ip。
执行下面命令启动服务
ETCD支持
本架构不需要ETCD的支持,本文安装的组件和ETCD都没关联。其他组件可能用到ETCD,在进阶的安装情况下得注意这个基础环境。
组件安装
参考文档: https://docs.openstack.org/keystone/stein/install/ 关于文档要注意的是,默认文档打开是没有老版本文档的直链的,需要在stein替换成自己想要装的版本。
Keystone - 认证服务
参考文档: https://docs.openstack.org/keystone/stein/install/keystone-install-rdo.html 在控制节点执行下面内容,用来授权Keystone服务在数据库中的支持
; ) ; ) ; ) ;
)
安装相关的包
修改配置文件/etc/keystone/keystone.conf,再修改之前需要注意的是,文件中有很多很多的注释,还全都是英文的,而且里面有很多Keystone不同类型的配置,直接修改并不好,这里可以通过执行下面命令来简化原本的配置文件,之后在进行修改
# 备份
# 去除空行和注释
正常来说,配置文件中所有的配置段的配置都是空的,然后现在添加下面配置
mysql+
fernet
保存后去用keystone的身份去填充数据库
填充后可以使用下面命令去验证,正常的情况应该是会有好多表,如果啥都没有那应该是出问题了。
下面开始初始化 Fernet 密钥存储库,执行下面命令
初始化keystone,这里定义了一些基础信息,如果有修改请根据自己的环境修改。
下面开始配置一下Apache,编辑/etc/httpd/conf/httpd.conf配置ServerName为controller
ServerName controller
再把keystone的apache配置链接到apache的http.d中
启用服务
声明一下环境变量
使用此链接的命令之前请务必配置上面所描述的环境变量。关于创建基础域、项目、用户和角色,具体可以参考: https://docs.openstack.org/keystone/stein/install/keystone-users-rdo.html 声明客户端环境变量脚本,其他用户可以参考: https://docs.openstack.org/keystone/stein/install/keystone-openrc-rdo.html#using-the-scripts
这个脚本的作用就是用来执行客户端命令的,直接用命令去操控openstack的keystone的时候必须定义这些,保存到文件是为了下次更快的设置自己的用户,下次执行命令的时候只需要执行./admin-openrc即可。这里建议验证一下服务,执行命令openstack token issue查看是否有回显,如果报错则说明搭建过程有问题。
其他组件通用流程
除了Keystone,其他服务搭建的流程都遵循下面步骤
- 创库授权
- keystone创建账号
- keystone创建服务实体
- 安装服务软件包
- 修改服务的配置文件
- 同步数据库
- 启动服务
- 验证
Glance - 镜像服务
此服务安装在控制节点,参考文档地址: https://docs.openstack.org/glance/stein/install/ 创库授权,进入数据库节点执行下面命令
;
;
;
在keystone中创建账号和服务实体
# 加载环境
# 创建账号
# 如果在之前的项目创建中已经创建过service则下面这一条可以不需要执行。
# 给创建的用户授权,给一个admin的角色
# 创建glance的访问实体
# 为实体创建api访问入口
# 公共的
# 组件之间的
# 管理员的
下面在控制节点开始安装glance的软件包
下面开始修改配置
# 备份
# 去除空行和注释
编辑/etc/glance/glance-api.conf修改以下内容
# database 段中添加下面内容
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
# keystone_authtoken 段中添加下面内容
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS
# paste_deploy 段中添加下面内容
flavor = keystone
# glance_store 段中添加下面内容
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
编辑/etc/glance/glance-registry.conf修改以下内容
# database 段中添加下面内容
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
# keystone_authtoken 段中添加下面内容
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS
# paste_deploy 段中添加下面内容
flavor = keystone
以glance的身份填充数据库
启动服务
验证组件参考: https://docs.openstack.org/glance/stein/install/verify.html
Placemen - 计算安置服务
此服务安装在控制节点,文档参考地址: https://docs.openstack.org/placement/stein/install/ 先是授权,到数据库节点执行下面命令
;
;
;
在keystone中创建账号和服务实体
# 加载环境
# 创建用户
# 关联权限
# 创建实体
# 开放入口
安装软件包
下面开始修改配置
# 备份
# 去除空行和注释
编辑/etc/placement/placement.conf修改以下内容
# placement_database 段
# api 段
# keystone_authtoken 段
以placement的身份填充数据库
重启http服务
验证参考组件参考: https://docs.openstack.org/placement/stein/install/verify.html
Nova - 计算控制节点
此服务安装在控制节点,参考文档地址:
- https://docs.openstack.org/nova/stein/install/
- https://docs.openstack.org/nova/stein/install/controller-install-rdo.html 先是建库和授权,到数据库节点执行下面命令
;
;
;
;
;
;
;
;
;
在keystone中创建账号和服务实体
# 凭证环境
# 创建用户
# 关联权限
# 创建访问实例
安装软件包
关于三个包的作用
下面开始修改配置
# 备份
# 去除空行和注释
编辑配置/etc/nova/nova.conf,主要修改下面内容
根据对应段进行添加配置,其中需要注意的是
# ...
# ...
这段中,在老版本的环境中,网络还不是neutron组件来管的,是nova的一个,他为了兼容添加了use_neutron这个参数,需要打开
下面开始填充数据库
在执行过程中可能有一条会出现几条警告,那个无所谓别出现报错就行。
启动服务,启动服务的命令和官网文档的稍微不一样,这里移除了openstack-nova-consoleauth,这个服务在18.0.0 (Rocky)的时候就被遗弃了。
配置好之后验证好可以参考链接: https://docs.openstack.org/nova/stein/install/verify.html
按照本文的进度搭建好的service组件应该是只有两个
这是正常的,然后通过nova-status upgrade check去验证的时候会出现403的错误,这也是正常的,因为这是个bug,具体可参考文章: https://www.cnblogs.com/omgasw/p/12016839.html
解决方案是编辑/etc/httpd/conf.d/00-placement-api.conf,添加配置
<Directory <IfVersion >=
</IfVersion>
<IfVersion < 2
</IfVersion>
</Directory>
之后重启apache服务
即可再次尝试通过nova-status upgrade check去验证。
Nova - 计算节点
下面的操作是在计算节点中操作,文档参考: https://docs.openstack.org/nova/stein/install/compute-install-rdo.html 下面开始安装组件
下面开始修改配置
# 备份
# 去除空行和注释
编辑配置/etc/nova/nova.conf,主要修改下面内容
[DEFAULT]
my_ip = 10.0.0.31
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:RABBIT_PASS@controller
[api]
auth_strategy = keystone
[glance]
api_servers = http://controller:9292
[keystone_authtoken] auth_url = http://controller:5000/v3 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova
password = NOVA_PASS
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement] region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://controller:5000/v3 username = placement
password = PLACEMENT_PASS
[vnc] enabled = true server_listen = 0.0.0.0 server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
要注意的是my_ip这里需要改成自己的ip。
启动服务
然后验证参考链接: https://docs.openstack.org/nova/stein/install/compute-install-rdo.html#add-the-compute-node-to-the-cell-database 每次加计算节点的时候都需要在控制节点执行
这是用来发现主机的,如果不想手动去执行,则可以在nova的控制节点配置中添加这段配置
Neutron - 网络控制节点
参考文档如下
- https://docs.openstack.org/neutron/stein/install/install-rdo.html
- https://docs.openstack.org/neutron/stein/install/controller-install-rdo.html
- https://docs.openstack.org/neutron/stein/install/controller-install-option1-rdo.html 先在数据库节点去创建对应的库和授权
;
;
;
在keystone中创建账号和服务实体
开始安装对应包,openstack默认提供两种网络方案,一个是提供商网络还有一个是自建网络也可以看作为阿里的VPC,这里搭建采用提供商网络,相当于桥接网络。
下面开始修改配置
# 备份
# 去除空行和注释
开始配置/etc/neutron/neutron.conf
[DEFAULT] notify_nova_on_port_status_changes = true notify_nova_on_port_data_changes = true transport_url = rabbit://openstack:RABBIT_PASS@controller core_plugin = ml2 auth_strategy = keystone service_plugins =
[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
[nova]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
配置/etc/neutron/plugins/ml2/ml2_conf.ini,这个文件时ml2模块的配置文件
[ml2]
type_drivers = flat,vlan
tenant_network_types =
mechanism_drivers = linuxbridge
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider,net_vmnet1
[securitygroup]
enable_ipset = true
配置/etc/neutron/plugins/ml2/linuxbridge_agent.ini,这里是linuxbridge的配置
下面开始加载系统模块,
配置sysctl,编辑/etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
执行sysctl -p重载,在配置的时候需要注意physical_interface_mappings文档中需要自己指定网卡名字,这里我的网卡是ens33所以指定这个,还有就是关于vxlan,因为这里是采用提供商网络,相当于桥接,不需要vxlan直接关闭,后面配置自由网络还需要开启。
配置/etc/neutron/dhcp_agent.ini,这个文件是为了dhcp的配置
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
在配置过程中可能有些官网字段不存在,直接自己加上即可。
此时提供商网络已经配置好,现在需要开始配置neutron的其他选项,下面开始修改配置
# 备份
# 去除空行和注释
编辑/etc/neutron/metadata_agent.ini,修改内容如下
现在neutron已经配置完成,需要去nova控制节点去对接,编辑文件/etc/nova/nova.conf,修改下面内容
下面开始做启动neutron的工作
# 引用ml2模块
# 填充数据库
# 重启nova控制模块
# 启动neutron的提供商网络,不同的网络方式启动方式不通,请注意官方文档
验证配置参考: https://docs.openstack.org/neutron/stein/install/verify-option1.html
正常的验证效果应该是这样的

Neutron - 网络计算节点
参考文档: https://docs.openstack.org/neutron/stein/install/compute-install-rdo.html 安装组件
备份配置
# 备份
# 去除空行和注释
编辑配置/etc/neutron/neutron.conf主要修改内容如下
[DEFAULT] transport_url = rabbit://openstack:RABBIT_PASS@controller auth_strategy = keystone
[keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
下面配置ml2模块,编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini,主要内容和控制节点的一样,直接复制也行,主要内容如下
[linux_bridge]
physical_interface_mappings = provider:ens33
[vxlan]
enable_vxlan = false
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
下面开始加载系统模块,
配置sysctl,编辑/etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
执行sysctl -p重载
下面在计算节点的计算模块对接一下,编辑/etc/nova/nova.conf,主要修改内容如下
[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
重启计算节点的nova服务
启动计算节点的neutron模块
Horizon - 仪表盘服务
参考文档:
- https://docs.openstack.org/horizon/stein/install/
- https://docs.openstack.org/horizon/stein/install/install-rdo.html 这里把仪表盘安装在控制节点中,执行下面命令安装软件包
这里备份一下配置
编辑/etc/openstack-dashboard/local_settings,主要修改内容如下
# 设置主机名
OPENSTACK_HOST = "controller"
# 这里是设置允许访问的主机名,*代表全部
ALLOWED_HOSTS = ['*']
# 会话存储引擎指定
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
# 缓存配置
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'controller:11211',
}
}
# **Keystone** 服务的 URL
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
# 启用 Keystone 多域支持
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
# 定义 OpenStack 服务的 API 版本
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 3,
}
# 这是 Keystone 服务的配置项,指定默认的域名。
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
# 新增用户的默认角色(ROLE)
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
# Neutron 网络服务的设置
OPENSTACK_NEUTRON_NETWORK = {
...
'enable_router': False,
'enable_quotas': False,
'enable_distributed_router': False,
'enable_ha_router': False,
'enable_lb': False,
'enable_firewall': False,
'enable_vpn': False,
'enable_fip_topology_check': False,
}
# 设置时区
TIME_ZONE = "Asia/Shanghai"
之后再去编辑/etc/httpd/conf.d/openstack-dashboard.conf,添加下面内容
重启服务
访问http://10.0.0.11/dashboard
默认域default
用户名:admin
密码: ADMIN_PASS

简单使用
前言
参考文档:
- https://docs.openstack.org/install-guide/launch-instance.html
- https://docs.openstack.org/install-guide/launch-instance-networks-provider.html 这里的使用都是用命令行去创建的,自己也可以通过仪表盘去创建
创建网络
创建实例前,应该先创建一个网络,可以参考命令
参数具体含义如下
-
openstack network create:- 创建一个新的网络。
-
--share:- 使网络成为共享的网络,意味着其他租户(project)也可以使用该网络。
-
--external:- 标记该网络为外部网络,通常指该网络连接到物理网络或者外部互联网。这通常用于提供公网访问。
-
--provider-physical-network provider:- 指定物理网络名称为
provider。这个物理网络是指在网络拓扑中与 OpenStack 的虚拟网络连接的物理网络接口。
- 指定物理网络名称为
-
--provider-network-type flat:- 指定网络类型为
flat,表示不使用 VLAN 或者其他网络隔离机制,所有主机之间都在同一个网络中,通常用于简单的网络环境。
- 指定网络类型为
-
provider:- 这是创建的网络名称。在这个命令中,创建的网络名称是
provider,它是外部共享网络 其中provider是在neutron的ml2模块中指定的。
- 这是创建的网络名称。在这个命令中,创建的网络名称是
[ml2]
flat_networks = provider
之后开始创建子网,执行下面命令创建一个子网
注意替换上面相关的参数,这里我替换后的命令是
要注意的是,因为搭建的时候采用的是供应商网络,相当于直连,想要上网网段需要和虚机网络一样,网关使用虚机的网关。

创建规格
下面开始创建规格
创建一个id为0,cpu数量为1,内存为64,存储为1GB,名字为m1.nano的实例规格
创建SSH密钥对
# 创建密钥对
# 导入密钥对
安全组规则
给默认安全组放行icmp协议
放行SSH
添加安全组规则的原因是因为默认的安全组是一切都拒绝的。
创建主机
去网页中创建主机。成功运行即成功。
问题解决
启动引导卡在Booting from Hard Disk...
实例创建好之后进入控制台会出现一直卡在Booting from Hard Disk这一步,这个似乎是因为nova默认设置的主板型号和实际运行的不兼容
具体的解决办法是修改nova计算节点的配置文件/etc/nova/nova.conf,修改内容如下
# libvirt 段增加
[libvirt]
hw_machine_type=x86_64=pc-i440fx-rhel7.2.0
x86_64类型不多说,后面的这个内容是没有问题的型号,因为刚才创建了一台Test主机,可以看一下他的默认型号,他默认使7.6.
修改之后重启服务
重启服务之后重启实例(硬重启),此时就没问题了

账号是:cirros
密码:gocubsgo
供应商网络配置子网没有网络
要注意的是,因为搭建的时候采用的是供应商网络,相当于直连,想要上网网段需要和虚机网络一样,网关使用虚机的网关。使用其他的自定义的网络是不可以上网的。