环境搭建

按照官方手册 OpenStack Installation Guide 搭建环境

  • management network: 10.0.0.0/24
  • provider network:203.0.113.0/24

组件间的调用需要添加额外的安全策略,为了方(tou)便(lan),搭建实验环境前,关闭 CentOS 的防火墙和 SELinux 。

1
2
3
4
5
6
7
8
9
10
11
12
# 停止防火墙
systemctl stop firewalld.service

# 关闭开机启动
systemctl disable firewalld.service

# 临时关闭 SELinux
setenforce 0

# 编辑配置文件,关闭开机启动
vi /etc/selinux/config
# SELINUX=disabled

主机信息

所有主机均开启 ssh 连接,并安装和配置了 vim 。由于在校园网内搭建,因此需要自行架设网关,作为虚拟内网的 DHCP 服务器。另外,校园网需要登录才有互联网,我直接用 curl 了,当然可以写脚本让主机自动连接校园网。

主机名称 系统 IP 地址
controller CentOS 7.9.2009 (Core) ens192: 10.0.0.11
ens224: 留空
compute1 CentOS 7.9.2009 (Core) ens192: 10.0.0.31
ens224: 留空
block1 CentOS 7.9.2009 (Core) ens192: 10.0.0.41
object1 CentOS 7.9.2009 (Core) ens192: 10.0.0.51
object2 CentOS 7.9.2009 (Core) ens192: 10.0.0.52
gateway Ubuntu 20.04.1 LTS (Server) ens160: 10.0.0.99
ens224: 203.0.113.1

网络配置

网关配置

gateway 网关作为 provider 网络的网关和 DHCP 服务器。(不作为 management 网络的网关)

配置主机名称和网卡

1
2
3
4
5
6
7
8
9
10
11
12
13
# 设置主机名称
hostnamectl set-hostname gateway

# 修改网卡配置
vim /etc/netplan/00-installer-config.yaml
# network:
# ethernets:
# ens160:
# dhcp4: true
# ens224:
# addresses:
# - 203.0.113.1/24
# version: 2

配置流量转发

1
2
3
4
5
6
7
8
9
10
11
# 开启转发功能
vim /etc/sysctl.conf
# net.ipv4.ip_forward=1

# 添加规则
iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE
iptables -A FORWARD -i ens224 -o ens160 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i ens160 -o ens224 -j ACCEPT

# 持久保存
apt install iptables-persistent -y

查看 iptables 规则

配置域名解析 /etc/hosts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# gateway
10.0.0.99 gateway

# controller
10.0.0.11 controller

# compute1
10.0.0.31 compute1

# block1
10.0.0.41 block1

# object1
10.0.0.51 object1

# object2
10.0.0.52 object2

启用 DHCP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装
apt install isc-dhcp-server

# 编辑配置文件
vim /etc/default/isc-dhcp-server
# INTERFACES="ens224"

# 编辑配置文件,注释 option domain-name/nameserver
vim /etc/dhcp/dhcpd.conf
# subnet 203.0.113.0 netmask 255.255.255.0 {
# # specify default gateway
# option routers 203.0.113.1;
# # specify subnet-mask
# option subnet-mask 255.255.255.0;
# # specify the range of leased IP address
# range 203.0.113.20 203.0.113.250;
# }

# 启动 DHCP 服务
service isc-dhcp-server restart

其他主机配置

配置双网卡

编辑配置文件 /etc/sysconfig/network-scripts/ifcfg-ens192

1
ONBOOT=yes

编辑配置文件 /etc/sysconfig/network-scripts/ifcfg-ens224

1
2
BOOTPROTO=none
ONBOOT=yes

配置域名解析 /etc/hosts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# gateway
10.0.0.99 gateway

# controller
10.0.0.11 controller

# compute1
10.0.0.31 compute1

# block1
10.0.0.41 block1

# object1
10.0.0.51 object1

# object2
10.0.0.52 object2

配置路由

1
route add -net 203.0.113.0/24 gw 10.0.0.99

由于网关作为虚拟内网的 DHCP 服务器,因此要避免部署环境的主机从网关请求 ip 地址,注意配置语句包含 ;

1
2
3
4
5
6
# 编辑或创建配置文件
vi /etc/dhcp/dhclient.conf
# reject 10.0.0.99;

# 重启网络服务
systemctl restart network.service

网络时间协议(NTP)

这里使用 Controller 作为所有节点的 NTP 服务器

控制节点

1
2
3
4
5
6
7
8
9
10
11
# 安装
yum install chrony -y

# 配置
vim /etc/chrony.conf
# 修改配置
# allow 10.0.0.0/24

# 启用服务
systemctl enable chronyd.service
systemctl start chronyd.service

其他节点

1
2
3
4
5
6
7
8
9
10
11
12
13
# 安装
yum install chrony -y

# 编辑配置文件
vim /etc/chrony.conf
# 修改配置
# server controller iburst
# 注释配置(如果有)
#pool 2.debian.pool.ntp.org offline iburst

# 启用服务
systemctl enable chronyd.service
systemctl start chronyd.service

验证

1
2
3
4
5
# 查看 NTP 服务器源
chronyc sources

# 统计信息
chronyc tracking

OpenStack 包

所有节点 执行相同操作安装。

针对 openstack-rocky 添加阿里云镜像源

  • 直接添加(yum install centos-release-openstack-rocky)无法下载客户端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat << EOF >> /etc/yum.repos.d/openstack.repo

[openstack-rocky]
name=openstack-rocky
baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-rocky/
enabled=1
gpgcheck=0

[qume-kvm]
name=qemu-kvm
baseurl= https://mirrors.aliyun.com/centos/7/virt/x86_64/kvm-common/
enabled=1
gpgcheck=0

EOF

从镜像源安装

1
2
3
4
5
6
7
8
# 更新
yum upgrade -y

# 安装 OpenStack 客户端
yum install python-openstackclient -y

# 安装 openstack-selinux(CentOS 安装完毕后默认启用)
yum install openstack-selinux -y

SQL 数据库(MariaDB)

控制节点 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 安装
yum install mariadb mariadb-server python2-PyMySQL -y

# 创建配置文件
vim /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

# 启用服务
systemctl enable mariadb.service
systemctl start mariadb.service

# 设置数据库 root 账户,密码为 mariadb-123456
mysql_secure_installation
# Set root password? [Y/n] y
# Remove anonymous users? [Y/n] y
# Disallow root login remotely? [Y/n] n
# Remove test database and access to it? [Y/n] y
# Reload privilege tables now? [Y/n] y

消息队列(RabbitMQ)

控制节点 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装
yum install rabbitmq-server -y

# 启用服务
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service

# 添加 openstack 用户,密码为 rabbitmq
rabbitmqctl add_user openstack rabbitmq

# 修改密码
# rabbitmqctl change_password openstack rabbitmq-123456

# 配置 openstack 用户权限
rabbitmqctl set_permissions openstack ".*" ".*" ".*"

Memcached

控制节点 安装

后续安装网络服务(Neutron)时发现得禁用 ipv6 相关的功能,因此配置设置并不是官方提供的 OPTIONS="-l 127.0.0.1,::1,controller"

1
2
3
4
5
6
7
8
9
10
11
# 安装
yum install memcached python-memcached -y

# 编辑配置文件
vim /etc/sysconfig/memcached
# 修改配置
# OPTIONS="-l 127.0.0.1,controller"

# 启用服务
systemctl enable memcached.service
systemctl start memcached.service

Etcd

控制节点 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 安装
yum install etcd -y

# 编辑配置文件
vim /etc/etcd/etcd.conf
# 修改配置
# #[Member]
# ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
# ETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380"
# ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379"
# ETCD_NAME="controller"
# #[Clustering]
# ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380"
# ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"
# ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380"
# ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
# ETCD_INITIAL_CLUSTER_STATE="new"

# 启用服务
systemctl enable etcd
systemctl start etcd