赞
踩
搭建采用双节点安装,即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/
使用到的工具/软件:
节点规划如下
主机名 | 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,那么你还需要进行以下操作
注:使用远程连接工具,方便操作
首先,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 ~]#
控制节点(controller)采用本地源的方式配置YUM源仓库,计算节点(compute)通过ftp服务使用控制节点(controller)的资源配置YUM源仓库。
当然计算节点(compute)也可以和控制节点(controller)一样都采用本地源的方式,步骤都是一样的,但这样比较费时,还更加占用空间。
如果是网站申请的环境,两个节点均使用他们的http源即可,路径分别是:
baseurl= http://mirrors.douxuedu.com/Centos7
baseurl=http://mirrors.douxuedu.com/iaas
#首先删除系统源 [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源仓库后,我们就可以安装软件了
#在控制节点(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
#首先还是删除系统源 [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命令可以在不重启系统的情况下重新读加载分区表信息,使得新设备信息被同步
至此,该步骤完毕,可以拍摄一个快照。
#两个节点都安装
[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实现的,所以没办法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。