CentOS 8搭建 OpenStack(yoag版) 的方法和步骤
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