① 什么是OpenStack
本文详细介绍了Openstack的网络原理和实现,主要内容包括:Neutron的网络架构及网络模型还有neutron虚拟化的实现和对二三层网桥的理解。
一、Neutron概述
Neutron是一个用Python写的分布式软件项目,用来实现OpenStack中的虚拟网络服务,实现软件定义网络。Neutron北向有自己的REST API,中间有自己的业务逻辑层,有自己的DB和进程之间通讯的消息机制。同时Neutron常见的进程包括Neutron-server和Neutron-agent,分布式部署在不同的操作系统。
OpenStack发展至今,已经经历了20个版本。虽然版本一直在更替,发展的项目也越来越多,但是Neutron作为OpenStack三大核心之一,它的地位是不会动摇的。只不过当初的Neutron也只是Nova项目的一个模块而已,到F版本正式从中剥离,成为一个正式的项目。
从Nova-Network起步,经过Quantum,多年的积累Neutron在网络各个方面都取得了长足的发展。其主要的功能为:
(1)支持多租户隔离
(2)支持多种网络类型同时使用
(3)支持隧道技术(VXLAN、GRE)
(4)支持路由转发、SNAT、DNAT技术
(5)支持Floating IP和安全组
多平面租户私有网络
图中同时有VXLAN和VLAN两种网络,两种网络之间互相隔离。租户A和B各自独占一个网络,并且通过自己的路由器连接到了外部网络。路由器为租户的每个虚拟机提供了Float IP,完成vm和外网之间的互相访问。
二、Neutron架构及网络模型
1、Neutron架构
Neutron-sever可以理解为类似于nova-api那样的一个专门用来接收API调用的组件,负责将不同的api发送到不同Neutron plugin。
Neutron-plugin可以理解为不同网络功能实现的入口,接收server发来的API,向database完成一些注册信息。然后将具体要执行的业务操作和参数通知给对应的agent来执行。
Agent就是plugin在设备上的代理,接受相应的plugin通知的业务操作和参数,并转换为具体的命令行操作。
总得来说,server负责交互接收请求,plugin操作数据库,agent负责具体的网络创建。
2、Neutron架构之Neutron-Server
(1)Neutron-server的本质是一个Python Web Server Gateway Interface(WSGI),是一个Web框架。
(2)Neutron-server接收两种请求:
REST API请求:接收REST API请求,并将REST API分发到对应的Plugin(L3RouterPlugin)。
RPC请求:接收Plugin agent请求,分发到对应的Plugin(NeutronL3agent)。
3、Neutron架构之Neutron-Plugin
Neutron-plugin分为Core-plugin和Service-plugin。
Core-plugin:ML2负责管理二层网络,ML2主要包括Network、Subnet、Port三类核心资源,对三类资源进行操作的REST API是原生支持的。
Service-plugin:实现L3-L7网络,包括Router、Firewall、VPN。
4、Neutron架构之Neutron-Agent
(1)Neutron-agent配置的业务对象是部署在每一个网络节点或者计算节点的网元。
(2)网元区分为PNF和VNF:
PNF:物理网络功能,指传统的路由器、交换机等硬件设备
VNF:虚拟网络功能,通过软件实现的网络功能(二层交换、三层路由等)
(3)Neutron-agent三层架构如下图:
Neutron-agent架构分为三层,北向为Neutron-server提供RPC接口,供Neutron server调用,南向通过CLI协议栈对Neutron VNF进行配置。在中间会进行两种模型的转换,从RPC模型转换为CLI模型。
5、Neutron架构之通信原理
(1)Neutron是OpenStack的核心组件,官网给出Neutron的定义是NaaS。
(2)Naas有两层含义:
对外接口:Neutron为Network等网络资源提供了RESTful API、CLI、GUI等模型。
内部实现:利用Linux原生或者开源的虚拟网络功能,加上硬件网络,构建网络。
Neutron接收到API请求后,交由模块WSGI进行初步的处理,然后这个模块通过Python API调用neutron的Plugin。Plugin做了相应的处理后,通过RPC调用Neutron的Agent组件,agent再通过某种协议对虚拟网络功能进行配置。其中承载RPC通信的是AMQP server,在部署中常用的开源软件就是RabbitMQ
6、Neutron架构之控制节点网络模型
控制节点没有实现具体的网络功能,它对各种虚拟设备做管理配合的工作。
(1)Neutron:Neutron-server核心组件。
(2)API/CLI:Neutron进程通过API/CLI接口接收请求。
(3)OVS Agent:Neutron通过RPC协议与agent通信。
控制节点部署着各种服务和Neutron-server,Neutron-server通过api/cli接口接收请求信息,通过RPC和Agent进行交互。Agent再调用ovs/linuxbridge等网络设备创建网络。
7、Neutron架构之计算节点网络模型
(1)qbr:Linux Bridge网桥
(2)br-int:OVS网桥
(3)br-tun:OVS隧道网桥
(4)VXLAN封装:网络类型的转变
8、Neutron架构之网络节点网络模型
网络节点部署了Router、DHCP Server服务,网桥连接物理网卡。
(1)Router:路由转发
(2)DHCP: 提供DNS、DHCP等服务。
(3)br-ex: 连接物理网口,连接外网
三、Neutron虚拟化实现功能及设备介绍
1、Neutron虚拟化实现功能
Neutron提供的网络虚拟化能力包括:
(1)二层到七层网络的虚拟化:L2(virtual Switch)、L3(virtual Router 和 LB)、L47(virtual Firewall )等
(2)网络连通性:二层网络和三层网络
(3)租户隔离性
(4)网络安全性
(5)网络拓展性
(6)REST API
(7)更高级的服务,包括 LBaaS,FWaaS,VPNaaS 等
2、Neutron虚拟化功能之二层网络
(1)按照用户权限创建网络:
Provider network:管理员创建,映射租户网络到物理网络
Tenant network:租户创建的普通网络
External network:物理网络
(2)按照网络类型:
Flat network:所有租户网络在一个网络中
Local network:只允许在服务器内通信,不通外网
VLAN network:基于物理VLAN实现的虚拟网络
VXLAN network:基于VXLAN实现的虚拟网络
3、Neutron虚拟化实现功能之租户隔离
Neutron是一个支持多租户的系统,所以租户隔离是Neutron必须要支持的特性。
(1)租户隔离三种含义:管理面隔离、数据面的隔离、故障面的隔离。
(2)不同层次租户网络的隔离性
租户与租户之间三层隔离
同一租户不同网络之间二层隔离
同一租户同一网络不同子网二层隔离
(3)计算节点的 br-int 上,Neutron 为每个虚机连接 OVS 的 access port 分配了内部的 VLAN Tag。这种 Tag 限制了网络流量只能在 Tenant Network 之内。
(4)计算节点的 br-tun 上,Neutron 将内部的 VLAN Tag 转化为 VXLAN Tunnel ID,然后转发到网络节点。
(5)网络节点的 br-tun 上,Neutron 将 VXLAN Tunnel ID 转发了一一对应的 内部 VLAN Tag,使得 网络流被不同的服务处理。
(6)网络节点的 br-int 上连接的 DHCP 和 L3 agent 使用 Linux Network Namespace 进行隔离。
4、Neutron虚拟化实现功能之租户网络安全
除了租户隔离以外 Neutron还提供数据网络与外部网络的隔离性。
(1)默认情况下,所有虚拟机通过外网的流量全部走网络节点的L3 agent。在这里,内部的固定IP被转化为外部的浮动IP地址
(1)Neutron还利用Linux iptables特性,实现其Security Group特性,从而保证访问虚机的安全性
(3)Neutron利用网络控制节点上的Network Namespace中的iptables,实现了进出租户网络的网络防火墙,从而保证了进出租户网络的安全性。
5、Neutron虚拟化设备
(1)端口:Port代表虚拟网络交换机上的一个虚拟交换机端口
虚拟机的网卡连接到Port上就会拥有MAC地址和IP地址
(2)虚拟交换机:Neutron默认采用开源的Openvswitch,
同时还支持Linux Bridge
(3)虚拟路由器VR:
- 路由功能
- 一个VR只属于一个租户,租户可以有多个VR
- 一个VR可以有若干个子网
- VR之间采用Namespace隔离
四、Neutron网桥及二三层网络理解
1、Neutron-Local-Bridge
仅用于测试;网桥没有与物理网卡相连VM不通外网。
图中创建了两个local network,分别有其对应的qbr网桥。Vm123的虚拟网卡通过tap连接到qbr网桥上。其中2和3属于同一个network可以通信,1属于另一个网络不能和23进行通信。并且qbr网桥不连物理网卡,所以说local网络虚拟机只能同网络通信,不能连通外网。
2、Neutron-Flat-Bridge
- Linux Bridge直接与物联网卡相连
- 每个Flat独占一个物理网卡
- 配置文件添加响应mapping
Flat网络是在local网络的基础上实现不同宿主机之间的二层互联,但是每个flat network都会占用一个宿主机的物理接口。其中qbr1对应的flatnetwork 连接 eth1 qbr2,两个网络的虚机在物理二层可以互联。其它跟local network类似。
3、Neutron-VLAN-Bridge
在基于linux bridge的vlan网络中,eht1物理网卡上创建了两个vlan接口,1.1连接到qbr1网桥,1.2连接到了qbr2网桥。在这种情况下vm通过eth1.1或者eth1.2发送到eth1的包会被打上各自的vlan id。此时vm2和vm3属于同一个network所以是互通的,vm与vm2和vm3不通。
4、Neutron-VXLAN-Bridge
这个是以Linux bridge作agent的Vxlan网络:
Vxlan网络比Vxlan网络多了个VXLAN隧道,在Openstack中创建好内部网络和实例后,agent就会在计算节点和网络节点创建一对vxlan vtep.组成隧道的两个端点。
Vxlan连接在eth0网口。在网络节点多了两个组件dhcp 和router,他们分别通过一对veth与qbr网桥连接在一起,多个dhcp和路由之间使用namesapce隔离,当vm产生ping包时,发往linux 网桥qbr1,通过网桥在vxlan12上封装数据包,数据通过eth0网卡出计算节点到网络节点的eth0,在vxlan12解包。到达路由器之后经过nat地址转换,从eth1出去访问外网,由租户网络到运营商网络再到外部网络。
5、Neutron-VLAN-OVS
与Linux bridge不同,openvswitch 不是通过eth1.1 eth1.2这样的vlan接口来隔离不同的vlan,而是通过openvswitch的流表规则来指定如何对进出br-int的数据进行转发,实现不同vlan的隔离。
图中计算节点的所有虚拟机都连接在int网桥上,虚拟机分为两个网络。Int网桥会对到来的数据包根据network的不同打上vlan id号,然后转发到eth网桥,eth网桥直连物理网络。这时候流量就从计算节点到了网络节点。
网络节点的ehx int网桥的功能相似,多了一个ex网桥,这个网桥是管理提前创建好的,和物理网卡相连,ex网桥和int网桥之间通过一对patch-port相连,虚拟机的流量到达int网桥后经过路由到ex网桥。
6、Neutron-VXLAN-OVS
Vxlan的模型和vlan的模型十分相似,从表面上来看,他俩相比只有一个不同,vlan对应的是ethx网桥,而vxlan对应的是tun网桥。
在这里ethx和tun都是ovs网桥,所以说两者的差别不是实现组件的差别而是组件所执行功能的差别,ethx执行的是普通二层交换机的功能,tun执行的是vxlan中的vtep的功能,图中俩tun对应的接口ip就是vxlan的隧道终结点ip。所以说虚机的数据包在到达tun网桥之前是打的是vlan tag,而到达tun之后会发生网络类型的转换,从vlan封装为vxlan然后到达网络节点。而之前的vlan类型的网络,虚机数据包的类型一直都是vlan。
7、物理的二层与虚拟的二层(VLAN模式)
(1)物理的二层指的是:物理网络是二层网络,基于以太网协议的广播方式进行通信。
(2)虚拟的二层指的是:Neutron实现的虚拟网络也是二层网络(openstack的vm机所用的网络必须是大二层),也是基于以太网协议的广播方式进行通信,但毫无疑问的是该虚拟网络是依赖于物理的二层网络。
(3)物理二层+虚拟二层的典型代表:VLAN网络模式。
8、物理的三层与虚拟的二层(GRE模式与VXLAN模式)
(1)物理三层指的是:物理网络是三层网络,基于IP路由的方式进行通信。
(2)虚拟的二层指的是:Neutron实现的虚拟网络仍然是二层网络(openstack的vm机所用的网络必须是大二层),仍然是基于以太网的广播方式进行通信,但毫无疑问的是该虚拟机网络是依赖于物理的三层网络,这点有点类似于VPN的概念,根本原理就是将私网的包封装起来,最终打上隧道的ip地址传输。
(3)物理三层+虚拟二层的典型代表:GRE模式与VXLAN模式。
② 如何借助OpenStack命令行工具管理虚拟机
OpenStack中有两种不同的界面用来管理云资源。一个是通过Horizon,这是基于Web的OpenStack仪表板;另一个就是通过OpenStack命令行接口(CLI)。
我在本教程中将演示如何从命令行,在OpenStack上创建或终止虚拟机。这个过程是在Havana版本的OpenStack中进行测试的。至于像OpenStack Folsom这些早期的OpenStack版本,你只要将本教程所用的命令行中的“neutron”换成“quantum”即可。
姑且假设部署的一套OpenStack系统已在某处构建并运行起来。我要使用OpenStack CLI客户程序,在现有的OpenStack系统上管理虚拟机。
安装OpenStack CLI客户程序
第一步就是安装必要的OpenStack命令行客户程序:
在Debian、Ubuntu或Linux Mint上,执行这个命令:
$ sudo apt-get install python-pip $ sudo pip install python-novaclient python-keystoneclient python-neutronclient
在CentOS、Fedora或RHEL上,执行这个命令:
$ sudo yum install python-pip $ sudo pip install python-novaclient python-keystoneclient python-neutronclient
设定环境变量
为了能够使用OpenStack CLI客户程序,你就要设定必要的环境变量。为此,创建一个名为openrc.sh的脚本,如下所示。
$ sudo vi openrc.sh export OS_USERNAME=dan export OS_PASSWORD=my_password export OS_TENANT_NAME=demo export OS_AUTH_URL=http://192.168.10.10:5000/v2.0
在上述脚本中,OS_USERNAME/OS_PASSWORD是OpenStack用户名及密码。OS_TENANT_NAME是所创建的项目的名称。OS_AUTH_URL是Keystone端点的URL。Keystone是一项OpenStack服务,负责不同的OpenStack组件之间的身份验证。你应该把192.168.10.10换成所部署的系统中运行OpenStack Keystone的那个主机的IP地址。
现在,运行openrc.sh,设定环境变量,如下所示。
$ source openrc.sh
这时候,你可以准备运行OpenStack命令行客户程序了。确认你在运行时没有遇到任何错误:
$ nova list
它显示内容为空的结果,这意味着一切都正常。
构建网络
现在,你可以准备构建一个连接虚拟机的网络了。
创建一个名为"xmolo"的新网络。
$ neutron net-create xmolo
创建一个名为"xmolo_subnet"的新子网,并将其添加到刚构建的那个网络。
$ neutron subnet-create xmolo 10.0.0.0/24 --name xmolo_subnet
检查可用网络列表,确认该网络已成功构建。
$ neutron net-list
在输出结果中,要记下你所构建的网络的"ID"(编号)。之后你创建虚拟机时,要用到这个编号。
启动虚拟机
在创建并启动虚拟机之前,你首先要知道几个信息。
查明你想创建的那个虚拟机的类型。为此,运行下面这个命令。
$ nova flavor-list
在该示例中,我准备选择最小的虚拟机类型"m1.nano",它有64 MB内存、1个虚拟处理器(vCPU)、无磁盘。记下这个类型名称。
下一步,为你的虚拟机选择所要使用的虚拟机映像。为了列出所有可用的虚拟机映像,请使用这个命令:
$ nova image-list
记下你想为虚拟机使用的那个映像的ID。
下一步,为你的虚拟机选择所要使用的安全组的类型。安全组为你的虚拟机决定了入站访问规则。想了解可用的安全组,请运行该命令:
$ nova secgroup-list
想检查"默认"安全组的访问规则,请使用这个命令:
$ nova secgroup-list-rules default
在该示例中,我准备为虚拟机选择名为"default"的安全组。该安全组里面正好没有规则。
最后,我们使用到目前为止所获得的信息,创建一个虚拟机。指定你已了解的虚拟机类型(--flavor)、虚拟机映像的ID(--image)以及网络的ID(net-id=)。把[vm-name]换成你虚拟机的名称,这个名称需要很独特。
$ nova boot [vm-name] --flavor m1.nano --image d2b830be-3 7df-4fa9-90b2-91c472d19aaa --security-groups default -ni c net-id=1cbcddcf-3a7d-481f-b6f2-a97c6447c925
为了确认虚拟机已成功创建并启动,请运行这个命令:
$ nova list
停止、暂停和清除虚拟机
当你停止运行某个虚拟机时,它完全关闭。另一方面,你暂停虚拟机时,它临时被冻结,随时可以从暂停状态重新启动。在这两种情况下,虚拟机映像仍留在OpenStack里面。
想停止虚拟机,运行这个命令:
$ nova stop [vm-name]
想暂停虚拟机,运行这个命令:
$ nova suspend [vm-name]
如果你想从OpenStack清除已终停止虚拟机或已暂停虚拟机的映像,请使用这个命令:
$ nova delete [vm-name]
③ 使用 OpenStack 有什么好处
易于访问和管理,企业可以通过三种主要方式访问和管理 OpenStack 部署。1.命令行工具:安装和配置 OpenStack 命令行界面 (CLI) 后,用户可以使用它来部署、优化和管理整个数据中心所需的计算、存储和网络资源。2.基于 Web 的 GUI 仪表板:系统管理员可以通过基于Web的仪表板管理 OpenStack 部署。3.面向软件开发人员的 API:OpenStack有许多RESTful API 可供软件开发人员访问操作工具,例如监控服务、资源优化、计费和业务逻辑,以及测试或基准测试等。Accrets国际提供给企业的私有云解决方案,是利用开源软件OpenStack作为基础,包含OpenStack所有的固有优势,除此之外,Accrets的工程师们将通过最先进的科技手段优化现有的数据中心以及私有云IT基础设施,为用户提供更加便捷、快速、智能、安全的企业服务∞
④ Openstack
Openstack是一个开源的云平台管理项目,可以用于构建公有云或者私有云平台,提供了基础设施及服务(Iaas)的解决方案,OpenStack是一个云操作系统,通过数据中心可控制计算、存储、网络等资源池,OpenStack覆盖了网络、虚拟化、操作系统、服务器等各个方面,通过openstack可以启动,分配和管理虚拟机资源,所有的管理也都可以通过前端界面就可以完成。我们部署openstack之后,可以通过这个平台创建各个不同版本的虚拟机,如centos,windows等系统,可以按需分配cpu,内存,磁盘给这些虚拟机,同时还可以提供网络支持。
操作系统版本选择centos7.6
1.机器规划
修改虚拟机的ip变成静态ip,controller节点的配置如下所示:
vim /etc/hosts 最后一行添加如下内容
192.168.124.200上操作
192.168.124.201上操作
(1)上传openstack离线软件包到root目录下(在controller和computer节点操作)
在root下创建一个目录openstack,然后把软件包解压到这个目录下
(2)解压之后会出现一个openstack目录,把openstack目录整体移动到/下(controller和computer节点操作)
(3)重新配置yum源(controller和computer节点都操作)
生成一个新的openstack的yum源
这里只在controller上操作:
(1)查看openstack应答文件内容
(2)修改openstack.txt文件,修改的内容如下
(3)查看修改之后的openstack.txt文件中安装哪些
看到y的表示是需要安装的组件
(4)基于应答文件安装组件
(5)安装过程需要查看iptables状态,在controller和computer节点
如果发现iptables处于active状态,需要停掉
(6)看到如下说明安装成功
**** Installation completed successfully ******
(1)启动rabbitmq的管理界面,controller节点操作
(2)在浏览器访问
192.168.124.200:15672
账号:guest
密码:guest
在浏览器输入:
192.168.124.200
账号:admin
密码:16e424911af144ca
登陆之后显示界面
获取密码的方法,在controller节点上,可以看到PASSWORD是16e424911af144ca
显示如下所示
⑤ ⑩ OpenStack高可用集群部署方案(train版)—OpenStack对接Ceph存储
参考Ceph官方安装文档
Openstack环境中,数据存储可分为临时性存储与永久性存储。
临时性存储:主要由本地文件系统提供,并主要用于nova虚拟机的本地系统与临时数据盘,以及存储glance上传的系统镜像;
永久性存储:主要由cinder提供的块存储与swift提供的对象存储构成,以cinder提供的块存储应用最为广泛,块存储通常以云盘的形式挂载到虚拟机中使用。
Openstack中需要进行数据存储的三大项目主要是nova项目(虚拟机镜像文件),glance项目(共用模版镜像)与cinder项目(块存储)。
下图为cinder,glance与nova访问ceph集群的逻辑图:
ceph与openstack集成主要用到ceph的rbd服务,ceph底层为rados存储集群,ceph通过librados库实现对底层rados的访问;
openstack各项目客户端调用librbd,再由librbd调用librados访问底层rados;
实际使用中,nova需要使用libvirtdriver驱动以通过libvirt与qemu调用librbd;cinder与glance可直接调用librbd;
写入ceph集群的数据被条带切分成多个object,object通过hash函数映射到pg(构成pg容器池pool),然后pg通过几圈crush算法近似均匀地映射到物理存储设备osd(osd是基于文件系统的物理存储设备,如xfs,ext4等)。
CEPH PG数量设置与详细介绍
在创建池之前要设置一下每个OSD的最大PG 数量
PG PGP官方计算公式计算器
参数解释:
依据参数使用公式计算新的 PG 的数目:
PG 总数= ((OSD总数*100)/最大副本数)/池数
3x100/3/3=33.33 ;舍入到2的N次幕为32
openstack集群作为ceph的客户端;下面需要再openstack集群上进行ceph客户端的环境配置
在openstack所有控制和计算节点安装ceph Octopus源码包,centos8有默认安装,但是版本一定要跟连接的ceph版本一致
glance-api 服务运行在3个控制节点, 因此三台控制节点都必须安装
cinder-volume 与 nova-compute 服务运行在3个计算(存储)节点; 因此三台计算节点都必须安装
将配置文件和密钥复制到openstack集群各节点
配置文件就是生成的ceph.conf;而密钥是 ceph.client.admin.keyring ,当使用ceph客户端连接至ceph集群时需要使用的密默认密钥,这里我们所有节点都要复制,命令如下
※Glance 作为openstack中镜像服务,支持多种适配器,支持将镜像存放到本地文件系统,http服务器,ceph分布式文件系统,glusterfs和sleepdog等开源的分布式文件系统上。目前glance采用的是本地filesystem的方式存储,存放在默认的路径 /var/lib/glance/images 下,当把本地的文件系统修改为分布式的文件系统ceph之后,原本在系统中镜像将无法使用,所以建议当前的镜像删除,部署好ceph之后,再统一上传至ceph中存储。
※Nova 负责虚拟机的生命周期管理,包括创建,删除,重建,开机,关机,重启,快照等,作为openstack的核心,nova负责IaaS中计算重要的职责,其中nova的存储格外重要,默认情况下,nova将instance的数据存放在/var/lib/nova/instances/%UUID目录下,使用本地的存储空间。使用这种方式带来的好处是:简单,易实现,速度快,故障域在一个可控制的范围内。然而,缺点也非常明显:compute出故障,上面的虚拟机down机时间长,没法快速恢复,此外,一些特性如热迁移live-migration,虚拟机容灾nova evacuate等高级特性,将无法使用,对于后期的云平台建设,有明显的缺陷。对接 Ceph 主要是希望将实例的系统磁盘文件储存到 Ceph 集群中。与其说是对接 Nova,更准确来说是对接 QEMU-KVM/libvirt,因为 librbd 早已原生集成到其中。
※Cinder 为 OpenStack 提供卷服务,支持非常广泛的后端存储类型。对接 Ceph 后,Cinder 创建的 Volume 本质就是 Ceph RBD 的块设备,当 Volume 被虚拟机挂载后,Libvirt 会以 rbd 协议的方式使用这些 Disk 设备。除了 cinder-volume 之后,Cinder 的 Backup 服务也可以对接 Ceph,将备份的 Image 以对象或块设备的形式上传到 Ceph 集群。
使用ceph的rbd接口,需要通过libvirt,所以需要在客户端机器上安装libvirt和qemu,关于ceph和openstack结合的结构如下,同时,在openstack中,需要用到存储的地方有三个:
为 Glance、Nova、Cinder 创建专用的RBD Pools池
需要配置hosts解析文件,这里最开始已经配置完成,如未添加hosts解析需要进行配置
在cephnode01管理节点上操作 ;命名为:volumes,vms,images
记录:删除存储池的操作
在cephnode01管理节点上操作 ;
针对pool设置权限,pool名对应创建的pool
nova-compute与cinder-volume都部署在计算节点 ,不必重复操作,如果计算节点与存储节点分离需要分别推送;
全部计算节点配置;以compute01节点为例;
Glance 为 OpenStack 提供镜像及其元数据注册服务,Glance 支持对接多种后端存储。与 Ceph 完成对接后,Glance 上传的 Image 会作为块设备储存在 Ceph 集群中。新版本的 Glance 也开始支持 enabled_backends 了,可以同时对接多个存储提供商。
写时复制技术(-on-write) :内核只为新生成的子进程创建虚拟空间结构,它们复制于父进程的虚拟空间结构,但是不为这些段分配物理内存,它们共享父进程的物理空间,当父子进程中有更改相应的段的行为发生时,再为子进程相应的段分配物理空间。写时复制技术大大降低了进程对资源的浪费。
全部控制节点进行配置;以controller01节点为例;
只修改涉及glance集成ceph的相关配置
变更配置文件,重启服务
ceph官网介绍 QEMU和块设备
对接 Ceph 之后,通常会以 RAW 格式创建 Glance Image,而不再使用 QCOW2 格式,否则创建虚拟机时需要进行镜像复制,没有利用 Ceph RBD COW 的优秀特性。
总结
将openstack集群中的glance镜像的数据存储到ceph中是一种非常好的解决方案,既能够保障镜像数据的安全性,同时glance和nova在同个存储池中,能够基于-on-write(写时复制)的方式快速创建虚拟机,能够在秒级为单位实现vm的创建。
全部计算节点进行配置; 以compute01节点为例;只修改glance集成ceph的相关配置
全部计算节点重启cinder-volume服务;
任意openstack控制节点上查看;
在任意控制节点为cinder的ceph后端存储创建对应的type,在配置多存储后端时可区分类型;
为ceph type设置扩展规格,键值 volume_backend_name ,value值 ceph
任意控制节点上创建一个1GB的卷 ;最后的数字1代表容量为1G
查看创建好的卷
openstack创建一个空白 Volume,Ceph相当于执行了以下指令
从镜像创建 Volume 的时候应用了 Ceph RBD COW Clone 功能,这是通过 glance-api.conf [DEFAULT] show_image_direct_url = True 来开启。这个配置项的作用是持久化 Image 的 location,此时 Glance RBD Driver 才可以通过 Image location 执行 Clone 操作。并且还会根据指定的 Volume Size 来调整 RBD Image 的 Size。
一直存在的cirros_qcow2镜像为对接ceph之前的镜像,现在已无法使用,所以将之删除
在openstack上从镜像创建一个Volume,Ceph相当于执行了以下指令
任意控制节点操作;
查看快照详细信息
在openstack上对镜像的卷创建快照,Ceph相当于执行了以下指令
如果说快照时一个时间机器,那么备份就是一个异地的时间机器,它具有容灾的含义。所以一般来说 Ceph Pool backup 应该与 Pool images、volumes 以及 vms 处于不同的灾备隔离域。
https://www.cnblogs.com/luohaixian/p/9344803.html
https://docs.openstack.org/zh_CN/user-guide/backup-db-incremental.html
一般的,备份具有以下类型:
在虚拟磁盘映像的计算节点上使用本地存储有一些缺点:
Nova 为 OpenStack 提供计算服务,对接 Ceph 主要是希望将实例的系统磁盘文件储存到 Ceph 集群中。与其说是对接 Nova,更准确来说是对接 QEMU-KVM/libvirt ,因为 librbd 早已原生集成到其中。
如果需要从ceph rbd中启动虚拟机,必须将ceph配置为nova的临时后端;
推荐在计算节点的配置文件中启用rbd cache功能;
为了便于故障排查,配置admin socket参数,这样每个使用ceph rbd的虚拟机都有1个socket将有利于虚拟机性能分析与故障解决;
相关配置只涉及全部计算节点ceph.conf文件的[client]与[client.cinder]字段,以compute163节点为例
全部计算节点配置 ceph.conf文件相关的 [client] 与 [client.cinder] 字段,以compute01节点为例;
在全部计算节点配置nova后端使用ceph集群的vms池,以compute01节点为例;
在全部计算节点操作;
在全部计算节点操作,以compute01节点为例;
以下给出libvirtd.conf文件的修改处所在的行num
⑥ 全面认识openstack,它到底是什么包含什么
(1)官方的解释相信大家都已经了解了,不了解也没有关系。现在从常识的角度来给大家解释和说明。
OpenStack是一个云平台管理的项目,它不是一个软件。这个项目由几个主要的组件组合起来完成一些具体的工作。
OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目,OpenStack被公认作为基础设施即服务(简称IaaS)资源的通用前端。
如果这些还不明白,那么从另外的角度给大家介绍:
首先让大家看下面两个图就很简单明了了:
此图为openstack的登录界面
下面是openstack的一个管理界面
从这两个图,相信有一定开发经验,就能看出openstack是什么了。可以说他是一个框架,甚至可以从软件的角度来理解它。如果不明白,就从传统开发来讲解。不知道你是否了解oa,erp等系统,如果不了解可以到网上去找,资料一大把。他和oa,erp有什么不同。很简单就是openstack是用做云计算的一个平台,或则一个解决方案。它是云计算一个重要组成部分。
上面对openstack有了一个感性的认识。
(2)openstack能干什么。
大家都知道阿里云平台,网络云平台,而阿里云平台据传说就是对openstack的二次开发。对于二次开发相信只要接触过软件的都会明白这个概念。不明白的自己网上去查一下。也就是说openstack,可以搭建云平台,什么云平台,公有云,私有云。现在网络在招聘的私有云工程师,应该就是这方面的人才。
(3)openstack自身都包含什么
以下是5个OpenStack的重要构成部分:
l Nova – 计算服务
l Swift – 存储服务
l Glance – 镜像服务
l Keystone – 认证服务
l Horizon – UI服务
图1 OpenStack基本构架
下图展示了Keystone、Dashboard二者与其它OpenStack部分的交互。
下面详细介绍每一个服务:
(一)OpenStack计算设施—-Nova Nova是OpenStack计算的弹性控制器。OpenStack云实例生命期所需的各种动作都将由Nova进行处理和支撑,这就意味着Nova以管理平台的身份登场,负责管理整个云的计算资源、网络、授权及测度。虽然Nova本身并不提供任何虚拟能力,但是它将使用libvirt API与虚拟机的宿主机进行交互。Nova通过Web服务API来对外提供处理接口,而且这些接口与Amazon的Web服务接口是兼容的。
功能及特点
l 实例生命周期管理
l 计算资源管理
l 网络与授权管理
l 基于REST的API
l 异步连续通信
l 支持各种宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及Hyper-V
OpenStack计算部件
l Nova弹性云包含以下主要部分:
l API Server(nova-api)
l 消息队列(rabbit-mq server)
l 运算工作站(nova-compute)
l 网络控制器(nova-network)
l 卷管理(nova-volume)
l 调度器(nova-scheler)
API服务器(nova-api)
API服务器提供了云设施与外界交互的接口,它是外界用户对云实施管理的唯一通道。通过使用web服务来调用各种EC2的API,接着API服务器便通过消息队列把请求送达至云内目标设施进行处理。作为对EC2-api的替代,用户也可以使用OpenStack的原生API,我们把它叫做“OpenStack API”。
消息队列(Rabbit MQ Server)
OpenStack内部在遵循AMQP(高级消息队列协议)的基础上采用消息队列进行通信。Nova对请求应答进行异步调用,当请求接收后便则立即触发一个回调。由于使用了异步通信,不会有用户的动作被长置于等待状态。例如,启动一个实例或上传一份镜像的过程较为耗时,API调用就将等待返回结果而不影响其它操作,在此异步通信起到了很大作用,使整个系统变得更加高效。
运算工作站(nova-compute)
运算工作站的主要任务是管理实例的整个生命周期。他们通过消息队列接收请求并执行,从而对实例进行各种操作。在典型实际生产环境下,会架设许多运算工作站,根据调度算法,一个实例可以在可用的任意一台运算工作站上部署。
网络控制器(nova-network)
网络控制器处理主机的网络配置,例如IP地址分配,配置项目VLAN,设定安全群组以及为计算节点配置网络。
卷工作站(nova-volume)
卷工作站管理基于LVM的实例卷,它能够为一个实例创建、删除、附加卷,也可以从一个实例中分离卷。卷管理为何如此重要?因为它提供了一种保持实例持续存储的手段,比如当结束一个实例后,根分区如果是非持续化的,那么对其的任何改变都将丢失。可是,如果从一个实例中将卷分离出来,或者为这个实例附加上卷的话,即使实例被关闭,数据仍然保存其中。这些数据可以通过将卷附加到原实例或其他实例的方式而重新访问。
因此,为了日后访问,重要数据务必要写入卷中。这种应用对于数据服务器实例的存储而言,尤为重要。
调度器(nova-scheler)
调度器负责把nova-API调用送达给目标。调度器以名为“nova-schele”的守护进程方式运行,并根据调度算法从可用资源池中恰当地选择运算服务器。有很多因素都可以影响调度结果,比如负载、内存、子节点的远近、CPU架构等等。强大的是nova调度器采用的是可插入式架构。
目前nova调度器使用了几种基本的调度算法:
随机化:主机随机选择可用节点;
可用化:与随机相似,只是随机选择的范围被指定;
简单化:应用这种方式,主机选择负载最小者来运行实例。负载数据可以从别处获得,如负载均衡服务器。
(二)OpenStack镜像服务器—-GlanceOpenStack镜像服务器是一套虚拟机镜像发现、注册、检索系统,我们可以将镜像存储到以下任意一种存储中:
本地文件系统(默认)
l OpenStack对象存储
l S3直接存储
l S3对象存储(作为S3访问的中间渠道)
l HTTP(只读)
功能及特点
提供镜像相关服务
Glance构件
l Glance控制器
l Glance注册器
(三)OpenStack存储设施—-Swift
Swift为OpenStack提供一种分布式、持续虚拟对象存储,它类似于Amazon Web Service的S3简单存储服务。Swift具有跨节点百级对象的存储能力。Swift内建冗余和失效备援管理,也能够处理归档和媒体流,特别是对大数据(千兆字节)和大容量(多对象数量)的测度非常高效。
功能及特点
l 海量对象存储
l 大文件(对象)存储
l 数据冗余管理
l 归档能力—–处理大数据集
l 为虚拟机和云应用提供数据容器
l 处理流媒体
l 对象安全存储
l 备份与归档
l 良好的可伸缩性
Swift组件
l Swift账户
l Swift容器
l Swift对象
l Swift代理
l Swift RING
Swift代理服务器
用户都是通过Swift-API与代理服务器进行交互,代理服务器正是接收外界请求的门卫,它检测合法的实体位置并路由它们的请求。
此外,代理服务器也同时处理实体失效而转移时,故障切换的实体重复路由请求。
Swift对象服务器
对象服务器是一种二进制存储,它负责处理本地存储中的对象数据的存储、检索和删除。对象都是文件系统中存放的典型的二进制文件,具有扩展文件属性的元数据(xattr)。
注意:xattr格式被Linux中的ext3/4,XFS,Btrfs,JFS和ReiserFS所支持,但是并没有有效测试证明在XFS,JFS,ReiserFS,Reiser4和ZFS下也同样能运行良好。不过,XFS被认为是当前最好的选择。
Swift容器服务器
容器服务器将列出一个容器中的所有对象,默认对象列表将存储为SQLite文件(译者注:也可以修改为MySQL,安装中就是以MySQL为例)。容器服务器也会统计容器中包含的对象数量及容器的存储空间耗费。
Swift账户服务器
账户服务器与容器服务器类似,将列出容器中的对象。
Ring(索引环)
Ring容器记录着Swift中物理存储对象的位置信息,它是真实物理存储位置的实体名的虚拟映射,类似于查找及定位不同集群的实体真实物理位置的索引服务。这里所谓的实体指账户、容器、对象,它们都拥有属于自己的不同的Rings。
(四)OpenStack认证服务(Keystone)
Keystone为所有的OpenStack组件提供认证和访问策略服务,它依赖自身REST(基于Identity API)系统进行工作,主要对(但不限于)Swift、Glance、Nova等进行认证与授权。事实上,授权通过对动作消息来源者请求的合法性进行鉴定。如下图所示:
Keystone采用两种授权方式,一种基于用户名/密码,另一种基于令牌(Token)。除此之外,Keystone提供以下三种服务:
l 令牌服务:含有授权用户的授权信息
l 目录服务:含有用户合法操作的可用服务列表
l 策略服务:利用Keystone具体指定用户或群组某些访问权限
认证服务组件
服务入口:如Nova、Swift和Glance一样每个OpenStack服务都拥有一个指定的端口和专属的URL,我们称其为入口(endpoints)。
l 区位:在某个数据中心,一个区位具体指定了一处物理位置。在典型的云架构中,如果不是所有的服务都访问分布式数据中心或服务器的话,则也称其为区位。
l 用户:Keystone授权使用者
译者注:代表一个个体,OpenStack以用户的形式来授权服务给它们。用户拥有证书(credentials),且可能分配给一个或多个租户。经过验证后,会为每个单独的租户提供一个特定的令牌。[来源:http://blog.sina.com.cn/s/blog_70064f190100undy.html]
l 服务:总体而言,任何通过Keystone进行连接或管理的组件都被称为服务。举个例子,我们可以称Glance为Keystone的服务。
l 角色:为了维护安全限定,就云内特定用户可执行的操作而言,该用户关联的角色是非常重要的。
译者注:一个角色是应用于某个租户的使用权限集合,以允许某个指定用户访问或使用特定操作。角色是使用权限的逻辑分组,它使得通用的权限可以简单地分组并绑定到与某个指定租户相关的用户。
l 租间:租间指的是具有全部服务入口并配有特定成员角色的一个项目。
译者注:一个租间映射到一个Nova的“project-id”,在对象存储中,一个租间可以有多个容器。根据不同的安装方式,一个租间可以代表一个客户、帐号、组织或项目。
(五)OpenStack管理的Web接口—-Horizon
Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等。除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例。总之,Horizon具有如下一些特点:
l 实例管理:创建、终止实例,查看终端日志,VNC连接,添加卷等
l 访问与安全管理:创建安全群组,管理密匙对,设置浮动IP等
l 偏好设定:对虚拟硬件模板可以进行不同偏好设定
l 镜像管理:编辑或删除镜像
l 查看服务目录
l 管理用户、配额及项目用途
l 用户管理:创建用户等
l 卷管理:创建卷和快照
l 对象存储处理:创建、删除容器和对象
l 为项目下载环境变量
⑦ Openstack概述 、 部署安装环境 、 部署Openstack 、 Openstack操作基础
案例1:配置yum仓库
案例2:测试时间服务器
案例3:配置yum仓库
案例4:检查基础环境
案例5:部署Openstack
案例6:网络管理
案例7:登录openstack
1 案例1:配置yum仓库
1.1 问题
本案例要求配置基本环境:
配置三台虚拟机
2CPU,6G 内存,50G 硬盘
2CPU,4.5G 内存,100G 硬盘
配置静态IP ifcfg-eth0
openstack : 192.168.1.10
nova: 192.168.1.11, 192.168.1.12
配置主机名 /etc/hosts,能够相互 ping 通
配置 dns 服务器 /etc/resolv.conf
1.2 方案
此实验的整体方案需要三台机器,openstack作为主节点,nova01 和 nova02作为额外节点,真机做为DNS转发和NTP的服务器(这里不再在表-1中体现),提供域名解析和时间同步服务,具体情况如表-1所示:
表-1
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:准备三台虚拟机
[student@room9pc01 images]$base-vm openstack nova01 nova02
[student@room9pc01 images]$virsh start openstack
[student@room9pc01 images]$virsh start nova01
[student@room9pc01 images]$virsh start nova02
2)opensatck主机扩容为50G
[student@room9pc01 images]$ virsh blockresize--path /var/lib/libvirt/images/openstack.img--size 100G openstack
[student@room9pc01 images]$ virsh console openstack
[root@localhost~]#/usr/bin/growpart /dev/vda1
[root@localhost~]#/usr/sbin/xfs_growfs /
[root@localhost~]# df-h
Filesystem Size Used Avail Use%Mounted on
/dev/vda1 50G 914M 50G2%/
3)nova01 和 nova02 主机扩容为100G(以nova01为例)
[student@room9pc01 images]$ virsh blockresize--path /var/lib/libvirt/images/nova01.img--size 50G nova01
重新定义'/var/lib/libvirt/images/nova01.img'块设备大小
[root@localhost~]#/usr/bin/growpart /dev/vda1
[root@localhost~]#/usr/sbin/xfs_growfs /
[root@localhost~]# df-h
Filesystem Size Used Avail Use%Mounted on
/dev/vda1 100G 917M 100G1%/
4)三台主机配置静态ip(以一台为例)
openstack:192.168.1.10
nova01: 192.168.1.11
nova02: 192.168.1.12
[root@localhost~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
PERSISTENT_DHCLIENT="yes"
IPADDR=192.168.1.10
NEMASK=255.255.255.0
GATEWAY=192.168.1.254
5)三台主机修改主机名,配置/etc/hosts,和/etc/resolv.conf文件(以一台为例)
[root@localhost~]# hostname openstack
[root@localhost~]# echo openstack>/etc/hostname
[root@localhost~]#vim /etc/hosts
192.168.1.10openstack
192.168.1.11nova01
192.168.1.12nova02
[root@localhost~]#vim /etc/resolv.conf//去掉search开头的行
;generatedby /usr/sbin/dhclient-script
nameserver192.168.1.254
6)修改三台主机的内存(openstack6G,nova01 和nova02 4G)
[student@room9pc01~]$ virsh edit openstack
...
<memory unit='KiB'>6588282</memory>
<currentMemory unit='KiB'>6588282</currentMemory>
...
[student@room9pc01~]$ virsh edit nova01
...
<memory unit='KiB'>4588282</memory>
<currentMemory unit='KiB'>4588282</currentMemory>
...
[student@room9pc01~]$ virsh start openstack
域 openstack 已开始
[student@room9pc01~]$ virsh start nova01
域 nova01 已开始
[student@room9pc01~]$ virsh start nova02
域 nova02 已开始
2 案例2:测试时间服务器
2.1 问题
本案例要求掌握时间服务的配置:
修改 openstack,nova01,nova02 的时间服务器
重启服务后验证配置
2.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:修改openstack,nova01 和 nova02 的时间服务器(以一台为例)
[root@openstack~]#vim /etc/chrony.conf
...
server192.168.1.254iburst
[root@openstack~]# systemctl restart chronyd
步骤二:验证
[root@openstack~]# chronyc sources-v
...
||||\
MSName/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^*gateway36376-93ns[+903ns]+/-26ms
步骤三:两台虚拟机配置静态ip
注意:两台主机同样操作,改一下ip即可(以openstack.te.cn为例)
[root@localhost~]# echo openstack.te.cn>/etc/hostname
[root@localhost~]# hostname openstack.te.cn
//另外一台主机改名为nova.te.cn,配置ip为1.20
[root@openstack~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
IPV6INIT="no"
IPV4_FAILURE_FATAL="no"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.1.10"
PREFIX=24
GATEWAY=192.168.1.254
[root@openstack~]# systemctl restart network
3 案例3:配置yum仓库
3.1 问题
本案例要求配置yum仓库:
配置 yum 源,软件仓库一共 4 个
3.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:三台主机配置yum源(以一台主机为例,共10670个软件包)
[student@room9pc01~]$cd /linux-soft/04/openstack/
[student@room9pc01 openstack]$ ls
cirros.qcow2 RHEL7-extras.iso RHEL7OSP-10.iso small.qcow2
[student@room9pc01 openstack]$mkdir /var/ftp/RHEL7-extras
[student@room9pc01 openstack]$mkdir /var/ftp/RHEL7OSP-10
[student@room9pc01 openstack]$ mount RHEL7-extras.iso /var/ftp/RHEL7-extras/
mount:/dev/loop1 写保护,将以只读方式挂载
[student@room9pc01 openstack]$ mount RHEL7OSP-10.iso /var/ftp/RHEL7OSP-10/
mount:/dev/loop2 写保护,将以只读方式挂载
[root@openstack~]#vim /etc/yum.repos.d/local.repo
[local_repo]
name=CentOS-$releasever-Base
baseurl="ftp://192.168.1.254/centos-1804"
enabled=1
gpgcheck=1
[RHEL7-extras]
name=RHEL7-extras
baseurl="ftp://192.168.1.254/RHEL7-extras"
enabled=1
gpgcheck=0
[RHEL7OSP-package]
name=RHEL7OSP-package
baseurl="ftp://192.168.1.254/RHEL7OSP-10/rhel-7-server-openstack-10-rpms"
enabled=1
gpgcheck=0
[RHEL7OSP-devtools]
name=RHEL7OSP-devtools
baseurl="ftp://192.168.1.254/RHEL7OSP-10/rhel-7-server-openstack-10-devtools-rpms"
enabled=1
gpgcheck=0
[root@openstack~]#scp /etc/yum.repos.d/local.repo192.168.1.11:/etc/yum.repos.d/
[email protected]'s password:
local.repo 100% 490 484.4KB/s 00:00
[root@openstack ~]# scp /etc/yum.repos.d/local.repo 192.168.1.12:/etc/yum.repos.d/
[email protected]'s password:
local.repo
4 案例4:检查基础环境
4.1 问题
本案例要求准备基础环境,为安装openstack做准备:
安装额外的软件包
是否卸载firewalld 和 NetworkManager
检查配置主机网络参数(静态IP)
主机名必须能够相互 ping 通
检查配置主机yum源(4个,10670)
依赖软件包是否安装
检查NTP服务器是否可用
检查 /etc/resolv.conf 不能有 search 开头的行
4.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:检查基础环境
1)安装额外软件包(三台机器操作,这里以一台为例)
[root@openstack yum.repos.d]# yum install-y qemu-kvm libvirt-client libvirt-daemon libvirt-daemon-driver-qemu python-setuptools
2)是否卸载firewalld 和 NetworkManager
[root@openstack~]# rpm-qa|grep NetworkManager*
[root@openstack~]# rpm-qa|grep firewalld*
3)检查配置主机网络参数
[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
PERSISTENT_DHCLIENT="yes"
IPADDR=192.168.1.10
NEMASK=255.255.255.0
GATEWAY=192.168.1.254
4)验证主机名是否互通
[root@openstack~]# ping openstack
...
64bytes fromopenstack(192.168.1.10):icmp_seq=1ttl=255time=0.023ms
64bytes fromopenstack(192.168.1.10):icmp_seq=2ttl=255time=0.027ms
...
[root@openstack~]# ping nova01
PINGnova01(192.168.1.11)56(84)bytes of data.
64bytes fromnova01(192.168.1.11):icmp_seq=1ttl=255time=0.139ms
...
[root@openstack~]# ping nova02
PINGnova02(192.168.1.12)56(84)bytes of data.
64bytes fromnova02(192.168.1.12):icmp_seq=1ttl=255time=0.251ms
...
5)检查配置主机yum源
[root@openstack~]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
源标识 源名称 状态
RHEL7-extras RHEL7-extras76
RHEL7OSP-devtools RHEL7OSP-devtools3
RHEL7OSP-package RHEL7OSP-package680
local_repo CentOS-7-Base9,911
repolist:10,670
6)检查时间同步是否可用
[root@openstack~]# chronyc sources-v
210Numberof sources=1
....
||||\
MSName/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^*gateway3737728+31us[+89us]+/-25ms
[root@openstack~]#
7)检查/etc/resolv.conf 不能有 search 开头的行
[root@openstack~]#cat /etc/resolv.conf
;generatedby /usr/sbin/dhclient-script
nameserver192.168.1.254
5 案例5:部署Openstack
5.1 问题
本案例要求通过packstack完成以下配置:
通过packstack部署Openstack
根据相关日志文件进行排错
5.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:安装packstack
[root@openstack~]# yum install-y openstack-packstack
[root@openstack~]# packstack--gen-answer-file answer.ini
//answer.ini与answer.txt是一样的,只是用vim打开answer.ini文件有颜色
Packstack changed given value to requiredvalue /root/.ssh/id_rsa.pub
[root@openstack~]# vim answer.ini
42CONFIG_SWIFT_INSTALL=n
45CONFIG_CEILOMETER_INSTALL=n//计费相关模块
49CONFIG_AODH_INSTALL=n//计费相关模块
53CONFIG_GNOCCHI_INSTALL=n//计费相关模块
75CONFIG_NTP_SERVERS=192.168.1.254//时间服务器的地址
98CONFIG_COMPUTE_HOSTS=192.168.1.11
102CONFIG_NETWORK_HOSTS=192.168.1.10,192.168.1.11
333CONFIG_KEYSTONE_ADMIN_PW=a//修改管理员的密码
840CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vxlan//驱动类型
876CONFIG_NEUTRON_ML2_VXLAN_GROUP=239.1.1.5
//设置组播地址,最后一个随意不能为0和255,其他固定
910CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex//物理网桥的名称
921CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0
//br-ex桥的名称与eth0连接,管理eth0,网桥与哪个物理网卡连接
1179CONFIG_PROVISION_DEMO=n//DEMO是否测试
[root@openstack~]# packstack--answer-file=answer.ini
Welcome to the Packstack setup utility
The installation log file is available at:/var/tmp/packstack/20190423-170603-b43g_i/openstack-setup.log
Installing:
Clean Up[DONE]
Discovering ip protocol version[DONE]
[email protected]'s password:
[email protected]'s password:
Setting up ssh keys
****Installation completed successfully******//出现这个为成功
6 案例6:网络管理
6.1 问题
本案例要求运用OVS完成以下配置:
查看外部OVS网桥及其端口
验证OVS配置
6.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:查看外部OVS网桥
1)查看br-ex网桥配置(br-ex为OVS网桥设备)
[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-br-ex
ONBOOT="yes"
NM_CONTROLLED="no"
IPADDR="192.168.1.10"
PREFIX=24
GATEWAY=192.168.1.254
DEVICE=br-ex
NAME=br-ex
DEVICETYPE=ovs
OVSBOOTPROTO="static"
TYPE=OVSBridge
2)查看eth0网卡配置(该网卡为OVS网桥的接口)
[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
ONBOOT=yes
BOOTPROTO=none
3)验证OVS配置
[root@openstack~]# ovs-vsctl show
Bridge br-ex
Controller"tcp:127.0.0.1:6633"
is_connected:true
fail_mode:secure
Port br-ex
Interface br-ex
type:internal
Port phy-br-ex
Interface phy-br-ex
type:patch
options:{peer=int-br-ex}
Port"eth0"
Interface"eth0"
ovs_version:"2.5.0"
7 案例7:登录openstack
7.1 问题
本案例要求通过Horizon完成以下操作:
修改/etc/httpd/conf.d/15-horizon_vhost.conf 配置文件,使其可以成功登录openstack
7.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:浏览器访问openstack
1)浏览器访问
[root@openstack~]# firefox192.168.1.10//访问失败
2)需要改配置文件并重新加载
[root@openstack~]#
[root@openstack conf.d]# vi15-horizon_vhost.conf
35WSGIProcessGroup apache
36WSGIApplicationGroup%{GLOBAL}//添加这一行
[root@openstack conf.d]# apachectl graceful//重新载入配置文件
3)浏览器访问,出现页面,如图-6所示:
图-6
3)查看用户名和密码
[root@openstack conf.d]# cd
[root@openstack~]# ls
answer.ini keystonerc_admin//keystonerc_admin生成的文件,里面有用户名和密码
[root@openstack~]# cat keystonerc_admin
unset OS_SERVICE_TOKEN
exportOS_USERNAME=admin//用户名
exportOS_PASSWORD=a//密码
exportOS_AUTH_URL=http://192.168.1.10:5000/v2.0
exportPS1='[\u@\h \W(keystone_admin)]\$ '
exportOS_TENANT_NAME=admin
exportOS_REGION_NAME=RegionOne
4)在火狐浏览器中输入用户名和密码,登录后页面如图-7所示:
图-7
安装openstack可能会出现的错误以及排错方法
1)ntp时间不同步,如图-2所示:
图-2
解决办法:查看ntp时间服务器,是否出现*号,若没有,查看配置文件,配置ntp服务器步骤在案例3,可以参考
[root@room9pc01~]# chronyc sources-v//出现*号代表NTP时间可用
^*120.25.115.20261762-753us[-7003us]+/-24ms
[root@openstack~]# chronyc sources-v
^*192.168.1.25439377504+50us[-20us]+/-24ms
[root@nova~]# chronyc sources-v
^*192.168.1.25439377159-202us[-226us]+/-24ms
2)网桥名称写错,如图-3所示:
图-3
解决办法:检查配置文件
[root@openstack~]# vim answer.ini
...
921CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0
//br-ex桥的名称与eth0连接,管理eth0,网桥与哪个物理网卡连接
...
3)若/root/.ssh/id_rsa.pub,提示password,同样是配置文件没有写对,如图-4所示:
图-4
4)yum源没有配置正确,如图-5所示:
图-5
解决办法:检查yum是否为10853个软件包,查看是否是yum源没有配置正确,之后安装oprnstack-dashboard
5)出现Cannot allocate memory,如图-6所示:
图-6
解决办法:
内存不足,重新启动主机
6)出现/usr/bin/systemctl start openvswith ... falied,说明是ssse3指令集的错误,如图-7所示:
图-7
解决办法:编辑openstack的xml文件,在里面添加
<cpu mode='host-passthrough'>
</cpu>
7)若出现 Could not prefetch... ‘openstack’。 如图-8所示:
图-8
配置文件里面有中文符号
9)访问openstack出错
图-9
没有修改Apache配置文件
4)创建名为myproject的项目
[root@openstack~]# source~/keystonerc_admin //初始化环境变量
[root@openstack~(keystone_admin)]# openstack project create myproject
+-------------+----------------------------------+
|Field|Value|
+-------------+----------------------------------+
|description|None|
|enabled|True|
|id||
|name|myproject|
+-------------+----------------------------------+
5)查看项目信息
[root@openstack~(keystone_admin)]# openstack project list
+----------------------------------+-----------+
|ID|Name|
+----------------------------------+-----------+
||services|
||admin|
||myproject|
+----------------------------------+-----------+
6)更新vcpu配额为30
[root@openstack~(keystone_admin)]# nova quota-update--cores30myproject
7)删除myproject
[root@openstack~(keystone_admin)]# openstack projectdeletemyproject
⑧ OpenStack neutron相关概念阐述
VLAN网络允许用户使用外部物理网络中的VLAN ID创建多个租户或供应商网络。VLAN网络通过VLAN ID进行二层网络的隔离, 相同VLAN ID内部的实例可以实现自由通信 ,而 不同VLAN之间的实例通信则需要经过三层路由的转发 。由于VLAN网络可以实现灵活多样的网络划分与隔离,故VLAN网络是生产环境中使用最为普遍的网络。而在云计算环境中,VLAN网络主要用于私有云环境中,对于大型公有云数据中心,在租户增加的情况下,VLAN ID的限制是VLAN网络的一大弊端(最大只有4096个)。
为了创建丰富的网络拓扑,Neutron提供了两种网络类型,即 租户网络(Project Network) 和 供应商网络(Provider Network) 。在租户网络中,每个租户可以创建多个私有网络,租户可以自定义私有网络的IP地址范围,此外,不同的租户可以同时使用相同的IP地址或地址段。 与租户网络不同,供应商网络由云管理员创建 ,并且必须与现有的物理网络匹配。
为了实现不同租户网络互相隔离,Neutron提供了几种不同的网络拓扑与隔离技术 ,Flat网络便是其中之一。在Flat网络中, 不同计算节点上的全部实例接入同一个大二层网络内,全部实例共享此网络,不存在VLAN标记或其他网络隔离技术 。接入Flat网络的全部实例通过数据中心核心路由接入Internet,相对于其他的网络类型,Flat网络是最简单的网络类型。在Neutron的网络实现中,可以同时部署多个隔离的Flat网络,但是 每个Flat网络都要独占一个物理网卡 ,这意味着要通过Flat网络来实现多租户的隔离,尤其是在公有云环境中,这种方法似乎不太现实。
GRE和VxLAN是一种 网络封装协议 ,基于这类封装协议可以创建重叠(overlay)网络以实现和控制不同计算节点实例之间的通信。 GRE和VxLAN的主要区别 在于GRE网络通过IP包进行数据传输,而VxLAN通过UDP包进行数据传输, GRE或VxLAN数据包在流出节点之前会被打上相应的GRE或VxLAN网络ID(Segmentation ID),而在进入节点后对应的ID会被剥离,之后再进入节点内部的虚拟网络进行数据转发 。
GRE和VxLAN网络中的 数据流要进入外部网络,必须配有路由器, 而且要将租户网络与外部网络互连,路由器也是必备的。在GRE和VxLAN网络中, 路由器的主要作用在于通过实例浮动IP提供外部网络对实例的直接访问。 在很多公有云环境中,GRE和VxLAN网络被广泛使用,因此用户在公有云上创建实例后,通常需要向供应商购买或申请通信运营商IP和一个虚拟路由器,并将运营商IP作为实例浮动IP,才能通过Internet访问自己的公有云实例。
端口(Port)在OpenStack网络中是一种虚拟接口设备,用于模拟物理网络接口。在Neutron中, 端口是网络设备连接到某个虚拟网络的接入点 ,如虚拟机的NIC只能通过端口接入虚拟网络,端口还描述了与网络相关的配置,如配置到端口上的MAC和IP。
子网(Subnet)代表的是一个IP段和相关的配置状态。子网IP和网络配置信息通常被认为是网络服务为租户网络和供应商网络提供的原生IPAM。当某个网络上有新的端口被创建时,网络服务便会使用子网提供的IP段为新端口分配IP。
一般来说,终端用户可以在没有任何约束的情况下使用有效的IP创建子网,不过有时需要为admin或租户用户预先定义可用IP池,并在创建子网时从此IP池中自动分配地址。通过子网池,便可要求每个创建的子网必须在预定义的子网池中,从而约束子网所能使用的IP。此外,子网池的使用还可以避免IP被重复使用和不同子网使用重叠的IP。
在Neutron中,路由Router是个用以在不同网络中进行数据包转发的逻辑组件,即路由是个虚拟设备,在特定插件支持下,路由还提供了L3和NAT功能,以使得外部网络(不一定是Internet)与租户私有网络之间实现相互通信 。在Neutron中, 虚拟路由通常位于网络节点上 ,而租户私有网络要实现与外部Provider物理网络(或Public网络)的通信,则必须经过虚拟路由。Neutron网络节点虚拟路由连接租户网络和外部网络的示意如下图所示。
路由通常包含内部接口和外部接口,如上图所示,位于租户网络中的主机Host_A和主机Host_B通过内部接口接入路由,并通过路由公共网关(外部接口)访问外部Provider网络和Public中的主机Host_C。但是Host_C要访问租户私网中的Host_A和Host_B主机,则必须通过路由DNAT功能才能实现,因此需要为Host_A和Host_B主机配置Floating IP。
安全组(Security Group)是虚拟防火墙的规则集合,这些 防火墙规则对外部访问实例和实例访问外部的数据包实现了端口级别(Port Level)的控制 。安全组使用默认拒绝策略(Default Deny Policy),其仅包含允许特定数据流通过的规则,每个端口都可以通过附加的形式添加到一个或多个安全组中,防火墙驱动会自动将安全组规则转换为底层的数据包过滤技术,如iptables。 在Neutron中,每个项目(Project)都包含一个名为default的默认安全组,default安全组允许实例对外的全部访问,但是拒绝全部外网对实例的访问 。如果在创建实例时未指定安全组,则Neutron会自动使用默认安全组default。同样,如果创建端口时没有指定安全组,则default安全组也会被默认用到此端口。 要访问特定实例中某个端口的应用程序,必须在该实例的安全组中开通应用程序要访问的端口 。
在云计算网络中,一个租户可以有多个租户子网,租户子网通常称为 内部网络 (简称内网),不同内网中通常会接入不同用途的实例。租户内部子网之间的数据访问通常称为 东西向通信 。此外,位于租户内网中的应用要对外提供服务,则必须实现外部网络与租户网络彼此之间的通信,这包括了外网访问内网和内网访问外网两种方式,通常内外网之间的访问称为 南北向通信 。网络东西向通信和南北向通信的示意图如图所示。
在图中,子网A与子网B之间的通信称为网络的东西流向,外部网络与租户网络之间的通信称为网络的南北向流量。由于子网A和子网B属于不同的子网,因此网络东西向通信需要Router转发,同样,外部网络与租户网络之间的南北向通信也必须经过Router转发才能实现。在云计算网络环境中, Router的东西向转发实现了内部子网之间的通信 ,而 南北向转发实现了内部与外部网络之间的通信 。
源地址转换(Source Network Address Transfer, SNAT) 主要用于控制内网对外网的访问,SNAT通常只需一个外部网关,而无须属于外部网络的浮动IP(Floating IP) ,即可实现内网全部实例对外网的访问。在内网存在大量实例的情况下,相对DNAT, SNAT可以节约大量外网IP。在SNAT中,尽管内部私网可以访问外网,但是外网却不能访问内部私网,因而SNAT具有很好的安全防护机制。 很多企业为了防止外网入侵都会使用SNAT来实现内网对Internet的访问, 而在OpenStack网络中,SNAT主要用来实现租户虚拟机实例对外网的访问。SNAT的工作原理就是,内部私网TCP/IP数据包在进入路由后,数据包中的私网源IP会被路由上的外网网关IP替换,这是源地址转换的核心步骤,即将数据包中源IP转换为外网网关地址。这里再次指出,在私有或者公有云中,虚拟机要访问外网,并不意味着必须为虚拟机分配Floating IP,而只需创建路由并为路由设置外网网关,将内网接入路由即可实现内网实例对外网的访问。由于SNAT是在数据包经过路由之后再进行的IP替换,因此SNAT又称POST-Routing。
目的地址转换(Destination Network Address Transfer, DNAT)主要用于外网对内网的访问,由于外网要访问位于内网中的某个特定实例,因此必须向位于外网中的访问客户端提供具体的目的IP,而这个实例目的IP通常称为Floating IP。Floating IP并不属于内网地址,而是外网地址。Floating IP与内网实例地址是一一绑定的关系,它们之间的地址转换便是DNAT。一旦为实例绑定Floating IP,位于外网中的访问客户端便可通过该Floating IP直接访问内网中的实例。目前很多公有云供应商都是通过DNAT的形式, 利用电信运行商提供的公网IP段创建一个Floating IP ,并将其绑定到租户的特定虚拟机上,从而允许租户基于Internet访问位于供应商数据中心的虚拟机。 DNAT的工作原理就是, 在外网数据包进入路由之前,将数据包中的目的地址(属于外网)替换为内部私网地址(租户内网网关地址),这也是目的地址转换的核心步骤。经过DNAT之后,数据包目的地址被替换并进入路由,路由便将数据包转发到对应的虚拟机。DNAT过程发生在进入路由之前,即先将外网目的IP替换成为内网私有IP再进入路由进行转发(地址替换发生在路由之前),因此,DNAT又称PRE-Routing。
在Linux系统中,网络命名空间(Network Namespace)就是一个虚拟的网络设备, 网络命名空间有独立的路由表、iptables策略和接口设备等 ,网络命名空间彼此之间完全隔离。假设系统中有eth0和eth1两个网卡设备,且eth0属于命名空间namespace1,而eth1属于命名空间namespace2,则eth1和eth2就类似于两个独立网络设备上的接口,彼此相互独立,而且只有进入各自的命名空间后,才能够对命名空间中的接口设备进行配置更改与查看。因此,如果eth0和eth1加入各自的命名空间后,在Linux系统中,针对全局系统的网络配置命令ifconfig是不能看到这两个网卡设备的相关配置信息的,必须进入各自的命名空间使用此命令才能看到相关信息。在Linux中,使用命令ip netns可以查看系统中的全部网络命名空间,要配置或者查看命名空间中的设备,则需要进入特定命名空间并在命名空间中执行相应命令。例如,当前系统中有一个路由命名空间qrouter-xxx,想要查看该命名空间中的接口和IP配置情况,可以执行命令:
ip netns exec qrouter-xxx ip addr show
其中,ip netns exec qrouter-xxx指明了运行ip addr show命令的命名空间。命名空间是Linux系统中使用非常广泛的技术,尤其是在网络技术领域,命名空间具有极佳的网络设备模拟能力和配置隔离性。因此在Neutron项目中,网络命名空间被大量使用,例如不同的租户网络可以使用重叠的IP地址,就是因为不同租户具有独立的路由命名空间。