2024广东省职业技能大赛云计算赛项实战——OpenStack搭建

OpenStack搭建

前言

搭建采用双节点安装,即controller控制节点和compute计算节点。
CentOS7 系统选择 2009 版本:CentOS-7-x86_64-DVD-2009.iso
可从阿里镜像站下载:https://mirrors.aliyun.com/centos/7/isos/x86_64/

OpenStack使用竞赛培训平台提供的镜像包。
备赛时经常浏览别人做样卷的文章,看到很多人都在求这个,但其实这玩意儿是可以搞出来的,不过估计就我一个人想到了搞出来的方法。而且这玩意儿好像是有版权保护的,我也只能自己用了。你们可以通过在这个网站申请环境进行操作https://ncc.douxuedu.com/

使用到的工具/软件:

  • VMware Workstation Pro
  • SecureCRPT、SecureFX(其他远程连接软件也可以,看个人喜好)

节点规划如下

主机名IP/24内存/处理器数量/磁盘节点
controller192.168.100.106GB/4/40GB控制节点
compute192.168.100.204GB/4/40GB+20GB计算节点

操作过程

虚拟机的创建与安装

如果是在网站中申请资源,这一步都不需要做

创建虚拟机

使用Vmware软件,在上方导航栏【文件】处选择【新建虚拟机】或者在主页点击【创建新的虚拟机】

在这里插入图片描述
在这里插入图片描述
在【新建虚拟机向导】框中,选择【自定义安装】然后【下一步】
在这里插入图片描述
虚拟机兼容性界面,默认下一步
在这里插入图片描述

虚拟机操作系统界面,选择【稍后安装操作系统】
在这里插入图片描述
注:Vmware从14版本开始,在这一步安装操作系统若先指定镜像文件,下一步就会变成下图这个步骤,要你创建一个用户,我们并不需要多余的用户,只需要root用户即可,所以这里先不指定镜像文件。
在这里插入图片描述
⬆指定镜像文件后
操作系统选择【Linux】,版本选择【CentOS 7 64 位】
在这里插入图片描述
在【命名虚拟机】步骤中,设置【虚拟机名称】为【controller】,【位置】无所谓选择一个空间足够且你记得住的位置
在这里插入图片描述

在【处理器配置】中,根据个人电脑的配置,数量不小于4个即可
在这里插入图片描述
在【虚拟机内存】界面中,设置虚拟机的内存,根据个人电脑配置,不小于4G即可
在这里插入图片描述
在【网络类型】界面,选择【仅主机模式】
在这里插入图片描述
【选择I/O控制器类型】和【选择磁盘类型】界面,使用推荐配置,默认下一步

【选择磁盘】界面,选择【创建新虚拟磁盘】
在这里插入图片描述
【指定磁盘容量】界面,设置【最大磁盘大小】为40G,你要更多也可以
在这里插入图片描述
【指定磁盘文件】界面,默认下一步

在最后的界面,我们选择【自定义硬件】
在这里插入图片描述
在弹出的选项卡中,我们选择光盘映像,指定ISO镜像文件
在这里插入图片描述
可以将不需要的硬件移除,减少资源占用(USB、声卡、打印机)
在这里插入图片描述
点击下方添加按钮,添加一张网卡,设置为NAT模式
在这里插入图片描述
在这里插入图片描述
然后我们关闭选项卡,点击完成,这样虚拟机就创建好了
在这里插入图片描述

安装虚拟机

我们开启虚拟机,在启动界面通过方向上下键和回车选择【install Centos 7】,这样能更快的安装
在这里插入图片描述

等待一段时间后,会进入安装向导界面
在选择语言界面,我们拉至最底下,选择中文
在这里插入图片描述
在安装信息摘要界面,【软件选择】选择【最小安装】
在这里插入图片描述
【安装位置】选择【我要配置分区】
在这里插入图片描述
选择【点这里自动创建他们】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【KDUMP】禁用kdump
在这里插入图片描述
【网络和主机名】配置ens32网卡
在这里插入图片描述
在【常规】处勾选【可用时自动链接到这个网络】
在这里插入图片描述
在【IPv4设置】栏,选择【方法】为【手动】,点击【Add】添加IP地址,保存退出
在这里插入图片描述
配置ens33网卡,只需要在【常规】处勾选【可用时自动链接到这个网络】即可
在这里插入图片描述
设置完成之后,我们点击【开始安装】
在这里插入图片描述
在安装过程中,设置root用户的密码
在这里插入图片描述
为了避免记混,密码默认设置为000000
由于密码设置过于简单,需要按两下完成才可设置
在这里插入图片描述
然后等待安装完毕重启即可
在这里插入图片描述
然后我们以相同的步骤,安装计算节点compute虚拟机(克隆也行,不过要用完整克隆,并且还需要额外的操作),设置的区别在于:

  1. compute需要额外添加一块硬盘,作为cinder和swift还有manila的存储磁盘。
  2. 设置IP时,controller节点是192.168.100.10,compute节点是192.168.100.20

配置如下图
在这里插入图片描述
在这里插入图片描述

克隆机额外操作

如果你是使用克隆出的compute,那么你还需要进行以下操作
注:使用远程连接工具,方便操作
首先,UUID可能会影响到后续的步骤,我们使用uuid命令生成一个随机的uuid,并将其复制
在这里插入图片描述
我们进入ens32网卡配置文件,将UUID修改为生成的UUID,并修改IP地址为192.168.100.20
在这里插入图片描述
然后重启网络服务
在这里插入图片描述
如果你没有搭建云平台的经验,无法保证在后面的步骤中,能够不犯错误,那么我建议你在这开始保存快照,一步一个脚印,以便后面连自己都不知道哪里错了的情况可以从快照开始重来。

虚拟机基础配置

更改主机名

控制节点(192.168.100.10)改为controller
计算节点(192.168.100.20)改为compute

[root@localhost ~]# hostnamectl set-hostname controller
[root@localhost ~]# bash
[root@controller ~]#

[root@localhost ~]# hostnamectl set-hostname compute
[root@localhost ~]# bash
[root@compute ~]#
连接光盘映像文件

打开Vmware软件,右键控制节点(controller)的选项卡,保证【可移动设备】→【CD/DVD(IDE)】处于连接状态
在这里插入图片描述
如果是在网站上的环境,可以不用做,直接跳转到配置YUM源那步

上传云平台镜像

打开SecureCRT,在控制节点(controller)选项卡右键,选择【打开SecureFX】
在这里插入图片描述
进入SecureFX后,将提供的openstack平台镜像传入到root目录下(若无法拖入,可以复制文件后粘贴)
在这里插入图片描述
传输完成后,可在/root目录下查看到镜像文件

[root@controller ~]# ls
anaconda-ks.cfg  chinaskills_cloud_iaas_v2.0.3.iso
[root@controller ~]# 

如果是在网站上的环境,那么直接从他们的源里拉取就行了
curl -O http://mirrors.douxuedu.com/competition/chinaskills_cloud_iaas_v2.0.3.iso

挂载镜像
#我们将镜像挂载,首先在opt目录下创建一个centos目录,用于存放centos镜像的软件包
[root@controller ~]# mkdir /opt/centos
#然后进行挂载,我们使用永久挂载的方式进行挂载,这样可以防止重启后挂载的内容丢失导致无法安装服务。
#先将centos镜像挂载到一个第三方空目录/mnt里
[root@controller ~]# mount -o loop /dev/sr0 /mnt/
#可用ls命令查看是否真的挂载成功
[root@controller ~]# ls /mnt/
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
#再把/mnt目录下的所有内容复制到我们真正要挂载的目录/opt/centos下
[root@controller ~]# cp -rvf /mnt/* /opt/centos/
#cp 复制命令,即copy的缩写
#-rvf为选项,r为递归复制,及该文件夹及包含的文件全部复制,
#拷贝文件夹时这个参数必须加上,否则报错。
#v为显示命令执行的操作,可省略。
#F为强制复制,无论目标文件或目录是否存在。
#*为通配符,代表多个所有字符,这里意义为mnt目录下的所有文件。
#命令执行完后,就可在/opt/centos目录下看见和/mnt/目录下一样的内容了,这些复制过来的东西在重启后也不会消失,所以我称其为永久挂载
[root@controller ~]# ls /opt/centos/
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
#mnt目录只是我们完成永久挂载的“工具人”,因此我们再把他取消挂载一下
#可用看到取消挂载后,/mnt又变成了空目录
[root@controller ~]# umount /mnt
[root@controller ~]# ls /mnt/
[root@controller ~]# 
#相同的操作,我们把openstack的镜像也用同样的方法进行永久挂载操作
#请出我们的工具人,将openstack镜像挂载过去
[root@controller ~]# mount -o loop chinaskills_cloud_iaas_v2.0.3.iso /mnt
mount: /dev/loop0 写保护,将以只读方式挂载
[root@controller ~]# ls /mnt/
iaas-repo  images
#将/mnt/目录下所有内容复制到/opt/目录下
[root@controller ~]# cp -rvf /mnt/* /opt
#最后取消挂载mnt目录,利用完他就不要了
[root@controller ~]# umount /mnt/
[root@controller ~]# 
配置YUM源仓库

控制节点(controller)采用本地源的方式配置YUM源仓库,计算节点(compute)通过ftp服务使用控制节点(controller)的资源配置YUM源仓库。
当然计算节点(compute)也可以和控制节点(controller)一样都采用本地源的方式,步骤都是一样的,但这样比较费时,还更加占用空间。

如果是网站申请的环境,两个节点均使用他们的http源即可,路径分别是:
baseurl= http://mirrors.douxuedu.com/Centos7
baseurl=http://mirrors.douxuedu.com/iaas

控制节点(controller)
#首先删除系统源
[root@controller ~]# rm -rf /etc/yum.repos.d/*
#创建一个新的仓库文件
[root@controller ~]# vi /etc/yum.repos.d/local.repo 
[centos]
name=centos
baseurl=file:///opt/centos
enabled=1
gpgcheck=0
[iaas]
name=iaas
baseurl=file:///opt/iaas-repo
enabled=1
gpgcheck=0
#检查可用性,若可用包显示0,则为上面的文件配置写错了
[root@controller ~]# yum clean all && yum repolist
...
源标识                                       源名称                                       状态
centos                                       centos                                       4,070
iaas                                         iaas                                           954
repolist: 5,024
[root@controller ~]#
#配置好YUM源仓库后,我们就可以安装软件了
安装ftp服务
#在控制节点(controller)安装ftp服务,方便计算节点(compute)使用控制节点(controller)的资源
[root@controller ~]# yum -y install vsftpd
...
Complete!
#修改ftp服务的配置文件,共享/opt目录
[root@mycat ~]# echo "anon_root=/opt" >> /etc/vsftpd/vsftpd.conf   
#启动ftp服务并设置开机自启
[root@mycat ~]# systemctl start vsftpd && systemctl enable vsftpd
...
#关闭防火墙,并关闭开机自启,否则计算节点(compute)的ftp请求会被防火墙阻拦
[root@controller ~]# systemctl stop firewalld && systemctl disable firewalld
计算节点(compute)
#首先还是删除系统源
[root@compute ~]# rm -rf /etc/yum.repos.d/*
#创建一个新的仓库文件
[root@compute ~]# vi /etc/yum.repos.d/local.repo 
[centos]
name=centos
baseurl=ftp://192.168.100.10/centos
enabled=1
gpgcheck=0
[iaas]
name=iaas
baseurl=ftp://192.168.100.10/iaas-repo
enabled=1
gpgcheck=0
#检查可用性
[root@compute ~]# yum clean all && yum repolist
...
源标识                                       源名称                                       状态
centos                                       centos                                       4,070
iaas                                         iaas                                           954
repolist: 5,024
磁盘分区

计算节点(compute)需要给cinder、swift和manila服务各提供一块空白分区,总共需要三块,我们在创建虚拟机时就已经额外给计算节点(compute)添加了一块20G的硬盘,现在我们给计算节点(compute)分区
在这里插入图片描述
使用fdisk命令进行分区
在这里插入图片描述
输入n添加一个新分区,给cinder创建空白分区
在这里插入图片描述
在这里插入图片描述
分区类型为主分区p,默认回车即可
分区号默认回车即可
起始扇区也是默认回车
截至扇区看个人情况,如果你只装cinder和swift,20G的硬盘均分10G即可,那你就输入+10G
我还要装个manila,所以我这里设置+7G
在这里插入图片描述
重复刚刚的操作,给swift创建空白分区
在这里插入图片描述
在设置最后一块分区的时候,如果你还是输入+10G,就会超出分区的范围(硬盘实际大小并没有20G)
在这里插入图片描述
所以我们这里直接不输入,默认值就是最大值,回车即可
在这里插入图片描述
分好后,可以输入p打印分区表,查看分区的情况
在这里插入图片描述
在这里插入图片描述

确认无误后输入w,保存设置并退出即可
在这里插入图片描述
在这里插入图片描述
可以通过罗列块设备的命令查看分区情况
在这里插入图片描述
虽然这里显示了,但有时当我们创建或删除分区设备后,系统并不会立即生效,需要重启后才能生效
这个时候我们只需要输入partprobe命令
partprobe命令可以在不重启系统的情况下重新读加载分区表信息,使得新设备信息被同步
在这里插入图片描述
至此,该步骤完毕,可以拍摄一个快照。

平台搭建基础配置

安装openstack
#两个节点都安装
[root@controller ~]# yum -y install openstack-iaas
[root@compute ~]# yum -y install openstack-iaas
编辑环境变量文件
#设置各个变量的参数,这些变量会用在之后的搭建脚本中。
[root@controller ~]# vi /etc/openstack/openrc.sh
#需要更改的段落如下
HOST_IP=192.168.100.10						
HOST_PASS=000000							
HOST_NAME=controller						
HOST_IP_NODE=192.168.100.20					
HOST_PASS_NODE=000000					
HOST_NAME_NODE=compute					
network_segment_IP=192.168.100.0/24			
RABBIT_USER=openstack						
RABBIT_PASS=000000							
DB_PASS=000000								
DOMAIN_NAME=demo						
ADMIN_PASS=000000							
DEMO_PASS=000000							
KEYSTONE_DBPASS=000000					
GLANCE_DBPASS=000000						
GLANCE_PASS=000000						
PLACEMENT_DBPASS=000000					
PLACEMENT_PASS=000000						
NOVA_DBPASS=000000						
NOVA_PASS=000000							
NEUTRON_DBPASS=000000					
NEUTRON_PASS=000000						
METADATA_SECRET=000000					
INTERFACE_NAME=ens33	#外网网卡名称		
Physical_NAME=provider						
minvlan=1									
maxvlan=1000								
CINDER_DBPASS=000000						
CINDER_PASS=000000							
BLOCK_DISK=sdb1 #第一个分区					
SWIFT_PASS=000000							
OBJECT_DISK=sdb2 #第二个分区				
STORAGE_LOCAL_NET_IP=192.168.100.20		
TROVE_DBPASS=000000						
TROVE_PASS=000000							
HEAT_DBPASS=000000						
HEAT_PASS=000000							
CEILOMETER_DBPASS=000000					
CEILOMETER_PASS=000000					
AODH_DBPASS=000000						
AODH_PASS=000000							
ZUN_DBPASS=000000							
ZUN_PASS=000000							
KURYR_PASS=000000							
OCTAVIA_DBPASS=000000						
OCTAVIA_PASS=000000						
MANILA_DBPASS=000000						
MANILA_PASS=000000						
SHARE_DISK=sdb3							
CLOUDKITTY_DBPASS=000000					
CLOUDKITTY_PASS=000000					
BARBICAN_DBPASS=000000					
BARBICAN_PASS=000000
SENLIN_DBPASS=000000
SENLIN_PASS=000000
#可以发现,涉及PASS密码的参数都是设置为000000,所以我们可以批量进行设置
#使用命令行模式,即:
#输入%s/PASS=/PASS=000000/g
#%s	表示替换字符							
#/	分隔符									
#PASS=	旧字符(要替换的字符)				
#PASS=000000	新字符(替换成为什么字符)	
#/g	表示全文替换							
#整个命令意思即为:查找文件中匹配PASS=条件的字符,将其全部改为PASS=000000
#然后我们再把那些空的补上
#最后,按文件最后的提示,在命令行模式下执行命令,删除每行前的注释符
################################################################
######在vi编辑器中执行:%s/^.\{1\}//  删除每行前1个字符(#号)#####
################################################################
#不过我个人喜欢用Ctrl+v进入块操作模式,然后按下G跳至行末,选中每行的第一个字符,最后按下gg删除
[root@controller ~]# scp /etc/openstack/openrc.sh 192.168.100.20:/etc/openstack/openrc.sh
...
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.100.20's password: #输入控制节点的密码
openrc.sh                                                    100% 4964     2.5MB/s   00:00 
执行初始化脚本
#这个脚本会对虚拟机进行一些基础配置,两个节点都要执行
#运行这些脚本的时候保证一个原则,就是让控制节点执行完毕后再去计算节点执行
[root@controller ~]# iaas-pre-host.sh 
[root@compute ~]# iaas-pre-host.sh 
#脚本执行完毕后会提示你重启系统,输入reboot命令重启即可
...
Please Reboot or Reconnect the terminal
#实际上Ctrl+D登出再回车重新登入也行
[root@controller ~]# reboot
[root@compute ~]# reboot
#重启之后,登录之后就会打印欢迎语了
 ################################
 #    Welcome  to  OpenStack    #
 ################################
[root@controller ~]# 
初始化脚本解析

我就只讲解这个脚本的功能,其他的脚本大差不多,你可以自己去查看脚本的内容。实际上就是把手动搭的命令放到一个脚本里,一些可能不同的配置项就用变量替代,而这个变量我们在前面就已经设置好了值,每个脚本开始前都会生效那个变量文件。

#/bin/bash
source /etc/openstack/openrc.sh

生效环境变量

#Welcome page
cat > /etc/motd <<EOF 
 ################################
 #    Welcome  to  OpenStack    #
 ################################
EOF

整个段落所做的事:在用户登录后弹出欢迎界面
/etc/motd这个文件是在你登录系统后显示的,不管你是直接登录还是远程登录,都将显示这个文件里的信息
故而这段脚本功能是每次登录都打印欢迎界面

#selinux
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

第一句为设置Selinux为Disable(关闭模式)
由于修改配置文件后需要重启才能生效,所以第二句功能为临时关闭Selinux

#firewalld
systemctl stop firewalld
systemctl disable firewalld  >> /dev/null 2>&1

整个段落所做的事:将防火墙关闭并禁用开机自启
关于>> /dev/null 2>&1的解释:

  1. /dev/null 是说将命令的返回结果(输出)追加到/dev/null文件中

    而/dev/null文件是Linux的空文件设备,所有往这个文件里面写入的内容都会丢失,正因如此,它还有"黑洞"的俗称

  2. 2>&1 2指的是错误输出,1指的是标准输出,>为重定向,&为绑定

    意思即为将错误输出和标准输出绑定输出到同一个文件中,而这个文件是/dev/null的话,就找不着了

    所以整句>> /dev/null 2>&1 的功能就是让命令的返回结果(无论正确还是报错)不显示在屏幕上

#NetworkManager
systemctl stop NetworkManager >> /dev/null 2>&1
systemctl disable NetworkManager >> /dev/null 2>&1
yum remove -y NetworkManager firewalld
systemctl restart network

整个段落所做的事:将NetworkManager服务停止、禁止开机自启、删除,随后重启network服务
为何这么做的原因:
NetworkManager服务和network服务类似,都是管理网络的服务
但是两种服务都配置会起冲突,导致network服务开不起来,所以一般都会关闭其中一个服务
并且NetworkManager在网络断开的时候会清除路由,如果是自定义的路由,没有添加进NetworkManager的配置文件当中的话,路由就会被清除掉
NetworkManager比较适合有桌面环境的系统,我们搭建openstack只是用作服务器,不需要桌面环境。所以我们保留network服务,将NetworkManager服务关闭禁用开机自启

其他解释:
yum remove是删除软件,脚本这里粗暴的删除了NetworkManager和firewalld防火墙

#iptables
yum install  iptables-services  -y 
if [ 0  -ne  $? ]; then
	echo -e "\033[31mThe installation source configuration errors\033[0m"
	exit 1
fi
systemctl restart iptables
iptables -F
iptables -X
iptables -Z 
/usr/sbin/iptables-save
systemctl stop iptables
systemctl disable iptables

整个段落所做的事:安装和配置iptables服务。

iptables是一个防火墙服务,和firewalld相比,有以下区别:

iptablesfirewalld
实现方式链式规则区域和服务
默认放行规则允许拒绝
优缺点修改规则后需全部刷新才可生效允许动态更新规则而不破坏现有会话和连接

CentOS7默认使用的防火墙是firewalld,替换了iptables,因为firewalld使用更加方便,功能也更加强大。
这里选择抛弃功能强大的firewalld,转而使用iptables的原因是
OpenStack网络相关组件的功能(如安全组)是基于iptables实现的,所以没办法😂

if语句的解释:

if [ "条件" ]; then
		执行命令
fi

是shell语言中if判断语句的基本写法。如果(if)满足某条件,那么(then)就执行以下语句。fi是结束的标记,用于结束一个if语句
if判断语句当中的条件0 -ne $?
-ne 意为不等于 $?是一个系统变量,表示"最后一次执行命令"的退出状态.0为成功,非0为失败
合起来这个条件就是:最后一次执行的命令
($?)没有(不等于)成功(0)**的话
那么这段代码中的整个语句意思就很明显了,如果最后一次命令,即安装iptables的命令失败了(返回非0)
则执行echo命令打印一段话(The installation source configuration errors)提示用户安装出错并退出程序(exit 1)
如果成功了,不满足条件,则直接运行后面的命令
iptables -F 清空防火墙规则
iptables -X 删除用户自定义的链
iptables -Z 清空防火墙数据表统计信息
/usr/sbin/iptables-save 生效配置
最后将服务关闭和禁用开机自启。

echo语句的解释:
-e 参数用于启用特殊字符的解释,例如\n换行符,\t制表符等等
后面双引号里打印的文字可以看作 \033[31m打印的文字\033[0m
\033[31m是设置输出字体的颜色为红色,31代表的是红色
这里颜色的控制是通过ESC字符**(ASCII码中的八进制表示形式为\033)**+[+颜色代码+m实现的。
而后面的\033[0m就是将颜色重新改回去,回到默认设置去

# install package 
sed -i -e 's/#UseDNS yes/UseDNS no/g' -e 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
yum upgrade -y
yum install python-openstackclient openstack-selinux openstack-utils crudini expect lsof net-tools vim -y

修改SSH配置文件,禁用DNS解析和GSSAPI身份认证,然后更新系统中所有已安装软件包至其最新版本,并安装openstack所需的软件包。
其中crudini和expect是脚本执行过程中需要用到的工具。

#hosts
if [[ `ip a |grep -w $HOST_IP ` != '' ]];then 
    hostnamectl set-hostname $HOST_NAME
elif [[ `ip a |grep -w $HOST_IP_NODE ` != '' ]];then 
    hostnamectl set-hostname $HOST_NAME_NODE
else
    hostnamectl set-hostname $HOST_NAME
fi
sed -i -e "/$HOST_NAME/d" -e "/$HOST_NAME_NODE/d" /etc/hosts
echo "$HOST_IP $HOST_NAME" >> /etc/hosts
echo "$HOST_IP_NODE $HOST_NAME_NODE" >> /etc/hosts

整个段落所做的事:根据你在openrc.sh环境变量文件中填写的ip地址参数,修改主机名,并在/etc/hosts文件中添加对应主机映射
这里的if里的条件通过将ip a命令的反馈结果给grep筛查,-w参数是匹配具体字段,这样一来。如果是控制节点,第一个if条件筛查ip是否与环境变量文件中的一致,结果!= ' '(不为空值,即能够匹配得到),则修改主机名为controller。若是计算节点,则不满足第一个if条件,转而匹配第二个。当我们配置没有出错的情况下,这段if语句完美的实现了我们的需求:根据不同节点设置主机名

#ssh
if [[ ! -s ~/.ssh/id_rsa.pub ]];then
    ssh-keygen  -t rsa -N '' -f ~/.ssh/id_rsa -q -b 2048
fi
name=`hostname`
if [[ $name == $HOST_NAME ]];then
expect -c "set timeout -1;
               spawn ssh-copy-id  -i /root/.ssh/id_rsa $HOST_NAME_NODE;
               expect {
                   *password:* {send -- $HOST_PASS_NODE\r;
                        expect {
                            *denied* {exit 2;}
                            eof}
                    }
                   *(yes/no)* {send -- yes\r;exp_continue;}
                   eof         {exit 1;}
               }
               "
else
expect -c "set timeout -1;
               spawn ssh-copy-id  -i /root/.ssh/id_rsa $HOST_NAME;
               expect {
                   *password:* {send -- $HOST_PASS\r;
                        expect {
                            *denied* {exit 2;}
                            eof}
                    }
                   *(yes/no)* {send -- yes\r;exp_continue;}
                   eof         {exit 1;}
               }
               "
fi

整个段落所做的事:设置两节点之间的免密登录,方便后面脚本中主机之间进行交互操作
这里用到了上面安装的expect工具,它是一个用于自动化交互式任务的工具和编程语言。通常用于编写脚本来与命令行程序进行交互,自动化执行诸如登录、输入密码、处理交互式提示等任务。
其中,expect -c 表示运行一段包含期望操作的代码块。
set timeout -1设置了超时时间为永不超时,避免程序响应过长导致错过一些输出信息。
spawn则是启动进程并持续监控跟踪输出的信息。
expect命令检测到了password:关键字时,则使用send命令模拟用户输入。出现大量的\r是因为send无法自动回车,用\r模拟用户回车。

#chrony
yum install -y chrony
if [[ $name == $HOST_NAME ]];then
        sed -i '3,6s/^/#/g' /etc/chrony.conf
        sed -i '7s/^/server controller iburst/g' /etc/chrony.conf
        echo "allow $network_segment_IP" >> /etc/chrony.conf
        echo "local stratum 10" >> /etc/chrony.conf
else
        sed -i '3,6s/^/#/g' /etc/chrony.conf
        sed -i '7s/^/server controller iburst/g' /etc/chrony.conf
fi

systemctl restart chronyd
systemctl enable chronyd

整个段落所做的事:安装chrony时间同步服务,根据不同的主机做不同的配置,然后重启服务,设置开机自启
具体设置了controller节点的ip网段为主时间节点,用于同步compute节点的时间

#DNS
if [[ $name == $HOST_NAME ]];then
yum install bind -y
sed -i -e '13,14s/^/\/\//g' \
-e '19s/^/\/\//g' \
-e '37,42s/^/\/\//g' \
-e 's/recursion yes/recursion no/g' \
-e 's/dnssec-enable yes/dnssec-enable no/g' \
-e 's/dnssec-validation yes/dnssec-validation no/g' /etc/named.conf 
systemctl start named.service
systemctl enable named.service
fi
printf "\033[35mPlease Reboot or Reconnect the terminal\n\033[0m"

整个段落所做的事:在controller节点安装bind域名解析服务并做相应配置,开启服务设置开机自启
随后打印信息提示用户重启系统

安装数据库服务
#数据库是所有组件的依赖,必须要装
#在控制节点(controller)执行安装数据库的脚本
[root@controller ~]# iaas-install-mysql.sh
#默默等待脚本执行完毕即可
#至此,建议拍摄快照

安装openstack基础服务

[root@controller ~]# iaas-install-keystone.sh            
[root@controller ~]# iaas-install-glance.sh            
[root@controller ~]# iaas-install-placement.sh           
[root@controller ~]# iaas-install-nova-controller.sh       
[root@controller ~]# iaas-install-neutron-controller.sh    
[root@controller ~]# iaas-install-dashboard.sh
[root@controller ~]# iaas-install-cinder-controller.sh
[root@controller ~]# iaas-install-swift-controller.sh
#dashboard脚本执行完后,会提示这么一句信息
浏览器访问:http://192.168.100.10/dashboard
域:demo
用户名:admin
密码:000000
信息输出到root目录下的logininfo.txt中了。
#这个就是登录云平台Web界面的网址以及登录的相关参数,可以记下来
#以上脚本执行完后,再从计算节点(compute)执行以下脚本
[root@compute ~]# iaas-install-nova-compute.sh			
[root@compute ~]# iaas-install-neutron-compute.sh		
[root@compute ~]# iaas-install-cinder-compute.sh
[root@compute ~]# iaas-install-swift-compute.sh
#至此,建议拍摄快照

安装openstack高级服务

高级服务不是必装的,你需要用到再装,不然就我们这个配置,分分钟卡死给你看,这里只写安装需要执行的脚本。
注意:所有需要在两个节点都执行脚本的服务,都需要让控制节点(controller)先执行完毕,再让计算节点(compute)去执行

Trove服务
#控制节点(controller):
[root@controller ~]# iaas-install-trove.sh    
Heat服务
#控制节点(controller):
[root@controller ~]# iaas-install-trove.sh		
Ceilometer服务
#控制节点(controller):
[root@controller ~]# iaas-install-ceilometer-controller.sh
#计算节点(compute):
[root@compute ~]# iaas-install-ceilometer-compute.sh
Aodh服务
#控制节点(controller):
[root@controller ~]# iaas-install-aodh.sh	
Zun服务
#控制节点(controller):
[root@controller ~]# iaas-install-zun-controller.sh
#计算节点(compute):
[root@compute ~]# iaas-install-zun-compute.sh
Octavia服务
#控制节点(controller):
[root@controller ~]# iaas-install-octavia.sh
Manila服务
#控制节点(controller):
[root@controller ~]# iaas-install-manila-controller.sh		
#计算节点(compute):
[root@compute ~]# iaas-install-manila-compute.sh
Cloudkitty服务
#控制节点(controller):
[root@controller ~]# iaas-install-cloudkitty.sh	
Barbican服务
#Barbican服务
控制节点(controller):
[root@controller ~]# iaas-install-barbican.sh

将控制节点资源添加到云平台

由于我们是双节点搭建,计算节点(compute)的资源里(40+20G)20G用于swift、cinder和manila服务,剩下的40G除去/boot分区和/swap分区,只有约35G的空间供云平台使用,而控制节点(controller)的几十G空间却无处可用,所以将控制节点(controller)资源添加到云平台是很有必要的

编辑环境变量文件

我们编辑控制节点(controller)的环境变量文件,将compute节点的IP地址和主机名改为controller的IP地址和主机名
在这里插入图片描述

执行nova-compute脚本
#在控制节点(controller)执行nova-compute脚本
#执行过程中需要输入两次控制节点(controller)的密码
[root@controller ~]# iaas-install-nova-compute.sh 
...
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.10' (ECDSA) to the list of known hosts.
root@192.168.100.10's password: 
...
root@192.168.100.10's password: 

登录Web界面查看

执行完毕后登录云平台,在左侧导航栏【管理员】→【计算】→【主机聚合】页面即可看到控制节点(controller)资源加入了云平台
在这里插入图片描述

后语

后续我还会分享一些竞赛的相关内容,openstack运维和系统运维的部分都比较简单,可能讲的不多或者不会细讲。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值