本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。
在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。
OpenStack离线安装系列—0制作yum源
OpenStack离线安装系列—1控制节点-环境准备
OpenStack离线安装系列—2计算节点-环境准备
OpenStack离线安装系列—3控制节点-Keystone认证服务组件
OpenStack离线安装系列—4控制节点-Glance镜像服务组件
OpenStack离线安装系列—5控制节点-Placement服务组件
OpenStack离线安装系列—6.1控制节点-Nova计算服务组件
OpenStack离线安装系列—6.2计算节点-Nova计算服务组件
OpenStack离线安装系列—6.3控制节点-Nova计算服务组件
OpenStack离线安装系列—7.1控制节点-Neutron网络服务组件
OpenStack离线安装系列—7.2计算节点-Neutron网络服务组件
OpenStack离线安装系列—7.3控制节点-Neutron网络服务组件
OpenStack离线安装系列—8.控制节点-Horizon服务组件
OpenStack离线安装系列—9.启动一个实例
未完待续。。。。。。
官方参考链接:OpenStack安装指南:环境,OpenStack安装指南:服务组件
CSDN博客参考:CentOS7安装OpenStack(Rocky版)-01.控制节点的系统环境准备
(1)服务器操作系统
系统:Centos7
版本:CentOS-7-x86_64-Minimal-1908
镜像:阿里云下载地址CentOS-7-x86_64-Minimal-1908
(2)开发环境
VMware workstation Pro
(3)OpenStack版本:Train
(1)节点说明
控制节点:controller,服务组件
计算节点:compute1,服务组件
可选节点:block等,其他各种服务组件。。。等
(2)物理网络
在部署之前做好网络部署规划,相关参考OpenStack官方安装指南:环境-网络。
①管理网IP地址段选择,建议使用使用官方文档中的示例地址段;
②物理网卡1,默认使用第1张网卡ens33,作为管理网卡;
③物理网卡2,可以为供应商网络;provider network。
至少准备两张网卡,建议网卡数量≥3.
管理网络:10.0.0.0/24;
供应网络:192.168.2.0/24,(使用网卡,以及使用网段可以根据实际情况进行确定);
(3)虚拟网络
(4)规划概览
主机名 | 管理网络 | 网卡1 | 供应网络 | 网卡2 | 配置 |
---|---|---|---|---|---|
controller | 10.0.0.11 | ens33 | 192.168.2.11 | ens34 | 4C8G64G |
compute1 | 10.0.0.31 | ens33 | 192.168.2.31 | ens34 | 4C8G64G |
compute2 | 10.0.0.32 | ens33 | 192.168.2.32 | ens34 | 4C8G64G |
compute3 | 10.0.0.33 | ens33 | 192.168.2.33 | ens34 | 4C8G64G |
注:更多节点类型,可以依次递增,但最好完成各类网络的规划。
本教程实际测试为,在后面的教程中以下面的地址为准。
主机名 | 管理网络 | 网卡1 | 供应网络 | 网卡2 | 配置 |
---|---|---|---|---|---|
controller | 192.168.232.101 | ens33 | 192.168.2.101 | ens34 | 4C8G64G |
compute1 | 192.168.232.111 | ens33 | 192.168.2.111 | ens34 | 4C8G64G |
compute2 | 192.168.232.112 | ens33 | 192.168.2.112 | ens34 | 4C8G64G |
compute3 | 192.168.232.113 | ens33 | 192.168.2.113 | ens34 | 4C8G64G |
(1)网卡配置
博客参考:Centos7设置静态IP地址,CentOS7设置静态IP而且还可以上网
配置文件:/etc/sysconfig/network-scripts/ifcfg-ens33
[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
# BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
# IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="ea1c227b-1fad-48f0-942f-968d183b3523"
DEVICE="ens33"
ONBOOT="yes"
# add follow
BOOTPROTO="static"
IPADDR="192.168.232.101"
NETMASK="255.255.255.0"
GATEWAY="192.168.232.2"
DNS1="1.1.1.1"
(2)网关配置
配置文件:/etc/networks
[root@controller ~]# cat /etc/networks
default 0.0.0.0
loopback 127.0.0.0
link-local 169.254.0.0
#add follow
NETWORKING=yes
GATEWAY=192.168.232.2
配置文件/etc/hosts
控制节点
[root@controller ~]# hostnamectl set-hostname controller
echo 192.168.232.101 controller >> /etc/hosts
echo 192.168.232.111 compute1 >> /etc/hosts
echo 192.168.232.112 compute2 >> /etc/hosts
echo 192.168.232.113 compute3 >> /etc/hosts
计算节点1
[root@compute1 ~]# hostnamectl set-hostname compute1
echo 192.168.232.101 controller >> /etc/hosts
echo 192.168.232.111 compute1 >> /etc/hosts
echo 192.168.232.112 compute2 >> /etc/hosts
echo 192.168.232.113 compute3 >> /etc/hosts
计算节点2
[root@compute2 ~]# hostnamectl set-hostname compute2
echo 192.168.232.101 controller >> /etc/hosts
echo 192.168.232.111 compute1 >> /etc/hosts
echo 192.168.232.112 compute2 >> /etc/hosts
echo 192.168.232.113 compute3 >> /etc/hosts
计算节点3
[root@compute3 ~]# hostnamectl set-hostname compute3
echo 192.168.232.101 controller >> /etc/hosts
echo 192.168.232.111 compute1 >> /etc/hosts
echo 192.168.232.112 compute2 >> /etc/hosts
echo 192.168.232.113 compute3 >> /etc/hosts
存储节点(可选),参考官方说明官方environment-networking-storage-cinder
注:
①某些发行版本在/etc/hosts 文件中添加了多余的条目,该条目将实际的主机名解析为另一个回送IP地址,例如127.0.1.1。如果有的话,则必须将其注释或删除,以防止名称解析问题。
②不要删除127.0.0.1条目。
③每一个节点都需要对其他节点进行主机名的解析配置。
主机名修改完成后,退出当前终端,重新登录服务器。
在每一个节点都要进行连通性测试,最后一条ping qq.com,管理网络不一定需要和公用互联网络连通。
ping -c 4 controller
ping -c 4 compute1
ping -c 4 compute2
ping -c 4 compute3
ping -c 4 qq.com
【可选】
控制节点计算节点
[root@controller ~]# ssh-keygen -t rsa #生成公私钥文件,连续回车
[root@controller ~]# ssh-copy-id controller #将公钥复制到目标机器中,需要输入当前用户为root,对应controller主机的也应是root的密码
[root@controller ~]# ssh controller #测试登录,然后exit退出测试终端
[root@controller ~]# ssh-copy-id compute1 #将公钥复制到目标机器中,需要输入当前用户为root,对应compute1主机的也应是root的密码
[root@controller ~]# scp -r .ssh compute1:~/ #文件复制到compute1,完成相互免密登录。
[root@controller ~]# ssh compute1 #测试登录,然后exit退出测试终端
[root@controller ~]# ssh-copy-id compute2 #将公钥复制到目标机器中,需要输入当前用户为root,对应compute2主机的也应是root的密码
[root@controller ~]# scp -r .ssh compute2:~/ #文件复制到compute2,完成相互免密登录。
[root@controller ~]# ssh compute2 #测试登录,然后exit退出测试终端
。。。
在CentOS7上面是firewalld服务,停止并且禁止开机启动firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service
setenforce 0
getenforce
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
grep SELINUX=disabled /etc/sysconfig/selinux
首先移除原系统自带的repo文件,避免和新建的配置文件内容冲突
cd
mkdir ori_repo-config
mv /etc/yum.repos.d/* ./ori_repo-config/
touch /etc/yum.repos.d/CentOS-PrivateLocal.repo
vim /etc/yum.repos.d/CentOS-PrivateLocal.repo
文件内容:/etc/yum.repos.d/CentOS-PrivateLocal.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://192.168.2.111/yumrepository/base/
gpgcheck=0
enabled=1
[updates]
name=CentOS-$releasever - Updates
baseurl=http://192.168.2.111/yumrepository/updates/
gpgcheck=0
enabled=1
[extras]
name=CentOS-$releasever - Extras
baseurl=http://192.168.2.111/yumrepository/extras/
gpgcheck=0
enabled=1
[centos-openstack-train]
name=CentOS-7 - OpenStack train
baseurl=http://192.168.2.111/yumrepository/centos-openstack-train/
gpgcheck=0
enabled=1
[centos-qemu-ev]
name=CentOS-$releasever - QEMU EV
baseurl=http://192.168.2.111/yumrepository/centos-qemu-ev/
gpgcheck=0
enabled=1
[centos-ceph-nautilus]
name=CentOS-7 - Ceph Nautilus
baseurl=http://192.168.2.111/yumrepository/centos-ceph-nautilus/
gpgcheck=0
enabled=1
[centos-nfs-ganesha28]
name=CentOS-7 - NFS Ganesha 2.8
baseurl=http://192.168.2.111/yumrepository/centos-nfs-ganesha28/
gpgcheck=0
enabled=1
[root@controller ~]# yum clean all
[root@controller ~]# yum makecache
[root@controller ~]# yum repolist
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
base CentOS-7 - Base 10097
centos-ceph-nautilus CentOS-7 - Ceph Nautilus 224
centos-nfs-ganesha28 CentOS-7 - NFS Ganesha 2.8 140
centos-openstack-train CentOS-7 - OpenStack train 2323
centos-qemu-ev CentOS-7 - QEMU EV 87
extras CentOS-7 - Extras 341
updates CentOS-7 - Updates 1787
repolist: 14999
[root@controller ~]#
yum install -y lsof vim net-tools wget git
官方参考:OpenStack官方文档:环境-NTP
博客园参考:CentOS7安装OpenStack(Rocky版)-01.控制节点的系统环境准备
yum -y install chrony
vim /etc/chrony.conf
(1)编辑chrony.conf文件,添加以下内容。
# add follow
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
allow 192.168.232.2/24
注意:
①替换NTP_SERVER为合适的更准确(较低层)NTP服务器的主机名或IP地址。
②该配置支持多个server键。默认情况下,控制器节点通过公共服务器池同步时间。但是也可以选择配置备用服务器,例如组织提供的服务器。
③要使其他节点能够连接到控制器节点上的chrony守护程序,请将此密钥添加到上述相同的chrony.conf文件中:allow 10.0.0.0/24,如有必要,请替换10.0.0.0/24为您的子网描述。
(2)重新启动NTP服务,并配置开机启动:
systemctl restart chronyd.service
systemctl status chronyd.service
systemctl enable chronyd.service
systemctl list-unit-files |grep chronyd.service
(3)设置时区,同步时间
timedatectl set-timezone Asia/Shanghai
chronyc sources
timedatectl status
[root@controller ~]# timedatectl set-timezone Asia/Shanghai
[root@controller ~]# chronyc sources
210 Number of sources = 6
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- 139.199.214.202 2 9 377 424 +2409us[+2409us] +/- 33ms
^- 4-53-160-75.rev.nuso.clo> 2 9 173 57 -19ms[ -19ms] +/- 165ms
^- hydra.spiderspace.co.uk 2 9 157 599 +2178us[+2178us] +/- 139ms
^- srcf-ntp.stanford.edu 2 9 137 3 +15ms[ +15ms] +/- 118ms
^* 120.25.115.20 2 9 377 779 +1182us[+1340us] +/- 10ms
^- 203.107.6.88 2 10 377 403 -5063us[-5063us] +/- 37ms
[root@controller ~]# timedatectl status
Local time: Wed 2020-04-22 14:33:50 CST
Universal time: Wed 2020-04-22 06:33:50 UTC
RTC time: Wed 2020-04-22 06:26:21
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
[root@controller ~]#
【所有节点】
在进行本地源配置的时候已经将本地仓库中的相关yum源配置其中,故此步骤周可省略。
OpenStack官方文档environment-packages-rdo
yum clean all
yum makecache
yum repolist
yum update -y #可选
yum install centos-release-openstack-train -y
yum clean all
yum makecache
yum install python-openstackclient openstack-selinux -y
yum install openstack-utils -y #用于OpenStack配置文件的快速配置
(1)安装mariadb相关软件包
[root@controller ~]# yum install mariadb mariadb-server MySQL-python python2-PyMySQL -y
(2)创建openstack的数据库配置文件,/etc/my.cnf.d/mariadb_openstack.cnf
[root@controller ~]# vim /etc/my.cnf.d/mariadb_openstack.cnf
在[mysqld]添加以下配置
[mysqld]
bind-address = 0.0.0.0
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
init-connect = 'SET NAMES utf8'
配置解释:
#默认存储引擎
default-storage-engine = innodb
#使用独享表空间模式,每一个表都会建一个表空间,都会有索引文件,查索引快,共享表空间,共用一个表空间和索引,如果有损坏很难修复,比如说zabbix用到的数据库如果不使用的独享表空间,很难进行优化
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
(3)启动数据库,初始化数据库并设置开机启动
systemctl restart mariadb.service
systemctl status mariadb.service
systemctl enable mariadb.service
systemctl list-unit-files |grep mariadb.service
设置数据库root账户密码,默认密码为空
/usr/bin/mysql_secure_installation
# 输入命令后,第一次按回车,Y,设置密码,然后输入root账户,密码为root,然后一路y回车,直至安装成功。
systemctl restart mariadb.service
systemctl status mariadb.service
注意:生产环境可以使用pwgen工具生成数据库密码
openssl rand -hex 10
(4)测试下数据库,相关的数据库在需要时单独创建
mysql -proot
-----------------------------------
flush privileges;
show databases;
select user,host from mysql.user;
exit
-----------------------------------
消息队列( MQ)全称为 Message Queue, 是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。
消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。
队列的使用除去了接收和发送应用程序同时执行的要求。
RabbitMQ 是一个在 AMQP 基础上完整的,可复用的企业消息系统。遵循 Mozilla Public License 开源协议。
(1).安装rabbitmq-server
yum install rabbitmq-server -y
(2).启动rabbitmq,并配置自启动
端口5672,15672,用于排错
systemctl start rabbitmq-server.service
systemctl status rabbitmq-server.service
systemctl enable rabbitmq-server.service
systemctl list-unit-files |grep rabbitmq-server.service
(3).创建消息队列中openstack账号及密码
添加openstack用户和密码,配置用户权限,配置读,写权限
格式为:
rabbitmqctl add_user openstack RABBIT_PASS
将Replace RABBIT_PASS 更换为安全性合适的密码.
#这里可能会报错,修改主机名之后,需要退出当前终端重新登陆。
rabbitmqctl add_user openstack openstack
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
rabbitmqctl set_permissions -p "/" openstack ".*" ".*" ".*"
(4)启用rabbitmq_management插件实现 web 管理
#查看支持的插件
rabbitmq-plugins list
# 启用web管理插件,需要重启服务使之生效
rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server.service
systemctl status rabbitmq-server.service
rabbitmq-plugins list
lsof -i:15672
(5).浏览器访问RabbitMQ进行测试
访问地址:http://192.168.232.101:15672
默认用户名密码都是guest,web界面可以管理和创建用户,管理权限如果无法访问请查看控制节点的防火墙配置状态。
可以进入选择admin,点击openstack用户名,设置openstack用户的密码和权限,然后update user,退出当前guest用户,使用用户名openstack密码openstack登录。
至此,RabbitMQ配置完毕
认证服务使用Memcached缓存令牌。缓存服务memecached运行在控制节点。在生产部署中,推荐联合启用防火墙、认证和加密保证它的安全。
(1)安装Memcached用于缓存令牌
yum install memcached python-memcached -y
(2)修改memcached配置文件
# 如果没有启用IPv6地址需要删掉::1的地址绑定
vim /etc/sysconfig/memcached
----------------------------------
OPTIONS="-l 127.0.0.1,controller"
----------------------------------
# memcached参数说明:
-d选项是作为守护进程在后台运行
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件
-vv是以very vrebose模式启动,将调试信息和错误输出到控制台
(3)启动memcached并设置开机自启动
systemctl start memcached.service
systemctl status memcached.service
netstat -anptl|grep memcached
systemctl enable memcached.service
systemctl list-unit-files |grep memcached.service
至此,memcached配置完毕
这个Etcd服务是新加入的,用于自动化配置
(1).安装etcd服务
yum install etcd -y
(2).修改etcd配置文件
# 注意IP地址不能用controller替代,无法解析
vim /etc/etcd/etcd.conf
-----------------------------------
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.232.101:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.232.101:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.232.101:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.232.101:2379"
ETCD_INITIAL_CLUSTER="controller=http://192.168.232.101:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
------------------------------------
(3)启动etcd并设置开机自启动
systemctl start etcd.service
systemctl status etcd.service
netstat -anptl|grep etcd
systemctl enable etcd.service
systemctl list-unit-files |grep etcd.service
至此,控制节点controller就完成基础环境的配置,后面可以开始安装 openstack 的组件。
使用VMware虚拟机的话,现在可以关机做快照 。