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  $? ]; thenecho -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
elsehostnamectl 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 ]];thenssh-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 ]];thensed -i '3,6s/^/#/g' /etc/chrony.confsed -i '7s/^/server controller iburst/g' /etc/chrony.confecho "allow $network_segment_IP" >> /etc/chrony.confecho "local stratum 10" >> /etc/chrony.conf
elsesed -i '3,6s/^/#/g' /etc/chrony.confsed -i '7s/^/server controller iburst/g' /etc/chrony.conf
fisystemctl 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运维和系统运维的部分都比较简单,可能讲的不多或者不会细讲。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JaveEE进阶----Spring Web MVC入门

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、什么是 Spring Web MVC&#xff1f;&#xff1f;1.1MVC 定义1.2 什么是Spring MVC ?1.3过浏览器和用户程序交互 二、 RequestMapping 注解三、Postman 前言…

容器基本概念_从虚拟化技术_到容器化技术_开通青云服务器_并远程连接_容器安装---分布式云原生部署架构搭建007

这一部分,属于以前都会用到的,会快速过一遍,对于关键技术问题会加以说明 https://www.yuque.com/leifengyang/oncloud文档地址在这里,可以看,有些命令可以复制使用 可以看到容器的出现就是 目的就是,让你做的所有的软件,都可以一键部署启动 打包就是docker build 然后: 对于…

陈晓婚前婚后大变样

陈晓婚前婚后大变样&#xff1f;陈妍希揭秘甜蜜与现实的碰撞在娱乐圈的星光璀璨中&#xff0c;有一对夫妻总是津津乐道&#xff0c;那就是陈晓和陈妍希。他们的爱情故事&#xff0c;从荧幕到现实&#xff0c;一直备受关注。然而&#xff0c;近日陈妍希在节目中透露&#xff0c;…

差分总结(一维+二维)

差分&#xff0c;可以视作前缀和的逆运算。 前缀和用于去求一个区间段的和 差分用于改变一个区间的值&#xff08;比如说某个区间都加上或者减去一个数&#xff09; P2367 语文成绩 #include<bits/stdc.h> using namespace std; #define int long long int n,p; int a…

RabbitMQ 学习笔记

RabbitMQ学习笔记 一些概念 Broker &#xff1a;RabbitMQ服务。 virtual host&#xff1a; 其实就是分组。 Connection&#xff1a;连接&#xff0c;生产者消费者与Broker之间的TCP连接。 Channel&#xff1a;网络信道&#xff0c;轻量级的Connection&#xff0c;使用Chann…

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

Minio服务搭建 前言 这道题是比赛时考到的&#xff0c;没找到具体题目&#xff0c;但在公布的样题中找到了&#xff0c;虽然很短~ 使用提供的 OpenStack 云平台&#xff0c;申请一台云主机&#xff0c;使用提供的软件包安装部署 MINIO 服务并使用 systemctl 管理 Minio是一个…

HTML静态网页成品作业(HTML+CSS)——手机电子商城网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)

1.pytest数据参数化 假设你需要测试一个登录功能&#xff0c;输入用户名和密码后验证登录结果。可以使用参数化实现多组输入数据的测试: 测试正确的用户名和密码登录成功 测试正确的用户名和错误的密码登录失败 测试错误的用户名和正确的密码登录失败 测试错误的用户名和密码登…

定时器-前端使用定时器3s轮询状态接口,2min为接口超时

背景 众所周知&#xff0c;后端是处理不了复杂的任务的&#xff0c;所以经过人家的技术讨论之后&#xff0c;把业务放在前端来实现。记录一下这次的离大谱需求吧。 如图所示&#xff0c;这个页面有5个列表&#xff0c;默认加载计划列表。但是由于后端的种种原因&#xff0c;这…

C++ | Leetcode C++题解之第171题Excel表列序号

题目&#xff1a; 题解&#xff1a; class Solution { public:int titleToNumber(string columnTitle) {int number 0;long multiple 1;for (int i columnTitle.size() - 1; i > 0; i--) {int k columnTitle[i] - A 1;number k * multiple;multiple * 26;}return num…

QT中利用QMovie实现动态加载效果

1、效果 2、代码 #include "widget.h" #include "ui_widget.h" #include <QLabel> #include <QMovie>

YOLOv10训练自己的数据集(图像目标检测)

目录 1、下载代码 2、环境配置 3、准备数据集 4、yolov10训练 可能会出现报错&#xff1a; 1、下载代码 源码地址&#xff1a;https://github.com/THU-MIG/yolov10 2、环境配置 打开源代码&#xff0c;在Terminal中&#xff0c;使用conda 创建虚拟环境配置 命令如下&a…

Python基础教程(二十五):内置函数整理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

将AI带入企业,红帽选择了开源

伴随着生成式AI与大模型技术的飞速发展&#xff0c;业界人士对于生成式AI应用在企业的落地也愈发关注。 近日在2024红帽媒体Open讲上&#xff0c;红帽全球副总裁兼大中华区总裁曹衡康深入剖析了AI在混合云中的应用及其带来的资源利用最大化优势&#xff0c;并同与会媒体共同探讨…

Redis-数据类型-List

文章目录 1、通过客户端连接redis2、切换到第二个数据库 db13、查看当前库所有key4、从左边插入一个或多个值5、按照索引下标获得元素(从左到右)6、针对key指定的list&#xff0c;从右边放入元素7、返回list集合的长度8、从左边弹出一个元素。弹出返回删除9、从右边弹出一个元素…

《米小圈动画汉字》汉字教育动画化:传统与创新的完美融合!

汉字&#xff0c;作为中华文化的瑰宝&#xff0c;承载着千百年来中华民族的智慧和思想。每一个汉字不仅仅是一个符号&#xff0c;更是一段历史的见证&#xff0c;一种文化的传承。在当今全球化的背景下&#xff0c;汉字教育面临着新的挑战与机遇。在这种背景下&#xff0c;如何…

关于如何得到Mindspore lite所需要的.ms模型

关于如何得到Mindspore lite所需要的.ms模型 一、.ckpt模型文件转.mindir模型二、.mindir模型转.ms模型三、其它3.1 代码3.2 数据 四、参考文档 一、.ckpt模型文件转.mindir模型 由于要得到ms模型&#xff0c;mindspore的所有模型里面&#xff0c;是必须要用mindir模型才可以进…

STM32C8T6与TB6612

好久没写博客了&#xff0c;今天水一篇 接线

【Unity设计模式】状态编程模式

前言 最近在学习Unity游戏设计模式&#xff0c;看到两本比较适合入门的书&#xff0c;一本是unity官方的 《Level up your programming with game programming patterns》 ,另一本是 《游戏编程模式》 这两本书介绍了大部分会使用到的设计模式&#xff0c;因此很值得学习 本…

豆瓣电影top250网页爬虫

设计思路 选择技术栈:确定使用Python及其相关库&#xff0c;如requests用于发送网络请求&#xff0c;获取网址&#xff0c;用re(正则表达式)或BeautifulSoup用于页面内容解析。设计流程:规划爬虫的基本流程&#xff0c;包括发起请求、接受响应、解析内容、存储数据等环节。模块…