CentOS 8搭建 OpenStack(yoag版) 的方法和步骤

我的城市没有海 / 2023-09-07 / 原文

一、OpenStak简介

1.1、简介

OpenStack既是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公共和私有云,它提供了一个部署云的操作平台或工具集,其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。
OpenStackd开源项目由社区维护,包括OpenStack计算(代号为Nova),OpenStack对象存储(代号为Swift),并OpenStack镜像服务(代号Glance)的集合。 OpenStack提供了一个操作平台,或工具包,用于编排云。

 

1.2、各个组件说明

核心组件

功能说明

keystone组件

提供:所有组件和用户的身份验证服务

glance组件

提供:image镜像服务,如:iso安装光盘文件、磁盘镜像、系统快照

nova组件

提供:compute计算服务,通过控制节点来管理所有的计算节点

neutron组件

提供:network网络服务,通过创建一个虚拟的网络层,为所有计算节点提供网络通讯服务

dashboard 组件

提供:基于Web页面的管理控制平台

扩展组件

功能说明

cinder组件

提供:块存储服务,属于SAN存储区域网络,用于管理虚拟机的磁盘卷文件(创建、添加、扩容、快照、删除等等)

swift组件

提供:对象存储服务,属于NAS网络附加存储,无需RAID技术,就可实现可伸缩、高可用的分布式文件系统存储服务

 

二、前期准备工作

2.1、准备3台虚拟机(1个控制节点、2个计算节点)

- 首先安装VMware WorkStations(最新版),
- 新增虚拟机,
- 镜像使用CentOS-Stream-8-x86_64-latest-dvd1.iso(下载地址<https://mirrors.tuna.tsinghua.edu.cn/centos/8-stream/isos/x86_64/CentOS-Stream-8-x86_64-latest-dvd1.iso>)
- 安装完成后克隆两台虚拟机(计算节点)。

2.2、虚拟机的性能要求:

-  内存大于等于8G
-  硬盘200G
-  CPU至少2核,开启vt-x
-  网卡2块,一张网卡用来连接互联网,另外一张网卡用来内部互联。

 注意事项:

Kdump(kernel dump,内核备份),内存小于2G,则Kdump就不会生效。所以想生效,内存必须大于2G,当安装界面的Kdump不管勾不勾选,都会占用160M内存。
如果勾选了,系统每次启动时,内核会被读到160M内存中,如果系统崩溃,就可以还原内核。如果不勾选,当内核崩溃时,就无法恢复。

三、系统初始化配置

3.1、主机名配置

[root@controller ~]# hostnamectl set-hostname controller
[root@computer1 ~]# hostnamectl set-hostname computer1
[root@computer2 ~]# hostnamectl set-hostname computer2

3.2、网络配置

控制节点:

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens160
UUID=127549ff-6b79-4276-8b3a-8488d1222de8
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.100.54
PREFIX=24
GATEWAY=192.168.100.1
DNS1=223.5.5.5
DNS2=23.6.6.6

 计算节点1:

[root@computer1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens160
UUID=127549ff-6b79-4276-8b3a-8488d1222de8
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.100.55
PREFIX=24
GATEWAY=192.168.100.1
DNS1=223.5.5.5
DNS2=23.6.6.6

计算节点2:

[root@computer2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.100.56
PREFIX=24
GATEWAY=192.168.100.1
DNS1=223.5.5.5
DNS2=23.6.6.6

#重新加载配置文件
nmcli connection reload
#重启网卡
nmcli connection up ens160
同理在计算节点也使用相同命令,确保配置生效。

3.3、设置免密登录

#在controller节点上生成ssh key,将公钥复制给其他节点,实现免密登陆。

ssh-keygen

一路回车

#拷贝公钥到另外2个计算节点
ssh-copy-id -i /root/.ssh/id_rsa.pub computer1
ssh-copy-id -i /root/.ssh/id_rsa.pub computer2

#测试ssh免密链接是否正常
ssh computer1
ssh computer2

 3.4、添加hosts文件主机记录

[root@controller ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.54 controller
192.168.100.55 computer1
192.168.100.56 computer2

#将以上控制节点的配置拷贝到两个计算节点对应的文件夹里。
scp /etc/hosts root@computer1:/etc
scp /etc/hosts root@computer2:/etc

 3.5、关闭所有节点防火墙和SeLinux

systemctl disable firewalld.service --now

sed -i's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 

3.6、配置ntp时间服务器

#选择在控制节点上部署NTP时间服务器。
yum -y install chrony

#配置开机自启
systemctl enable chronyd --now

#修改配置文件,让控制节点成为NTP服务器。
cat /etc/chrony.conf

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# pool 2.centos.pool.ntp.org iburst(注释掉默认的NTP服务器)
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp \*
# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2
# Allow NTP client access from local network.
allow 192.168.0.0/16(取消注释,网络地址以及端口号需要包含计算节点)
# Serve time even if not synchronized to a time source.
local stratum 10(取消注释)
# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys
# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC
# Specify directory for log files.
logdir /var/log/chrony
# Select which information is logged.
#log measurements statistics tracking

#修改两个计算节点的chrony配置文件,配置相同。
vim /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#pool 2.centos.pool.ntp.org iburst(注释掉)
pool controller iburst(新增一条)

#修改完成后重启服务
systemctl restart chronyd.service

vim /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#pool 2.centos.pool.ntp.org iburst(注释掉)
pool controller iburst(新增一条)

#修改完成后重启服务
systemctl restart chronyd.service

3.7、在所有节点上都开启openstack安装源

 yum -y install centos-release-openstack-yoga
 yum config-manager --set-enabled powertools
 yum -y upgrade
 reboot
 yum -y install python3-openstackclient
 yum -y install openstack-selinux

++++++++++++++++++++++++++++++++++++++++++++关闭3台主机并拍摄快照+++++++++++++++++++++++++++++++++++++++++

四、在controller控制节点安装配置相关服务

 4.1、安装和配置数据库

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

## 本指南使用MariaDB或MySQL,OpenStack服务还支持其他SQL数据库(包括PostgreSQL)。

#安装
[root@controller ~]# yum -y install mariadb mariadb-server python2-PyMySQL 

增加openstack.cnf文件
[root@controller ~]# cat /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = controller
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 --now

#初始化mysql
mysql_secure_installation

#重启数据库服务
systemctl restart mariadb.service

#允许root数据库管理员从任何远程位置,来访问MySQL数据库
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '086530qwe';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'controller' IDENTIFIED BY '086530qwe';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '086530qwe';
FLUSH PRIVILEGES;
select host,user,password from mysql.user;

mysql_secure_installation初始化说明:

4.2、在controller控制节点上安装RabbitMQ消息队列并进行相关配置

## OpenStack使用消息队列来协调操作和状态信息等服务,消息队列服务通常运行在控制器节点上。

#安装
yum -y install rabbitmq-server

#设为开机自启
systemctl enable rabbitmq-server.service --now 

#添加一个名为openstack的用户和密码
rabbitmqctl add_user openstack redhat

#针对openstack用户配置权限为:write写入权限、read读取权限:
rabbitmqctl set_permissions openstack ".*" ".*" ".*"

#查看用户权限
rabbitmqctl list_permissions

#查看用户
rabbitmqctl list_users

#查看RrabbitMQ支持的插件
rabbitmq-plugins list

#启动RrabbitMQ的rabbitmq_management插件
rabbitmq-plugins enable rabbitmq_management

#重启服务
systemctl restart rabbitmq-server.service

#查看监听端口
netstat -tunlp | grep beam

 在web界面访问192.168.100.54:15672(账号和密码都是guest)

4.3、在controller控制节点上安装Memcached(缓存token)

## Identity service(身份验证服务)的验证机制,使用Memcached来缓存<tokens令牌>。
## memcached服务通常运行在控制器节点上。
## 在生产环境的部署中,建议启用防火墙、身份验证和加密来保护<memcached服务>。

#安装
yum -y install memcached python3-memcached


#添加memcached监听
vim /etc/sysconfig/memcached
手动修改以下内容
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1,::1,controller"

#设为开启自启
systemctl enable memcached.service --now

 4.4、在controller控制节点上安装etcd键值对数据库

#安装
yum -y install etcd

#配置
vim /etc/etcd/etcd.conf
分别在[Member]、[Clustering]下手动修改以下内容
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="http://192.168.100.154:2380" ETCD_LISTEN_CLIENT_URLS="http://192.168.100.154:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.100.154:2380" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.100.154:2379" ETCD_INITIAL_CLUSTER="controller=http://192.168.100.154:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"

#设置为开机自启
systemctl enable etcd --now

4.5、安装和配置keystone

配置数据库

#在controller控制节点上输入以下命令
创建:keystone数据库、数据库keystone用户账户、远程访问权限
mysql -u root -p
Enter password:

CREATE DATABASE keystone;

show databases;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'redhat';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'controller' IDENTIFIED BY 'redhat';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'redhat';

show grants;

select host,user,password from mysql.user;

FLUSH PRIVILEGES;

exit

 #安装keystone

#安装
yum -y install openstack-keystone httpd python3-mod_wsgi 

#修改配置文件
vim /etc/keystone/keystone.conf

分别在[database]、[token]下添加如下内容
[database]
#connection = \<None\>下面添加
## 设置:<MySQL数据库服务器>中的<keystone数据库>的<访问方式>
connection = mysql+pymysql://keystone:redhat@controller/keystone
[token]
#expiration = 3600下面添加
## 设置:令牌提供程序为<fernet>,<fernet令牌>增加了<Identity service身份验证服务>可支持的<API操作数量>
provider = fernet


#填充:keystone数据库
su -s /bin/sh -c "keystone-manage db_sync" keystone

mysql -uroot -p
use keystone;
show tables;

#初始化:Fernet密钥存储库
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

#引导:keystone验证服务
keystone-manage bootstrap --bootstrap-password redhat --bootstrap-admin-url http://controller:5000/v3/ --bootstrap-internal-url http://controller:5000/v3/ --bootstrap-public-url http://controller:5000/v3/ --bootstrap-region-id RegionOne

 4.6、配置httpd

#配置httpd
vim /etc/httpd/conf/httpd.conf
ServerName controller:80

ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

systemctl enable httpd.service --now

#新建环境脚本
vim admin-openrc.sh
export OS_USERNAME=admin
export OS_PASSWORD=redhat
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3 #keystone的endpoints地址 
export OS_IDENTITY_API_VERSION=3

#让admin-openrc.sh下的变量内容生效 
source admin-openrc.sh 


#创建:一个domain(域)、projects(项目)、user(用户)、role(角色)


openstack domain create --description "An Example Domain" example

## 创建:一个名为service的项目,属于default域,该项目用来包含后续安装的所有service服务的<服务用户帐户>
openstack project create --domain default --description "Service Project" service

## 创建:一个名为demo的演示项目
openstack project create --domain default --description "Demo Project" myproject

## 创建:一个名为user的角色,该角色没有任何特权
openstack user create --domain default --password-prompt myuser
	User Password:输入密码
	Repeat User Password: 输入密码

#创建角色:myrole
openstack role create myrole 

#将角色添加到项目和用户
openstack role add --project myproject --user myuser myrole 

 4.7、安装和配置glance