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运维和系统运维的部分都比较简单,可能讲的不多或者不会细讲。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/730040.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

免费分享:2021中亚大湖区数据库-地下水矿化度(附下载方法)

中亚大湖区位于欧亚大陆核心&#xff0c;其脆弱的生态系统在干旱与半干旱气候下对干旱变化极为敏感&#xff0c;易引发一系列生态问题。因此&#xff0c;利用站点观测数据、卫星遥感产品和模型模拟等多源技术深入研究该区域生态环境&#xff0c;对于保护其生态平衡和可持续发展…

真实还原汽车引擎声浪——WT2003Hx语音芯片方案

PART.01 产品市场 WT2003Hx是一款高性能的MP3音频解码芯片&#xff0c;具有成本效益、低功耗和高可靠性等特点&#xff0c;适用于多种场景&#xff0c;包括但不限于汽车娱乐系统、玩具、教育设备以及专业音响设备等。在模拟汽车引擎声的应用中&#xff0c;这一芯片的特性被特…

Marin说PCB之如何在CST仿真软件中添加三端子的电容模型?

上期文章小编我给诸位道友们分享了Murata家的三端子电容的一些特性&#xff0c;这期文章接着上回把三端子电容模型如何在CST软件中搭建给大家分享一下&#xff0c;小编我辛辛苦苦兢兢业业的给各位帖子们免费分享我的一些设计心得&#xff0c;这些按照小编我华山派门派的要求都是…

人脸识别——可解释的人脸识别(XFR)人脸识别模型是根据什么来识别个人的

可解释性人脸识别&#xff08;XFR&#xff09;&#xff1f; 人脸识别有一个任务叫1:N&#xff08;识别&#xff09;。这个任务将一个人的照片与N张注册照片进行比较&#xff0c;找出相似度最高的人。 这项任务用于刑事调查和出入境点。在犯罪调查中&#xff0c;任务从监控摄像…

音频基础知识和音频指标

音频基础知识 声音 声音&#xff08;sound)是由物体振动产生的声波。物体在一秒钟之内振动的次数叫做频率&#xff0c;单位是赫兹&#xff0c;字母Hz。人耳可以识别的声音频率在 20 Hz~20000 Hz之间&#xff1b; 声音三要素&#xff1a; 响度 响度&#xff0c;…

昨天gitee网站访问不了,开始以为电脑哪里有问题了

昨天gitee网站下午访问不了&#xff0c;开始以为是什么毛病。 结果同样的网络&#xff0c;手机是可以访问的。 当然就ping www.gitee.com 结果也下面那样是正常的 以为是好的&#xff0c;但就是访问www.gitee.com也是不行&#xff0c;后来用阿里云的服务器curl访问是下面情况&…

芯片制作流程

1、系统需求-》设计-》光罩-》芯片制造-》检测-》封装-》测试。 光罩-》光阻涂布-》曝光-》显影和烘烤-》刻蚀-》等离子体去胶-》湿法刻蚀 化学机械研磨-》薄膜沉积-》制作金属薄膜-》化学气相沉积-》离子注入

2023数A题——WLAN网络信道接入机制建模

A题——WLAN网络信道接入机制建模 思路&#xff1a;该题主要考察的WLAN下退避机制建模仿真。 资料获取 问题1&#xff1a; 假设AP发送包的载荷长度为1500Bytes&#xff08;1Bytes 8bits&#xff09;&#xff0c;PHY头时长为13.6μs&#xff0c;MAC头为30Bytes&#xff0c;MA…

Comparison method violates its general contract! 神奇的报错

发生情况 定位到问题代码如下&#xff08;脱敏处理过后&#xff09;&#xff0c;意思是集合排序&#xff0c;如果第一个元素大于第二个元素&#xff0c;比较结果返回1&#xff0c;否则返回-1&#xff0c;这里粗略的认为小于和等于是一样的结果 List<Integer> list Arr…

下载caj viewer查看caj论文

前言 CAJ是“中国学术期刊全文数据库”&#xff08;China Academic Journals&#xff09;的英文缩写&#xff0c;同时也是“中国学术期刊全文数据库”中的一种文件格式。我们从CNKI&#xff08;中国知网&#xff09;下载的资料一般都是这种文件格式。 CAJ不同于PDF等&#xff…

智赢选品,OZON数据分析选品利器丨萌啦OZON数据

在电商行业的激烈竞争中&#xff0c;如何快速准确地把握市场动态、洞察消费者需求、实现精准选品&#xff0c;是每个电商卖家都面临的挑战。而在这个数据驱动的时代&#xff0c;一款强大的数据分析工具无疑是电商卖家们的得力助手。今天&#xff0c;我们就来聊聊这样一款选品利…

JSP基础知识概述

目录 JSP一、什么是JSP1.1 概念1.2 创建JSP1.3 JSP编写Java代码1.4 JSP实现原理 二、JSP与HTML集成2.1 普通脚本2.2 声明脚本2.3 输出脚本2.4 JSP指令2.5 动作标签 三、内置对象3.1 四大域对象 JSP 一、什么是JSP 1.1 概念 简化的Servlet设计&#xff0c;在HTMl标签中嵌套Jav…

华为重磅官宣:超9亿台、5000个头部应用已加入鸿蒙生态!人形机器人现身 专注AI芯片!英伟达挑战者Cerebras要上市了

内容提要 华为表示&#xff0c;盘古大模型5.0加持&#xff0c;小艺能力全新升级。小艺智能体与导航条融为一体&#xff0c;无处不在&#xff0c;随时召唤。只需将文字、图片、文档“投喂”小艺&#xff0c;即可便捷高效处理文字、识别图像、分析文档。 正文 据华为终端官方微…

高速公路声光预警定向广播助力安全出行

近年来&#xff0c;高速重大交通事故屡见不鲜&#xff0c;安全管控一直是高速运营的重中之重。如何利用现代化技术和信息化手段&#xff0c;创新、智能、高效的压降交通事故的发生概率&#xff0c;优化交通安全管控质量&#xff0c;是近年来交管部门的主要工作&#xff0c;也是…

如何恢复电脑硬盘删除数据?提供一套实用恢复方案

在数字化时代&#xff0c;电脑硬盘中存储的数据对于个人和企业来说都至关重要。然而&#xff0c;有时我们可能会不小心删除了一些重要文件&#xff0c;或者因为某种原因导致数据丢失。这时候&#xff0c;恢复硬盘上被删除的数据就显得尤为重要。本文将为您提供一套实用的电脑硬…

stable diffusion 模型和lora融合

炜哥的AI学习笔记——SuperMerger插件学习 - 哔哩哔哩接下来学习的插件名字叫做 SuperMerger,它的作用正如其名,可以融合大模型或者 LoRA,一般来说会结合之前的插件 LoRA Block Weight 使用,在调整完成 LoRA 模型的权重后使用改插件进行重新打包。除了 LoRA ,Checkpoint 也…

Starlink全系卫星详细介绍,波段频谱、激光星间链路技术、数据传输速率等等

Starlink全系卫星详细介绍&#xff0c;波段频谱、激光星间链路技术、数据传输速率等等。 Starlink是SpaceX公司开发的一个低轨道&#xff08;LEO&#xff09;卫星网络系统&#xff0c;旨在为全球用户提供高速宽带互联网服务。截至2024年6月&#xff0c;Starlink已经发射并运行…

90 岁老人靠一辆自行车年赚 170 亿,捷安特如何打造山地车极致产品力?

一位富家小开在中年时经商失败&#xff0c;38岁时从零开始创业&#xff0c;最终在自行车整车市场占据了70%的份额&#xff0c;他是怎么做到的&#xff1f; 一家曾为美国自行车品牌代工的台湾工厂&#xff0c;成功从ToB转型为ToC业务&#xff0c;从90%的代工业务转变为全球最大…

创新实训2024.05.01日志:document-loaders

在建立易学知识库的过程中&#xff0c;仅仅有向量数据库以及词嵌入模型、分词器是不够的&#xff0c;因为我们有大量的非结构化文本&#xff08;如doc,pdf&#xff09;或者是图片需要上传&#xff08;例如pdf里面有图片&#xff09;&#xff0c;此时词嵌入无法直接向向量数据库…

Scikit-Learn梯度提升决策树(GBDT)

Scikit-Learn梯度提升决策树 1、梯度提升决策树(GBDT)1.1、Boosting方法1.2、GBDT的原理1.3、GBDT回归的损失函数1.4、梯度下降与梯度提升1.5、随机森林与GBDT1.6、GBDT的优缺点2、Scikit-Learn梯度提升决策树(GBDT)2.1、Scikit-Learn GBDT回归2.1.1、Scikit-Learn GBDT回归…