注意: 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通其他节点的主机名,如下图:
关闭三个节点的防火墙及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
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
完成安装
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