OpenStack多节点一键部署(超详细)
前言
? OpenStack项目是一个开源的云计算平台项目,是控制着计算、网络和存储三大资源的分布式系统。搭建这样的一个云平台系统,可以为我们提供IaaS(基础设施即服务)模式的云服务。本文核心不在相关的理论,因此有关云计算和OpenStack的概念等相关整体介绍可以参考下面的三篇文章:
? 本文旨在给出实验环境下多节点一键部署OpenStack的详细实验流程,该部署为本地(使用yum源)部署的R版的OpenStack。下面笔者从自己的实验环境与所需资源、系统资源情况、部署节点规划、具体部署、部署总结过程四个方面进行简述、实践与总结。
一、实验环境与所需资源
1.1系统环境
win10宿主机、采用VMware15版本(可以自行下载,最好实验时使用该版本)上安装操作系统(Centos7.5);
1.2资源包
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地址等:
4.1安装操作系统
? 上文说到实验环境部署一个控制和两个计算节点。因此需要安装三台虚拟机。下面是具体的安装流程。
1.修改本地的VMnet8网卡
下面是操作顺序
下面是更改之后的结果:
2.新建虚拟机(这里暂时不开启虚拟机)
安装Linux系统Centos7的具体流程在笔者之前的文章中已有详细介绍,这里主要将一些不同的地方通过下面的图示进行说明。参考链接:Centos7操作系统安装
控制节点的虚拟机设置如下图:
计算节点的虚拟机设置如下图(两个节点都一样):
3.上述流程设置完之后,进行开启配置安装虚拟机(最好一个一个安装,三个节点设置流程一致,举其中任意一个节点来说明)
开启后如下图说明操作:
4.安装时只需要选择最小安装,然后按照下图规划磁盘
点击磁盘分配之后的对话框进行磁盘分配
点击Done之后出现如下对话框继续进行配置
上述未给出对应步骤的截图就和前面给出安装系统的链接内的步骤一致了,从该设置完之后,下面的操作就和正常安装系统一致了。最终就正常安装可以登录即可,然后将之关闭(避免资源占用导致其他节点虚拟机安装失败,考虑到大家的硬件配置问题)。
? 以上就是我们的第一个步骤的整个流程,可能看上去比较多,但是当你非常熟悉VMware上安装Linux操作系统的流程其实会发现十分简单,其中最关键的就是安装之前的那两条命令不要忘了。
当安装没有任何问题的时候,我们可以逐一开启三台虚拟机(最好一个一个开启),开始第二步的操作;
4.2系统环境配置
这里先罗列一下该系统环境配置需要完成的主要操作步骤
1、配置各个节点的主机名、网卡,重启网络 2、关闭防火墙、核心防护、网络管理、并且设置为禁止开机自启 3、上传软件包——openstack-rocky压缩包(源),并且进行解压缩等设置 4、配置本地yum源文件 5、三个节点做免交互并且验证 6、配置时间同步
下面开始进行配置
1、配置各个节点的主机名、网卡,重启网络(这里先在本地配置了网络方便连接Xshell等远程连接工具,一方面尽可能模拟生产环境,另一方面方便代码演示)下面看一下网卡设置
控制节点配置:
[ ~]# hostnamectl set-hostname ct [ ~]# su [ ~]# cd /etc/sysconfig/network-scripts/ #配置本地网卡eth0和nat网卡eth1 [ 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 [ network-scripts]# cat ifcfg-eth1 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=eth1 UUID=37e4a752-3820-4d15-89ab-6f3ad7037e84 DEVICE=eth1 ONBOOT=yes IPADDR=20.0.0.20 NETMASK=255.255.255.0 GATEWAY=20.0.0.2 #配置resolv.conf文件用于访问外网 [ network-scripts]# cat /etc/resolv.conf nameserver 8.8.8.8 #重启网络,进行测试 [ ~]# 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地址不一样其他都一样)
[ ~]# hostnamectl set-hostname c1 [ ~]# su [ ~]# 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通 ~]# 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 [ ~]# 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 [ ~]# 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目录下
如下所示
[ ~]# ls anaconda-ks.cfg openstack_rocky.tar.gz [ ~]# tar -zxf openstack_rocky.tar.gz -C /opt/ [ ~]# cd /opt/ [ opt]# ls openstack_rocky [ opt]# du -h 2.4M ./openstack_rocky/repodata 306M ./openstack_rocky 306M .
4、配置本地yum源文件(注意将虚拟机镜像文件处于已连接状态,在虚拟机设置中查看,或者查看右下角的光驱图标是否有绿点显示,一般默认是连接状态)这里在控制节点上演示,其余节点上相同操作即可。
4.1、挂载系统镜像
[ 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 [ opt]# mount -a mount: /dev/sr0 is write-protected, mounting read-only [ 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源备份创建编写新的源文件
[ opt]# cd /etc/yum.repos.d/ [ 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 [ yum.repos.d]# mkdir backup [ yum.repos.d]# mv C* backup/ [ yum.repos.d]# vi local.repo [ 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,表示保存缓存
[ 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 [ 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 [ 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
这样为了保证实验的安全和验证之前的设置我们先拍好快照然后重新启动虚拟机来验证这些配置(每个节点上都要进行下面的验证,这里以控制节点为例)
[ ~]# ls anaconda-ks.cfg openstack_rocky.tar.gz [ ~]# 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) [ ~]# 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) [ ~]# setenforce ? setenforce: SELinux is disabled #再次确认一下免交互是否成功 [ ~]# ssh c1 Last login: Sun Mar 8 13:11:32 2020 from c2 [ ~]# exit logout Connection to c1 closed. [ ~]# ssh c2 Last login: Sun Mar 8 13:14:18 2020 from gateway [ ~]#
6、配置时间同步
? 该步骤是非常关键的,尤其是在我们的生产环境中,设想若是各个服务器之间的时间无法同步,那么针对许多服务和业务都是无法进行的,甚至会导致重大事故。
? 本次实验环境就同步阿里云的时钟服务器为例,以控制节点同步阿里云服务器,而两个计算节点通过ntpd服务同步控制节点时间。
控制节点配置:
[ ~]# 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! #同步阿里云时钟服务器 [ ~]# ntpdate ntp.aliyun.com 8 Mar 05:20:32 ntpdate[9596]: adjust time server 203.107.6.88 offset 0.017557 sec [ ~]# date Sun Mar 8 05:20:40 EDT 2020 [ ~]# 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服务
[ ~]# systemctl disable chronyd.service Removed symlink /etc/systemd/system/multi-user.target.wants/chronyd.service. [ ~]# systemctl restart ntpd [ ~]# systemctl enable ntpd
两个计算节点上配置
[ ~]# 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! [ ~]# ntpdate ct 8 Mar 05:36:26 ntpdate[9562]: step time server 192.168.100.20 offset -28798.160949 sec [ ~]# crontab -e #写入周期性计划任务后保存退出,例如:*/30 * * * * /usr/sbin/ntpdate ct >> /var/log/ntpdate.log no crontab for root - using an empty one crontab: installing new crontab
4.3一键部署OpenStack
在控制节点进行操作
#安装openstack-packstack工具用于生成openstack应答文件(txt文本格式) [ ~]# yum install -y openstack-packstack [ ~]# packstack --gen-answer-file=openstack.txt [ ~]# 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:eth1 1185:y-n
#还有一些网段需要修改以及密码这里使用sed正则表达式来全局修改 [ ~]# sed -i -r ‘s/(.+_PW)=.+/\1=sf144069/‘ openstack.txt [ ~]# sed -i -r ‘s/20.0.0.20/192.168.100.20/g‘ openstack.txt
命令进行一键部署安装
[ ~]# 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的节点类型和架构(含登录的仪表板界面示例)
五、部署总结和排障思路
? 笔者在部署过程中也遇到了一些意外错误和问题,但是基本上都解决了,这些大都是一些小问题,代码写错,某些内容更改错误等等。不过还是给点建议和排障思路给大家:
? 首先,对于这些较大的实验项目,我们需要先理清思路和部署顺序;
? 其次,安装过程中,由于是实验过程,需要习惯性地进行备份(虚拟机上我们可以拍摄快照),这也是一种存储方式哈。这样我们可以在之后出现问题无法解决等情况时,可以通过这种快照机制回滚到当初部署成功的阶段的时间点。这样可以为我们节省大量的时间;
? 接着就是排障,先看懂ERROR的含义,如果一眼看出问题所在可以直接修改;如果没有什么解决思路,就去检查自己的环境是否有问题,服务是否开启,该停的服务是否关闭等;如果环境没什么问题就去查看一下自己的配置文件是否有误,例如其中某些配置文件的相关参数是否修改正确等等;如果还是无法解决就需要自行去查找资料,例如去百度,看看官方文档,看看前辈们或者之前的工程师是否遇到过类似的问题,是如何解决的。
? 具体的排障还是需要时间经验的积累的,本文的主要目的是为了演示整个在本地部署多节点的R版本的OpenStack平台的过程,方便初学者进行实验尝试,理论部分笔者还在持续更新中,希望读者可以继续关注阅读!谢谢!