OpenStack项目是一个开源的云计算平台项目,是控制着计算、网络和存储三大资源的分布式系统。搭建这样的一个云平台系统,可以为我们提供IaaS(基础设施即服务)模式的云服务。本文核心不在相关的理论,因此有关云计算和OpenStack的概念等相关整体介绍可以参考下面的三篇文章:
云计算浅谈
OpenStack概念以及核心组件概述
OpenStack部署节点类型和架构
本文旨在给出实验环境下多节点一键部署OpenStack的详细实验流程,该部署为本地(使用yum源)部署的R版的OpenStack。下面笔者从自己的实验环境与所需资源、系统资源情况、部署节点规划、具体部署、部署总结过程四个方面进行简述、实践与总结。
win10宿主机、采用VMware15版本(可以自行下载,最好实验时使用该版本)上安装操作系统(Centos7.5);
Centos7.5的镜像文件、R版本的OpenStack源;资源链接如下:
链接:https://pan.baidu.com/s/1hFENGyrRTz3lOLUAordTGg
提取码:mu5x
系统资源情况主要是介绍一下笔者的宿主机硬件情况,主要考虑到OpenStack项目还是非常占用资源的,以免您在进行实验部署过程中出现意料之外的故障,当然这里的系统资源情况只是笔者笔记本的情况,具体所需硬件资源还是需要多次实验的尝试才行。
笔者实验所使用硬件资源如下:
CPU:i7 9代(i7就足够了,主要看核心线程数);内存:32G(算是标配,可以将低一些最好不低于24G);硬盘:1TSSD固态(最好超过200G的可用磁盘空间,笔者在后面部署时给的是300G)主要的硬件资源就是这三者。
下面说明一下笔者的实验部署的节点规划,节点类型在上面给出和的链接文章中有所介绍,这里不再赘述。
考虑到实验环境的硬件配置,不可能如生产环境一般诸多节点的部署,因此整体上规划为三个节点,一个控制节点,两个计算节点。还是再次熟悉一下这个架构图吧:
资源有限,实验部署只能将网络部署在控制节点上,生产环境中可万不是这般部署哈!实验部署一方面是加深理论理解,另一方面是方便熟悉一些部署流程与命令操作以及一些故障排查思路。
既然说到生产环境的部署,就大致举个例子吧:
假设部署一个具有300台服务器的OpenStack平台服务,大致上可以这样规划:
30个控制节点;30个网络节点;100个计算节点;其余的可以给存储;
说到存储,我们知道OpenStack中有Cinder块存储以及Swift对象存储,在生产环境中一般会使用另外一个大项目,CEPH分布式存储,一般我们会结合该存储方式来部署OpenStack的存储节点,并且在生产环境中,CEPH是以高可用群集来确保存储数据的高可靠和高可用性的,有关CEPH的知识,感兴趣的朋友可以查阅一下。
下面说下具体的资源分配:
控制节点:处理器内核总数为2*2的搭配;内存为8G;划分2个磁盘分别:300G、1024G(之后用于ceph存储实验);采用双网卡,一个仅主机模式(eth)(ip规划为192.168.100.20),一个NAT模式(ip规划为20.0.0.20);
计算节点:两个计算节点的资源分配都一样,处理器内核总数为2*2的搭配;内存为8G;划分2个磁盘分别:300G、1024G;网卡都为一个仅主机模式(eth)(IP地址规划为192.168.100.21和192.168.100.22);
上图也给出了各个节点上所要安装的组件,不过笔者还是考虑简化一些,方便大家进行实验,所以对一些组件进行了取舍,下面通过具体的部署流程来理解体会OpenStack的魅力。
笔者将一键部署R版本的OpenStack实验分为以下几个流程,一般在部署过程中,出现故障或其他情况的概率还是非常高的,会在文章末尾的总结中给出一些排障的思路,以供大家参考:
1、安装操作系统
2、系统环境配置
3、一键部署OpenStack
下面针对每一步进行步骤细分及演示,部署过程中对于一些网络的配置可以自行定义网段IP地址等:
上文说到实验环境部署一个控制和两个计算节点。因此需要安装三台虚拟机。下面是具体的安装流程。
1.修改本地的VMnet8网卡
下面是操作顺序
下面是更改之后的结果:
2.新建虚拟机(这里暂时不开启虚拟机)
安装Linux系统Centos7的具体流程在笔者之前的文章中已有详细介绍,这里主要将一些不同的地方通过下面的图示进行说明。参考链接:Centos7操作系统安装
控制节点的虚拟机设置如下图:
计算节点的虚拟机设置如下图(两个节点都一样):
3.上述流程设置完之后,进行开启配置安装虚拟机(最好一个一个安装,三个节点设置流程一致,举其中任意一个节点来说明)
开启后如下图说明操作:
4.安装时只需要选择最小安装,然后按照下图规划磁盘
点击磁盘分配之后的对话框进行磁盘分配
点击Done之后出现如下对话框继续进行配置
上述未给出对应步骤的截图就和前面给出安装系统的链接内的步骤一致了,从该设置完之后,下面的操作就和正常安装系统一致了。最终就正常安装可以登录即可,然后将之关闭(避免资源占用导致其他节点虚拟机安装失败,考虑到大家的硬件配置问题)。
以上就是我们的第一个步骤的整个流程,可能看上去比较多,但是当你非常熟悉VMware上安装Linux操作系统的流程其实会发现十分简单,其中最关键的就是安装之前的那两条命令不要忘了。
当安装没有任何问题的时候,我们可以逐一开启三台虚拟机(最好一个一个开启),开始第二步的操作;
这里先罗列一下该系统环境配置需要完成的主要操作步骤
1、配置各个节点的主机名、网卡,重启网络
2、关闭防火墙、核心防护、网络管理、并且设置为禁止开机自启
3、上传软件包——openstack-rocky压缩包(源),并且进行解压缩等设置
4、配置本地yum源文件
5、三个节点做免交互并且验证
6、配置时间同步
下面开始进行配置
1、配置各个节点的主机名、网卡,重启网络(这里先在本地配置了网络方便连接Xshell等远程连接工具,一方面尽可能模拟生产环境,另一方面方便代码演示)下面看一下网卡设置
控制节点配置:
[root@localhost ~]# hostnamectl set-hostname ct
[root@localhost ~]# su
[root@ct ~]# cd /etc/sysconfig/network-scripts/
#配置本地网卡eth0和nat网卡eth2
[root@ct network-scripts]# cat ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=6dc229bf-8b5b-4170-ac0d-6577b4084fc0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.100.20
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[root@ct network-scripts]# cat ifcfg-eth2
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth2
UUID=37e4a752-3820-4d15-89ab-6f3ad7037e84
DEVICE=eth2
ONBOOT=yes
IPADDR=20.0.0.20
NETMASK=255.255.255.0
GATEWAY=20.0.0.2
#配置resolv.conf文件用于访问外网
[root@ct network-scripts]# cat /etc/resolv.conf
nameserver 8.8.8.8
#重启网络,进行测试
[root@ct ~]# ping www.baidu.com
PING www.wshifen.com (104.193.88.123) 56(84) bytes of data.
64 bytes from 104.193.88.123 (104.193.88.123): icmp_seq=1 ttl=128 time=182 ms
64 bytes from 104.193.88.123 (104.193.88.123): icmp_seq=2 ttl=128 time=182 ms
^C
--- www.wshifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 182.853/182.863/182.874/0.427 ms
计算节点网卡配置:(除了ip地址不一样其他都一样)
[root@localhost ~]# hostnamectl set-hostname c1
[root@localhost ~]# su
[root@c1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=d8f1837b-ce71-4465-8d6f-97668c343c6a
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.100.21
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
#计算机节点2上配置ip地址为192.168.100.22
配置三个节点上的/etc/hosts文件:
cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.20 ct
192.168.100.21 c1
192.168.100.22 c2
#测试是否可以互相ping通
root@ct ~]# ping c1
PING c1 (192.168.100.21) 56(84) bytes of data.
64 bytes from c1 (192.168.100.21): icmp_seq=1 ttl=64 time=0.800 ms
64 bytes from c1 (192.168.100.21): icmp_seq=2 ttl=64 time=0.353 ms
^C
--- c1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.353/0.576/0.800/0.224 ms
[root@ct ~]# ping c2
PING c2 (192.168.100.22) 56(84) bytes of data.
64 bytes from c2 (192.168.100.22): icmp_seq=1 ttl=64 time=0.766 ms
64 bytes from c2 (192.168.100.22): icmp_seq=2 ttl=64 time=0.316 ms
^C
--- c2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.316/0.541/0.766/0.225 ms
[root@c1 ~]# ping c2
PING c2 (192.168.100.22) 56(84) bytes of data.
64 bytes from c2 (192.168.100.22): icmp_seq=1 ttl=64 time=1.25 ms
64 bytes from c2 (192.168.100.22): icmp_seq=2 ttl=64 time=1.05 ms
64 bytes from c2 (192.168.100.22): icmp_seq=3 ttl=64 time=0.231 ms
^C
--- c2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.231/0.846/1.255/0.442 ms
2、关闭防火墙、核心防护、网络管理、并且设置为禁止开机自启(三个节点都需要进行下面命令的配置,这里实验环境中使用OpenStack之前尽量对这些服务进行检查)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vi /etc/sysconfig/selinux
SELINUX=disabled
systemctl stop NetworkManager
systemctl disable NetworkManager
3、上传软件包——openstack-rocky压缩包(源),并且进行解压缩等设置
笔者使用的是xftp工具上传的三个节点都上传,上传之后进行解压到/opt目录下
如下所示
[root@ct ~]# ls
anaconda-ks.cfg openstack_rocky.tar.gz
[root@ct ~]# tar -zxf openstack_rocky.tar.gz -C /opt/
[root@ct ~]# cd /opt/
[root@ct opt]# ls
openstack_rocky
[root@ct opt]# du -h
2.4M ./openstack_rocky/repodata
306M ./openstack_rocky
306M .
4、配置本地yum源文件(注意将虚拟机镜像文件处于已连接状态,在虚拟机设置中查看,或者查看右下角的光驱图标是否有绿点显示,一般默认是连接状态)这里在控制节点上演示,其余节点上相同操作即可。
4.1、挂载系统镜像
[root@ct opt]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Mar 6 05:02:52 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=0d4b2a40-756a-4c83-a520-83289e8d50ca / xfs defaults 0 0
UUID=bd59f052-d9bc-47e8-a0fb-55b701b5dd28 /boot xfs defaults 0 0
UUID=8ad9f9e7-92db-4aa2-a93d-1fe93b63bd89 swap swap defaults 0 0
/dev/sr0 /mnt iso9660 defaults 0 0
[root@ct opt]# mount -a
mount: /dev/sr0 is write-protected, mounting read-only
[root@ct opt]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 xfs 291G 1.6G 290G 1% /
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 3.9G 12M 3.8G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 134M 881M 14% /boot
tmpfs tmpfs 781M 0 781M 0% /run/user/0
/dev/sr0 iso9660 4.2G 4.2G 0 100% /mnt
4.2、yum源备份创建编写新的源文件
[root@ct opt]# cd /etc/yum.repos.d/
[root@ct yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[root@ct yum.repos.d]# mkdir backup
[root@ct yum.repos.d]# mv C* backup/
[root@ct yum.repos.d]# vi local.repo
[root@ct yum.repos.d]# cat local.repo
[openstack]
name=openstack
baseurl=file:///opt/openstack_rocky #该路径为解压软件包源的路径
gpgcheck=0
enabled=1
[centos]
name=centos
baseurl=file:///mnt
gpgcheck=0
enabled=1
4.3、修改yum.conf文件,将keepcache置为1,表示保存缓存
[root@ct yum.repos.d]# head -10 /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1 #只需要修改该参数
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
[root@ct yum.repos.d]# yum clean all #清空所有软件包
Loaded plugins: fastestmirror
Cleaning repos: centos openstack
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
[root@ct yum.repos.d]# yum makecache #建立软件包本地缓存
Loaded plugins: fastestmirror
Determining fastest mirrors
centos | 3.6 kB 00:00:00
openstack | 2.9 kB 00:00:00
(1/7): centos/group_gz | 166 kB 00:00:00
(2/7): centos/filelists_db | 3.1 MB 00:00:01
(3/7): centos/primary_db | 3.1 MB 00:00:01
(4/7): centos/other_db | 1.3 MB 00:00:00
(5/7): openstack/primary_db | 505 kB 00:00:00
(6/7): openstack/filelists_db | 634 kB 00:00:00
(7/7): openstack/other_db | 270 kB 00:00:00
Metadata Cache Created
5.三个节点之间做免交互,并且进行验证
ssh-keygen -t rsa #一路回车即可,下面遇到交互是输入yes以及登录的虚拟机的root的密码即可
ssh-copy-id ct
ssh-copy-id c1
ssh-copy-id c2
这样为了保证实验的安全和验证之前的设置我们先拍好快照然后重新启动虚拟机来验证这些配置(每个节点上都要进行下面的验证,这里以控制节点为例)
[root@ct ~]# ls
anaconda-ks.cfg openstack_rocky.tar.gz
[root@ct ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@ct ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:NetworkManager(8)
[root@ct ~]# setenforce ?
setenforce: SELinux is disabled
#再次确认一下免交互是否成功
[root@ct ~]# ssh c1
Last login: Sun Mar 8 13:11:32 2020 from c2
[root@c1 ~]# exit
logout
Connection to c1 closed.
[root@ct ~]# ssh c2
Last login: Sun Mar 8 13:14:18 2020 from gateway
[root@c2 ~]#
6、配置时间同步
该步骤是非常关键的,尤其是在我们的生产环境中,设想若是各个服务器之间的时间无法同步,那么针对许多服务和业务都是无法进行的,甚至会导致重大事故。
本次实验环境就同步阿里云的时钟服务器为例,以控制节点同步阿里云服务器,而两个计算节点通过ntpd服务同步控制节点时间。
控制节点配置:
[root@ct ~]# yum -y install ntpdate
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package ntpdate.x86_64 0:4.2.6p5-28.el7.centos will be installed
--> Finished Dependency Resolution
//...//省略部分内容
Installed:
ntpdate.x86_64 0:4.2.6p5-28.el7.centos
Complete!
#同步阿里云时钟服务器
[root@ct ~]# ntpdate ntp.aliyun.com
8 Mar 05:20:32 ntpdate[9596]: adjust time server 203.107.6.88 offset 0.017557 sec
[root@ct ~]# date
Sun Mar 8 05:20:40 EDT 2020
[root@ct ~]# yum -y install ntp
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package ntp.x86_64 0:4.2.6p5-28.el7.centos will be installed
--> Processing Dependency: libopts.so.25()(64bit) for package: ntp-4.2.6p5-28.el7.centos.x86_64
--> Running transaction check
---> Package autogen-libopts.x86_64 0:5.18-5.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==========================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================
Installing:
ntp x86_64 4.2.6p5-28.el7.centos centos 549 k
Installing for dependencies:
autogen-libopts x86_64 5.18-5.el7 centos 66 k
Transaction Summary
==========================================================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 615 k
Installed size: 1.5 M
Downloading packages:
--------------------------------------------------------------------------------------------------------------------------
Total 121 MB/s | 615 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : autogen-libopts-5.18-5.el7.x86_64 1/2
Installing : ntp-4.2.6p5-28.el7.centos.x86_64 2/2
Verifying : autogen-libopts-5.18-5.el7.x86_64 1/2
Verifying : ntp-4.2.6p5-28.el7.centos.x86_64 2/2
Installed:
ntp.x86_64 0:4.2.6p5-28.el7.centos
Dependency Installed:
autogen-libopts.x86_64 0:5.18-5.el7
Complete!
修改ntp主配置文件
保存文件后重启服务,关闭chronyd.service服务
[root@ct ~]# systemctl disable chronyd.service
Removed symlink /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@ct ~]# systemctl restart ntpd
[root@ct ~]# systemctl enable ntpd
两个计算节点上配置
[root@c1 ~]# yum -y install ntpdate
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package ntpdate.x86_64 0:4.2.6p5-28.el7.centos will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==========================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================
Installing:
ntpdate x86_64 4.2.6p5-28.el7.centos centos 86 k
Transaction Summary
==========================================================================================================================
Install 1 Package
Total download size: 86 k
Installed size: 121 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : ntpdate-4.2.6p5-28.el7.centos.x86_64 1/1
Verifying : ntpdate-4.2.6p5-28.el7.centos.x86_64 1/1
Installed:
ntpdate.x86_64 0:4.2.6p5-28.el7.centos
Complete!
[root@c1 ~]# ntpdate ct
8 Mar 05:36:26 ntpdate[9562]: step time server 192.168.100.20 offset -28798.160949 sec
[root@c1 ~]# crontab -e
#写入周期性计划任务后保存退出,例如:*/30 * * * * /usr/sbin/ntpdate ct >> /var/log/ntpdate.log
no crontab for root - using an empty one
crontab: installing new crontab
在控制节点进行操作
#安装openstack-packstack工具用于生成openstack应答文件(txt文本格式)
[root@ct ~]# yum install -y openstack-packstack
[root@ct ~]# packstack --gen-answer-file=openstack.txt
[root@ct ~]# ls
anaconda-ks.cfg openstack_rocky.tar.gz openstack.txt
重点在于如何修改:这里不具体说明,可以在阅读完该文章后,下篇文章将具体介绍该应答文件的配置参数
下面给出哪些行需要更改的内容,细心修改
41行:y-n
50行:y-n
97行:192.168.100.11,192.168.100.12
557行:20G
817 :physnet1
862 :physnet1:br-ex
873:br-ex:eth2
1185:y-n
#还有一些网段需要修改以及密码这里使用sed正则表达式来全局修改
[root@ct ~]# sed -i -r 's/(.+_PW)=.+/\1=sf144069/' openstack.txt
[root@ct ~]# sed -i -r 's/20.0.0.20/192.168.100.20/g' openstack.txt
命令进行一键部署安装
[root@ct ~]# packstack --answer-file=openstack.txt
Welcome to the Packstack setup utility
The installation log file is available at: /var/tmp/packstack/20200308-055746-HD3Zl3/openstack-setup.log
Installing:
Clean Up [ DONE ]
Discovering ip protocol version [ DONE ]
Setting up ssh keys [ DONE ]
Preparing servers [ DONE ]
Pre installing Puppet and discovering hosts' details [ DONE ]
Preparing pre-install entries [ DONE ]
Setting up CACERT [ DONE ]
Preparing AMQP entries [ DONE ]
Preparing MariaDB entries [ DONE ]
Fixing Keystone LDAP config parameters to be undef if empty[ DONE ]
Preparing Keystone entries [ DONE ]
...//省略部分内容
在各个节点终端(xshell终端在开一个连接控制节点的终端使用下面的命令查看日志信息)
tail -f /var/log/messages
出现下图所示情况时就表示目前没有问题,接下来就是耐心等待
出现下图则说明部署成功了
我们可以使用浏览器(Google)登录仪表板验证一下可以参考下面文章的末尾介绍:
OpenStack入门——理论篇(二):OpenStack的节点类型和架构(含登录的仪表板界面示例)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。