注意: OpenStack社区不再支持此版本(Train),不会再为其提供更新,本文仅用于了解学习 OpenStack 项目。当前 OpenStack 支持的版本为 2023.2

一、节点

        大多数 OpenStack 环境中包含认证、镜像、计算和至少一个网络服务,还有仪表盘,仪表盘要求至少要有镜像服务,计算服务和网络服务。配置每个节点必须用有管理员权限的帐号。可以用 root用户或 sudo 工具来执行这些命令。

本文中使用的示例是最低配置,并且不适用于生产系统安装。它旨在提供最低限度的概念验证,以了解学习 OpenStack。

*从 Ussuri 版本开始,搭建 OpenStack 将需要使用 CentOS 8 或 RHEL 8。以前的 OpenStack 版本需要使用 CentOS 7 或 RHEL 7。本文使用 CentOS 7系统,所以搭建 OpenStackTrain版。

以下为最小需求支持环境,使用核心服务和几个 CirrOS 实例:

  • 控制节点: 1 处理器, 4 GB 内存, 及10 GB 存储
  • 计算节点: 1 处理器, 2 GB 内存, 及20 GB 存储

我的节点(CentOS 7,本文所有操作都是适用且仅适用于 CentOS 7):

  • 控制节点:Hostname:syl-ct;IP:192.168.214.10,1 处理器, 4 GB 内存, 及100 GB 存储
  • 计算节点:Hostname:syl-cm1;IP:192.168.214.11,1 处理器, 2 GB 内存, 及500 GB 存储
  • 计算节点:Hostname:syl-cm2;IP:192.168.214.12,1 处理器, 2 GB 内存, 及500 GB 存储

同时,需要在三个节点的hosts文件中添加三个节点的信息,使得三个节点可以ping通其他节点的主机名,如下图: 

openstack4j创建实例添加脚本 openstack 搭建_主机名

关闭三个节点的防火墙及selinux:

#关闭防火墙
systemctl stop firewalld.service 
#关闭防火墙开机自启
systemctl disable firewalld.service
#查看防火墙信息
systemctl status firewalld.service 

#查看selinux
getenforce 
#关闭selinux
setenforce 0
#永久关闭selinux
[root@syl-ct ~]# vim /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive                             #将此行改为permission            
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

二、网络时间协议(NTP)

控制节点

1、 安装软件包:

# yum install chrony -y

openstack4j创建实例添加脚本 openstack 搭建_数据库_02

 2、编辑 /etc/chrony.conf 文件

配置NTP服务器(可选):

        注解:控制节点默认跟公共服务器池同步时间。但是你也可以选择性配置其他服务器,比如你组织中提供的服务器。

#将(0.centos.pool.ntp.org)替换为自己的NTP服务器的主机名或者IP地址,配置支持设置多个 server 值
#我这里控制节点为 NTP服务器,不进行更改

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

允许客户端访问:

        将配置文件中的网络改为节点所在的网络,以允许其他节点可以连接到控制节点的 chrony 进程

# 此处位于文件的第26行附近,取消 allow 前面的注释,更改后面的网段
# Allow NTP client access from local network.
allow 192.168.214.0/24

3、启动 NTP 服务并将其配置为随系统启动

# systemctl enable chronyd.service
# systemctl start chronyd.service

其他节点

1、安装软件包:

# yum install chrony -y

2、编辑 /etc/chrony.conf 文件

        注释除 server 值外的所有内容,修改server地址。

#将 syl-ct 替换为自己的NTP服务器的主机名或者IP地址,配置支持设置多个 server 值

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server syl-ct iburst

3、启动 NTP 服务并将其配置为随系统启动:

# systemctl enable chronyd.service
# systemctl start chronyd.service

验证

1、控制节点

        在 Name/IP address 列应显示NTP服务器的主机名或者IP地址。

[root@syl-ct ~]# chronyc sources
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^+ time.cloudflare.com           3   9   377    42  -4322us[-4322us] +/-   94ms
^+ tock.ntp.infomaniak.ch        1   9   377   176  -3767us[-3954us] +/-  109ms
^* time.cloudflare.com           3   9   377   172  -4292us[-4479us] +/-   95ms
^+ ntp5.flashdance.cx            2   8   335    34  +2515us[+2515us] +/-  126ms

2、其他节点

        在 Name/IP address 列的内容应显示控制节点的主机名。

[root@syl-cm1 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^? syl-ct                        0   8     0     -     +0ns[   +0ns] +/-    0ns

三、OpenStack包

*这里描述的OpenStack软件包的设置需要在所有节点执行:控制器、计算和块存储节点。

启用OpenStack库

1、安装OpenStack包

        在Centos上,存储库提供了启用OpenStack存储库的RPM。默认情况下,CentOS包括存储库,因此您可以简单地安装该包以启用OpenStack存储库。

# yum install centos-release-openstack-train -y

openstack4j创建实例添加脚本 openstack 搭建_主机名_03

完成安装

1、升级所有节点上的软件包:

* 注意:如果升级过程包含新内核,请重启主机以激活它。


# yum upgrade -y


2、安装 OpenStack 客户端。


# yum install python-openstackclient -y


3、CentOS 默认启用 SELinux。安装软件包以自动管理 OpenStack 服务策略:


# yum install openstack-selinux -y



四、SQL 数据库

*大多数OpenStack服务使用SQL数据库来存储信息,数据库通常在 控制节点 上运行。

安装和配置 Mariadb 数据库

1、安装软件包:



# yum install mariadb mariadb-server python2-PyMySQL -y



2、创建配置文件

# vim /etc/my.cnf.d/openstack.cnf

3、编辑配置文件

        添加一个 [mysqld] ,并将 bind-address 设置为控制节点的IP 地址或者主机名,为允许其他节点通过管理网络进行访问数据库。同时添加用于启用相关选项和 UTF-8 的附加键:

[mysqld]
bind-address = syl-ct

default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

完成安装

1、启动数据库服务并将其配置为开机自启:

# systemctl enable mariadb.service
# systemctl start mariadb.service

2、通过运行脚本来保护数据库服务。

* 注:此处需要按照指示进行每一步设置(yes 或者 no),同时需要设置数据库root用户密码(本文所用数据库root密码为123

# mysql_secure_installation

注:建议所有MariaDB服务器在生产中使用本脚本的所有部分!请仔细阅读每一步!
为了登录MariaDB以确保其安全,我们需要root用户的当前密码。如果您刚刚安装了MariaDB,并且还没有设置根密码,则密码将为空,因此您只需在此处按enter键即可。

输入root用户的当前密码(enter for none):

OK,成功使用密码,继续。。

设置root密码可确保未经适当授权,任何人都无法登录MariaDB root用户。

是否设置root密码?[Y/N] y
新密码:  此处设置数据库密码
再次输入新密码: 

密码更新成功!正在重新加载特权表。。
成功

默认情况下,MariaDB安装有一个匿名用户,允许任何人登录MariaDB,而无需为他们创建用户帐户。这只是为了测试,并使安装更加顺利。您应该在迁移到生产环境之前将其删除。

删除匿名用户?[Y/N] y
成功

通常,只应允许root从“localhost”进行连接。这样可以确保有人无法从网络中猜到根密码。

是否禁止root远程登录?[Y/N] y

成功

默认情况下,MariaDB附带了一个名为“test”的数据库,任何人都可以访问。这也仅用于测试,在进入生产环境之前应将其删除。

是否删除测试数据库并访问它?[Y/N] y
-正在删除测试数据库。。
成功
-正在删除对测试数据库的权限。。
成功


重新加载特权表将确保迄今为止所做的所有更改立即生效

是否立即重新加载特权表?[Y/N] y

成功

正在清理。。。


全部完成!如果您已经完成了上述所有步骤,您的MariaDB安装现在应该是安全的。
感谢您使用MariaDB!

五、消息队列

        OpenStack 使用消息队列来协调操作和服务之间的状态信息。消息队列服务通常在控制节点上运行。OpenStack 支持多个消息队列服务包括 RabbitMQ、Qpid 和 ZeroMQ, 但是,大多数打包 OpenStack 的发行版都支持特定的消息队列服务。本文使用 RabbitMQ 消息队列服务,因为大多数发行版都支持它。

安装和配置

* 此处消息队列在控制节点上运行

1、安装软件包:

# yum install rabbitmq-server -y

2、启动消息队列服务并将其设置开机自启:

# systemctl enable rabbitmq-server.service
# systemctl start rabbitmq-server.service

3、添加用户:openstack

* openstack为用户名,123为密码(可以改为自己的密码)

[root@syl-ct ~]# rabbitmqctl add_user openstack 123
Creating user "openstack"
[root@syl-ct ~]#

4、允许用户配置、写入和读取访问权限:openstack



[root@syl-ct ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"
[root@syl-ct ~]#



六、Memcached

        OpenStack认证服务的身份验证机制使用Memcached来缓存令牌。Memcached服务通常在控制节点上运行。在生产中部署时,建议启用防火墙、身份验证和加密的组合来确保其安全。

安装和配置

1、安装软件包:

# yum install memcached python-memcached -y

2、编辑配置文件:/etc/sysconfig/memcached

[root@syl-ct ~]# vim /etc/sysconfig/memcached 

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1,::1,syl-ct"   #仅在此行添加控制节点的主机名或IP

完成安装

1、启动消息队列服务并将其设置开机自启:

# systemctl enable memcached.service
# systemctl start memcached.service

七、Etcd

        OpenStack 服务可以使用 Etcd,一个分布式的可靠键值存储。 用于分布式密钥锁定、存储配置、跟踪服务活性等场景。

安装和配置组件

* etcd 服务在控制节点上运行。

1、安装软件包:



# yum install etcd -y



2、编辑配置文件:/etc/etcd/etcd.conf

        将 localhost 替换为控制节点的主机名或 IP 地址 ,以允许其他节点通过管理网络进行访问:

* 如下,在使用 IP 的地方只能使用 IP,使用主机名的地方可以使用 主机名 或 IP 

#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.214.10:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.214.10:2379"
ETCD_NAME="syl-ct"          # 此处替换为控制节点主机名
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://syl-ct:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://syl-ct:2379"
ETCD_INITIAL_CLUSTER="syl-ct=http://syl-ct:2380"  # 此处格式为 主机名=http://主机名:2380
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"

完成安装

1、启动消息队列服务并将其设置开机自启:

# systemctl enable etcd
# systemctl start etcd

到此,OpenStack 所需环境配置完成