技术分享
VMware+CentOS安装单机版OpenStack
2020-08-05
目录
1 部署前准备
1.1 虚拟机安装及配置
本文属于入门学习阶段,不建议直接在机器上安装OpenStack,因为部署过程可能会有很多问题,我们需要虚拟机的快照功能,帮助我们及时返回系统正常状态。后期实际部署时,依据虚拟机安装经验,一样可以部署成功。
虚拟机的安装步骤不再赘述,下面给出本文使用的虚拟机软件、操作系统、及虚拟机硬件配置:
名称 |
配置 |
备注 |
虚拟机软件 |
VMWare |
采用的VMware Workstation Pro14 |
操作系统 |
CentOS 7 64位 |
本文采用RDO的方式安装OpenStack,RDO是RedHat维护的,而CentOS又是RedHat的一个版本,所以采用CentOS最合适。 安装时,选择安装图形界面。系统语言,本文选择的是英文,如果你的英文没问题的话,尽量也选择英文系统,一开始用中文系统后续的OpenStack使用起来总有些问题,不知是不是这个原因。 |
虚拟机硬件需求 |
内存:>=16G 硬盘:>=100G |
如果分配给虚拟机的硬件无法达到这个要求,不要考虑安装了,因为OpenStack非常耗资源,一般的个人PC能安装上,但是跑起来非常卡。 |
1.2 CentOS源替换
CentOS默认的源是国外地址,为了防止后续的操作中存在无法访问的地址问题,我们把CentOS的源更换为国内阿里源,执行命令如下(没有特殊说明的话,后续的命令都是用root用户执行的):
//首先切换到root用户 $ su
//进入到源文件夹 $ cd /etc/yum.repos.d
//备份文件 $ mv CentOS-Base.repo CentOS-Base.repo.bak
//获取阿里源,替换默认的源 $ wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
//执行更新命令,更新系统 $ yum update |
1.3 VMTools安装
安装VMware Tools,本文后面会用到虚拟机的共享文件夹功能,而该功能是由VMware Tools提供的。VMware Tools的具体安装步骤不再赘述,网上有很多,这里说下需要注意的地方。因为我们前面执行更新命令,更新了系统,所以可能会导致出现“kernel headers不匹配”的问题,不管会不会出现,在安装VMTools前,执行下面的命令:
$ yum update kernel -y //这一步么先重启系统 $ yum install kernel-headers kernel-devel-$(uname -r) gcc make -y //然后重启系统,安装VMware Tools |
1.4 虚拟机网络配置
OpenStack的安装,需要关闭NetworkManager,在关闭的情况下也要能保证正常上网,所以我们需要对虚拟机网络进行配置。
(一)编辑ifcfg-ens33文件
这个文件可能不同的系统名称不一样,有些可能是ifcfg-eth0,也可能是其他,以自己系统为准。可以通过ifconfig命令,在联网状态下,查看那个网关名下有IP、netmask、broadcast来确定具体是哪个文件,我的如下:
//进入network-scripts文件夹 $ cd /etc/sysconfig/network-scripts/
//打开ifcfg-ens33文件 $ vi ifcfg-ens33
//修改ifcfg-ens33文件 NAME改为eth0 DEVICE改为eth0 ONBOOT改为yes 增加HWADDR=MAC地址(从虚拟机设置-->网络适配器-->高级,页面中获取)
//修改ifcfg-ens33文件名 $ mv ifcfg-ens33 ifcfg-eth0 |
(二)修改grub文件
//进入default文件夹 $ cd /etc/default
//打开grub文件 $ vi grub
//修改grub文件 在GRUB_CMD_LINELINUX项中,增加net.ifnames=0 biosdevname=0,与原有值之间空格隔开
//更新配置 $ grub2-mkconfig -o /boot/grub2/grub.cfg |
(三)虚拟机网络适配器模式
适配器配置如下图
2 OpenStack All-in-one安装
我们主要是测试研究使用,所以没有安装成分布式架构,选择了All-in-one模式,也就是所有的组件都安装在一台机器上。
2.1 准备
为了防止防火墙、NetworkManager这些网络组件可能造成的问题,我们需要在安装OpenStack之前对这些组件做一些配置,命令如下:
$ systemctl disable firewalld $ systemctl stop firewalld $ systemctl disable NetworkManager $ systemctl stop NetworkManager $ systemctl enable network $ systemctl start network |
2.2 添加软件源
我们使用RDO模式安装OpenStack,所以首先需要添加rdo源,命令如下:
$ yum install -y https://rdoproject.org/repos/rdo-release.rpm $ yum install -y centos-release-openstack-rocky $ yum-config-manager --enable openstack-rocky $ yum update -y |
2.3 安装
安装很简单,一条命令即可,只是安装的时间可能比较长,我大概等待1个小时左右安装完毕。所以只要不报错,你就耐心等待安装完成即可。安装命令如下:
$ packstack --allinone --provision-demo=n --os-neutron-ovs-bridge-mappings=extnet:br-ex --os-neutron-ovs-bridge-interfaces=br-ex:eth0 --os-neutron-ml2-type-drivers=vxlan,flat |
安装完成后,在“/root/keystons_admin”文件中,有Dashboard的访问地址,以及admin用户的密码。
3 OpenStack网络配置
为了让OpenStack上创建的虚拟机能够访问外网,并且,外网也能访问该虚拟机,需要我们对CentOS的网络,以及OpenStack的网络进行配置。
3.1 获取本机IP等信息
后续我们的操作,需要用到本机IP、DNS、Gateway等,所以,首先要获取这些信息,获取命令如下:
//获取ip $ ifconfig -a //一般是eth0这个对应的地址为IP地址
//获取DNS $ cat /etc/resolv.conf
//获取Gateway $ netstat -rn
//获取netmask 255.255.255.0 //不用额外获取,一般就用这个值 |
3.2 ifcfg文件生成和配置
(一)生成ifcfg-br-ex文件
在路径“/etc/sysconfig/network-scripts/”下创建文件ifcfg-br-ex,文件内容如下:
DEVICE=br-ex DEVICETYPE=ovs TYPE=OVSBridge BOOTPROTO=static IPADDR=192.168.122.212 # 你的IP地址 NETMASK=255.255.255.0 # 你的netmask GATEWAY=192.168.122.1 # 你的gateway DNS1=192.168.122.1 # 你的DNS ONBOOT=yes |
(二)修改ifcfg-eth0文件
ifcfg-eth0文件修改之前,请先备份,然后直接将文件内容换为下面的内容:
DEVICE=eth0 TYPE=OVSPort DEVICETYPE=ovs OVS_BRIDGE=br-ex ONBOOT=yes |
(三)生成ifcfg-bond0文件
在路径“/etc/sysconfig/network-scripts/”下创建文件ifcfg-bond0,文件内容如下:
DEVICE=bond0 DEVICETYPE=ovs TYPE=OVSPort OVS_BRIDGE=br-ex ONBOOT=yes BONDING_MASTER=yes BONDING_OPTS="mode=802.3ad" |
上述操作完成后,重启虚拟机系统即可。
3.3 OpenStack网络创建
3.3.1 用命令行创建公共网络和公共子网
参考文章地址点这里。
//进入“/root/”文件夹 $ cd /root
//切换到admin身份 $ . keystonerc_admin
//创建公共网络 $ neutron net-create external_network --provider:network_type flat --provider:physical_network extnet --router:external
//创建公共子网 $ neutron subnet-create --name public_subnet --enable_dhcp=False --allocation-pool=start=192.168.122.10,end=192.168.122.20 \ --gateway=192.168.122.1 external_network 192.168.122.0/24 |
上面需要注意的地方是创建公共子网的时候,gateway与你虚拟机的gateway保持一致,其他IP比如start、end、external_network这些要保证与你的IP网段是一致的,比如你的IP是“192.168.114.8”,那这些网段必须也是“192.168.114”而不是上表中的“192.168.122”。
3.3.2 创建Project
Project我的理解是一个租户的概念,任何资源都是以租户为单位而存在的,所以,我们先创建Project。以admin的身份登录Dashboard,参照下图开始创建Project
然后在弹出的页面中,填充Project的name即可,其他都可以不同填采用默认值,直接创建Project
3.3.3 创建用户
Project创建完毕,我们要为这个Project创建一个用户,这样才能够通过Dashboard去管理该Project中的资源。参照下图,开始创建用户:
在弹出的页面中,只用填写带“*”的必填项,其他采用默认值。
需要注意的是,有个“Project”选项,这里选择刚刚创建的Project。
选择完毕后,直接创建用户即可。
3.3.4 为用户创建私有网络及子网
用上一步创建的用户登录Dashboard,按照下图开始创建私有网络
在弹出页面的第一个Tab页中,只要填写网络名称即可,其他保持默认:
第二个Tab页,填写子网信息,其中需要注意的是“Network Address”这项,比如你的IP是“192.168.114.1”,那么这里你可以填写“192.168.100.0/24”,也就是保持“192.168”不变,第三段可以自己定义但不能与IP或者其他私有网段重复,第四段从0开始。“Gateway IP”这一项可以不填,默认会根据你填写的“Network Address”直接分配一个给你,比如“192.168.100.1”。
第三个Tab页保持默认即可,然后创建网络
3.3.5 创建Router
router是用来连接公网和私网的,为了让上一步创建的私网能够进行内外网交互,我们需要创建一个Router,按下图开始创建:
在弹出的页面中,填写Router的名字,选择外网(也就是我们用命令行创建的公网),其他保持默认,点击创建即可:
3.3.6 创建接口
我们需要为私网创建一个接口,把它暴露给创建的私网子网,以此保证能够内外网正常通信。按照下图开始创建接口:
进入到详情页面,选择“Interfaces”标签,点击创建接口:
在弹出页面,选择刚刚创建的私网子网,其他保持默认或不填,创建即可:
3.4 OpenStack创建实例
3.4.1 创建镜像
实例依托于镜像,镜像就是一个操作系统的镜像文件,本文选择Ubuntu为例来创建。你可以按照这篇文章的说明,选择其他系统镜像。你可能是在本机下载的镜像文件,需要传输到虚拟机中,这时候就要用到VMTools提供的共享文件夹功能了,因为这样最方便,无需再从本机拷贝到虚拟机。
用admin账户登录Dashboard,在“Admin”菜单下的“Images”创建,千万不要到“Project”下创建,按照下图开始镜像创建:在弹出的页面中除了必填项,其他选择默认即可,需要注意的是,按照上面给的文章地址,你下载的镜像文件格式一般都要选择“QCOW2”,然后创建镜像即可:
3.4.2 创建安全组
因为我们的实例要开放各种端口,并且支持SSH访问,所以我们首先创建一个安全组。按照下图创建:
在弹出框中,只用填写安全组名称即可:
然后,在安全组列表页面,找到我们刚刚创建的安全组,选择“Manage Rules”操作:
在Rule列表页面,点击“Add Rule”按钮添加规则:
添加下列五个规则:
Egress IPv4 ICMP – 0.0.0.0/0 (CIDR) Ingress IPv4 ICMP – 0.0.0.0/0 (CIDR) Ingress IPv4 TCP 1 – 65535 0.0.0.0/0 (CIDR) Egress IPv4 TCP 1 – 65535 0.0.0.0/0 (CIDR) Egress IPv4 TCP - 22(SSH) |
创建过程如下图:
到此,安全组规则创建完毕。
3.4.3 创建实例
用刚刚创建的用户登录Dashboard。创建实例有一个问题,你无论是创建Ubuntu还是CentOS的实例,默认情况下只能采用私钥的方式登录,也就是说,你在OpenStack实例的Console中根本无法登录,它需要用户名和密码,而默认情况你根本不知道密码是什么(用户名Ubuntu一般就是ubuntu,CentOS一般就是centos)。在正式创建之前,我们需要更改一个配置文件。
(一)修改配置文件
修改配置文件是为了让我们在创建实例的时候,OpenStack能允许我们自己注入密码。
//修改文件 $ vi /etc/nova/nova.conf
//找到“inject_password”将其值更改为True inject_password=True |
修改完后重启系统。
(二)创建镜像
在Instances菜单页面点击“Launch Instance”
弹出页面中“Details”标签页,只需要填写name,其他保持默认:在“Source”标签页,选择可用的镜像,这里需要注意的是“Create New Volume”选项,选择No,因为选择Yes会在创建的时候报一些奇怪的错误,暂时没找到问题所在。
在“Flavor”标签页,主要是选择实例的配置规格,因为后续我要在实例中安装docker,并且Ubuntu镜像本身也不小,所以选择了“mi.small”,你可以根据自己的需求来:
在“Networks”页面,选择我们已经创建的私网:
在“Security Groups”标签页,选择我们创建的安全组:
在“Key Pair”标签页,因为我们没创建过RSA秘钥,所以这里直接点击“Create Key Pair”,一定要注意保留好创建后的私钥。:
保留好私钥后,我们在"~/.ssh/"文件夹下,创建一个与KeyPair同名的文件,并把私钥黏贴进去,方便我们后续用SSH+私钥的方式访问实例。
在“Configuration”页面中添加如图所示的内容,就是给我们的实例对应的用户名一个密码,其他采用默认值:需要填写的内容给出如下:
#!/bin/sh passwd centos<<EOF 123456 123456 EOF sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config service ssh restart |
到此,未提到的标签页内容可以不用管,直接点击“Launch Instance”创建实例即可。创建实例需要等待一段时间,待实例状态为Active,电源状态为Running,即可访问:
3.4.4 为实例分配浮动IP
分配浮动IP,这样外网就可以通过这个IP访问实例。按照下图进行操作:
在弹出页面点击“+”号:
接下来在“Pool”这里选择我们创建的外网,然后点击“Allocate IP”:
这时候会返回上一个页面,点击“Associate”即可。
3.4.5 登录实例
(一)Console登录实例
可以通过OpenStack提供的Console登录实例,但这种速度很慢,方法如下:
在新的页面中点击Send CtrlAltDel,不然不接受键盘输入。等让你输入用户名密码时,直接输入用户名ubuntu以及创建实例时定义的密码即可。(但是,创建实例时定义的密码需要等一段不知多久的时间才能生效,有可能还不行,所以如果你不巧碰到了不行的情况,那就用SSH+私钥的方式登录吧。)
(二)SSH登录实例
SSH登录有两种方式,一种是SSH+私钥,一种是SSH+用户+密码。第二种方式由于密码生效时间的不确定性,所以接下来主要介绍第一种方式。两种都很简单,SSH的方式比Console方式用起来要顺畅很多,Console实在是不方便又很卡。
//进入到SSH文件夹 $ cd ~/.ssh/
//找到我们前面保存私钥的那个文件,并用下列命令运行 $ ssh -i ITzGeek-Key ubuntu@192.168.1.201
//命令详解 ITzGeek-Key ------ 私钥所在的文件名 ubuntu ------------ 实例对应的登录名 192.168.1.201 ----- 实例分配到的Float IP
//通过下面的命令修改root密码 $ sudo passwd root |
如果你用ssh命令登录报“拒绝连接”,那有可能是你的实例还未完全启动成功,需要等一段时间,你可以查看Console的输出,如果输出需要你输入用户名密码的信息,那么再尝试用ssh登录,一般就可以了。
4 问题处理
4.1 ubuntu更新失败问题
在OpenStack中创建ubuntu实例后,执行“sudo apt-get update”命令,有时候会报下面的错误:
这是由于未设置妥当的DNS服务器导致的,解决方式如下:
//修改文件 $ sudo vi /etc/resolv.conf //添加内容 nameserver 8.8.8.8 //保存后,再执行更新操作即可 $ sudo apt-get update |
需要注意的是,resolv.conf这个文件,无论是ubuntu还是centos,系统重启后都会恢复原样,强制不恢复的方法可在网上搜索,我一般都是每次重启重新修改一下。

- 标签:
-
行业资讯