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 | 内存/处理器数量/磁盘 | 节点 |
---|---|---|---|
controller | 192.168.100.10 | 6GB/4/40GB | 控制节点 |
compute | 192.168.100.20 | 4GB/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虚拟机(克隆也行,不过要用完整克隆,并且还需要额外的操作),设置的区别在于:
- compute需要额外添加一块硬盘,作为cinder和swift还有manila的存储磁盘。
- 设置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
的解释:
-
/dev/null
是说将命令的返回结果(输出)追加到/dev/null文件中而/dev/null文件是Linux的空文件设备,所有往这个文件里面写入的内容都会丢失,正因如此,它还有"黑洞"的俗称
-
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相比,有以下区别:
iptables | firewalld | |
---|---|---|
实现方式 | 链式规则 | 区域和服务 |
默认放行规则 | 允许 | 拒绝 |
优缺点 | 修改规则后需全部刷新才可生效 | 允许动态更新规则而不破坏现有会话和连接 |
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运维和系统运维的部分都比较简单,可能讲的不多或者不会细讲。