云计算之openstack

云计算概念

云计算服务:使用计算机资源和使用网络像使用自来水一样自由有偿
云分类:私有云(安全、兼容、定制)、公有云(容量、弹性、成本)、混合云
IAAS:基础设施即服务,自己部署环境,自己管理代码和数据 openstack 阿里云 腾讯云 AWS
PAAS: 平台即服务,提供软件运行的环境 php,java,python,go,c#,nodejs,自己管理代码和数据
SAAS:软件即服务 什么都不用管,直接可以使用 微软云(office365),企业邮箱,cdn(内容分发网络),RDS(关系型数据库服务),百度云盘

Openstack框架

 组建说明:compute(Nova)计算机服务
           Image service(Glance)镜像服务
           Object storage (Swift) 对象存储
           Block storage (cinder)块存储
           Networking (neutron) 网络服务
           Dashboard(horizon)仪表板服务
           Identity service (keystone) 认证服务
           Orchestration (heat) 编排服务
           Telemetry (ceinometer)监控服务
           Database service (trove) 数据库服务
           Data processing  数据处理服务
		   Barbican 密钥管理服务
		   Lronic   裸金属服务
   		   Octavia  负载均衡服务
		   Manila  文件共享存储服务

Keystone组件说明

在这里插入图片描述
作用:是一个负责身份管理与授权的组件,实现用户身份认证和角色权限管理,及其他组件的访问地址和安全策略管理,给openstacke框架提供一个统一的验证方式。
以一个宾馆举例说明认证的名称:用户–张三、凭证–身份证、验证–验证身份证、令牌–房卡、租户–宾馆、服务–住宿餐饮、端点–路径、角色–VIP等级。
域(region):也叫数据中心,逻辑上的命名空间,用来管理和隔离项目,用户名和项目名是可以重复的,但域id是不能重复的,角色是公用的。
组:方便对用户进行授权,对组授权,组下的用户都具有相应的权限。
服务:一个服务可以有多个实例,比如nova服务可以有多个实例。
在这里插入图片描述

配置文件:
Keystone-dist-paste.ini:定义keystone启动和运行过程中哪些模块需要加载,对请求进行过滤/usr/share/keystone
Logging.conf:定义日志级别、日志格式/etc/keystone
Policy.json:定义keystone内部模块的访问鉴权配置/etc/keystone
认证流程:
在这里插入图片描述
在这里插入图片描述

Nova核心组件

在这里插入图片描述

负责维护和管理云计算环境的计算资源、网络资源和存储资源,负责整个云环境虚拟机生命周期的管理,提供计算服务。
Nova-api:实现RESTful API功能,是外部访问nova的唯一途径,接受外部请求并通过消息队列将请求发送给其他nova服务组件。
Nova-scheduler:决策虚拟机创建在哪个主机(计算节点)上。
Nova-compute:负责虚拟机的生命周期管理,创建并终止虚拟机实例的工作。
Nova-conductor:计算节点访问数据库的中间件,消除了对云数据库的直接访问。
Nova-api-metadata:从实例中接收元数据请求。
Nova-placement-api:跟踪每个计算提供者的仓库和使用情况。
Nova-console:为用户提供控制台访问。
Nova-consoleauth:用于控制台的授权认证,授权控制台代理提供的用户令牌。
Nova-cert:提供x509证书支持。
Queue:在守护进程之间传递消息的中心。
Nova-quantum:网络服务,现在已经改为neutron服务。
Nova的详细工作流程:
在这里插入图片描述

  1. 界面或命令行通过RESTful API向keystone获取认证信息。
  2. keystone通过用户请求认证信息,正确后生成token返回给对应的认证请求。
  3. 界面或命令行通过RESTful API向nova-api发送一个创建虚拟机的请求(携带token)。
  4. nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户。
  5. keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
  6. 通过认证后nova-api检查创建虚拟机参数是否有效合法后和数据库通讯。
  7. 当所有的参数有效后初始化新建虚拟机的数据库记录。
  8. nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
  9. nova-scheduler进程侦听消息队列,获取nova-api的请求。
  10. nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
  11. 对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
  12. nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
  13. nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
  14. nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。
  15. nova-conductor从消息队列中拿到nova-compute请求消息。
  16. nova-conductor根据消息查询虚拟机对应的信息。
  17. nova-conductor从数据库中获得虚拟机对应信息。
  18. nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
  19. nova-compute从对应的消息队列中获取虚拟机信息消息。
  20. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
  21. glance-api向keystone认证token是否有效,并返回验证结果。
  22. token验证通过,nova-compute获得虚拟机镜像信息(URL)。
  23. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
  24. neutron-server向keystone认证token是否有效,并返回验证结果。
  25. token验证通过,nova-compute获得虚拟机网络信息。
  26. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
  27. cinder-api向keystone认证token是否有效,并返回验证结果。
  28. token验证通过,nova-compute获得虚拟机持久化存储信息。
  29. nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。
    云硬盘的创建和挂载:
    在这里插入图片描述

虚拟机的调度:

在这里插入图片描述
在这里插入图片描述

本地管理方式:virsh -c qemu:///system list
远程管理方式:SSH qemu+ssh://root@ip/system

TCP qemu+tcp://ip/system
TLS qemu+tls://root@ip/system

域、可用域和主机集合:
在这里插入图片描述

Keystone和horizon是复用的
可用域:region范围内再次切分,只是工程上的独立
主机集合:根据硬件资源属性对硬件再次划分
创建主机集合:

Nova aggregate-create agg-nova nova //创建一个主机集合agg-nova,可用域为nova
Nova aggregate-add-host agg-nova compute-node-02 //compute-node-02主机加入agg-nova集合
Nova aggregate-set-metadata agg-nova ssd=true //集合agg-nova定义元数据
Nova flavor-key m1.nano set ssd=true //规格定义元数据

Neutron核心组件

在这里插入图片描述

虚拟化网络组件的实现方式:
网卡:openvswitch
防火墙:iptables
交换机:openvswitch、linux bridge
路由器:Linux IP协议栈和iptables
负载均衡器:haproxy
网络命名空间:
多个逻辑上隔离的网络环境运行在同一个物理主机上,每个网络空间都有自己的网卡设备、路由表、防火墙规则。
Veth pair:虚拟机网络设备,成对出现,用于不同网络命名空间的通信。

Ip netns list //列出所有网络
Ip netns exec <network namespace name> <command> //在网络命名空间中运行命令
Ip netns exec nstest ip addr //查看nstest空间的IP

网络分类:
在这里插入图片描述

提供者网络:管理员创建的和物理网络有直接映射关系的虚拟网络(类型flat、vlan、gre、vxlan)
租户网络:普通用户创建的虚拟网络(类型local、flat、vlan、gre、vxlan、)
在这里插入图片描述

Local:只允许在本服务器内通信的网络,不能够跨服务器通信。
Flat:所有租户都在一个网络里面,没有进行网络隔离,容易产生广播风暴。

Neutron net-create NAME --provider:network_type flat --provider:physical_network PHYS_NET_NAME

Vlan:基于物理vlan物理实现的虚拟网络。共享同一个物理网络的多个vlan网络是相互隔离的,甚至可以使用重叠的IP地址空间。每个支持vlan network的物理网络可以视为一个分离的vlan trunk,它使用一组独占的vlan id。有效范围是1-4094。一般用于提供者网络。

Neutron net-create NAME --provider:network_type vlan --provider:physical_network PHYS_NET_NAME --provider:segmentation_id VID

GRE:通用路由协议封装协议,是一种IP-over-IP的隧道。是L3层的隧道技术,本质是在隧道的两端的L4层建立UDP连接传输重新包装的L3层包头,在目的地取出包装后的包头进行解析。封装的数据是基于IP路由表来进行路由,因此gre 网络不和具体的物理网络绑定,一般只使用于租户网络。
Vxlan:是基于隧道技术的overlay 网络。Vxlan 网络通过唯一的segmentation ID(也叫 VNI)与其他 Vxlan 网络区分。vxlan 中数据包会通过VNI 封装成 UDP 包进行传输。因为二层的包通过封装在三层传输,能够克服 VLAN 和物理网络基础设施的限制。
对象模型:
网络:是一个隔离二层网络,类似于物理网络世界中的LAN
子网:是一个地址池,每个子网指定一个无类别域间路由范围,必须于一个网络相关联
端口:一个端口代表一个虚拟网络交换机的一个端口。虚拟网卡(VIF)会被连接到port上。当VIF连接到PORT后,这个vNIC就会用于mac地址和IP地址。Port的IP地址是从subnet中分配的。
虚拟交换机:采用开源的openvswitch作为虚拟交换机,同时支持使用Linux bridge。
虚拟路由器:一个virtual router提供不同网段之间的IP包路由功能,由nuetron L3 agent管理。
在这里插入图片描述

管理网络:用于openstack各组件之间的内部通信
数据网络:用于云部署中虚拟数据之间的通信
外部网络:公共网络,外部或Internet可以访问的网络
API网络:暴露所有的openstack APIs
架构:
Neutron server:包含守护进程neutron-server和各种插件(plugin),既可以安装在控制节点也可以安装在网络节点。提供API接口,并把对API的调用请求传给已经配置的插件进行后续处理。
Neutron L2 agent:为虚拟网络提供2层交换服务。通过一个特定的插件来实现。
Neutron-dhcp-agent:为虚拟机提供DHCP服务。
Neutron-L3-agent:为虚拟机访问外部网络提供3层转发服务。
在这里插入图片描述

Plugin/agent架构:
在这里插入图片描述

Neutron Server:对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。
Plugin:调用Agent处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络状态。
Agent:处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能。
Network Provider:提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交换机。
Queue:Neutron Server,Plugin 和 Agent 之间通过 Messaging Queue 通信和调用。
Database:存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等
在这里插入图片描述

DHCP agent:
每个网络的DHCP运行在一个网络命名空间中,namespace由qdhcp-命名。
Dnsmasq:被neutron用来提供DHCP和DNS服务的一个开源软件。
在这里插入图片描述

Ps -ef|grep -i dnsmasq  //查看dnsmasq进程
Cat /var/lib/neutron/dhcp/进程中的interface的id

L3 agent:负责路由、浮点IP分配、地址转换和安全组管理,通过iptables实现安全组、路由以及地址转换,每个虚拟路由运行在一个网络命名空间中,每个namespace由qrouter-命名。
Neutron运行机制:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

q-quantum v-veth br-bridge o-openvswitch
qvo:veth pair openvswitch side
qvb:veth pair bridge side
qbr:bridge
qr:l3 agent managed port,router side
qg:l3 agent managed port,gateway side
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Br-tun使多br-int合成一个整体的br-int交换机
在这里插入图片描述

Ip netns exec qrouter-xxxx ethtool -S qr-xxxx //查看与哪个设备相连
IP netns //查看命名空间
IP netns exec 空间名 IP a //查看这个命名空间的IP
Openvswitch可以提供四层和七层负载均衡
IP addr //查看网络设备
Ovs-vsctl show  //虚拟交换机的信息
Brctl show //查看网桥

Open vSwitch(虚拟交换软件):
在一个虚拟化的环境中,虚拟交换机主要是传递虚拟机的流量,以及实现虚拟机与外界网络通信。
在这里插入图片描述

ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换
flow-based switching。
ovsdb-server:轻量级的数据库服务,主要保存了整个OVS的配置信息,包括接口,交换内
容,vlan等,ovs-vswitchd会根据数据库中的配置信息工作。
ovs-dpctl:一个工具,用来配置交换机内核模块,可以控制转发规则。
ovs-vsctl:网桥、接口等的创建、删除、设置、查询等。
ovs-appctl:主要是向OVS守护进程发送命令的,一般用不上。
ovsdbmonitor:GUI工具来显示ovsdb-server中数据信息。
ovs-controller:一个简单的OpenFlow控制器
ovs-ofctl:用来控制OVS作为OpenFlow交换机工作时候的流表内容。
工作流程:
在这里插入图片描述
在这里插入图片描述

Glance核心组件

作用:用来注册、登录和检索虚拟机镜像。
架构:
在这里插入图片描述

Glance-api:接收REST API请求,通过其他组件完成镜像的查找、获取、上传和删除等操作,默认端口是9292。
Glance-registry:与MySQL数据库交互,用于存储或获取镜像的元数据,默认端口为9191。
Store adapter:存储适配器,通过提供的存储接口获取镜像。
Database:镜像的元数据保存到数据库中。
工作流程:
在这里插入图片描述

Glance image-create --name “cirros” --file /root/cirrors-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --visibility public –progress   //上传镜像
Glance image-list  //查看镜像

Cinder组件说明

作用:为运行的实例提供稳定的块存储服务,提供对volume从创建到删除的整个生命周期管理。
在这里插入图片描述

Cinder-api:负责接受和处理Rest ful请求,并将请求加入rabbitmq消息队列中。
Cinder-scheduler:处理消息队列中的任务,并根据预定策略选择合适的cinder-service节点来执行任务。
Cinder-volume:该服务运行在存储节点上,管理存储空间,每个存储节点都有一个。volume-service:若干个这样的存储节点联合起来可以构成一个存储资源池。
Volume-provider:用来连接不同类型和型号的存储。
工作流程:
在这里插入图片描述

  1. 用户向 cinder-api发送创建volume的请求。
  2. cinder-api对请求做一些必要处理后,通过 Messaging将创建消息发送给cinder-scheduler。
  3. cinder-scheduler从 Messaging 获取到 cinder-api发给它的消息,然后执行调度算法,从若干计存储点中选出节点A。
  4. cinder-scheduler通过 Messaging 将创建消息发送给存储节点A。
    5.存储节点 A 的 cinder-volume从 Messaging 中获取到 cinder-scheduler发给它的消息,然后通过 driver 在 volume provider 上创建 volume。

Swift组件说明

分布式存储:数据分散存储在多台独立的设备上,每份数据存在多个备份。
数据模型:
Account:本身只是一个存储区域,并不代表认证系统中的账号,但是通常会让每个Account对应一个租户。
Container:容器代表封装一组对象,类似文件夹或目录。
Object:对象,由元数据和内容组成,可简单理解为一个对象就是一个文件
在这里插入图片描述

代理服务(swift-proxy-server):负责swift架构其余组件间的相互通信。
账号服务(swift-account-server):提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在SQLlite数据库中。
容器服务(swift-container-server):提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在SQLlite数据库中。
对象服务(swift-object-server):提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的XFS文件系统。
在这里插入图片描述

Swift-环概念:
作用:记录存储对象与物理位置间的映射关系,采用一致性哈希算法。
Swift环映射:
Object—>virtual node—>真实node
Partition:维护virtual node与真实node之间的映射关系。
在这里插入图片描述

Swift环创建命令:

Swift-ring-builder account.builder(环类型) create 10 3 1 
(10:虚拟节点的个数,3:副本个数,每个节点有多少个虚拟节点,1:在规定的时间里,同一个虚拟节点不能被移动2次)
Swift-ring-builder account.builder(环类型) add r1z1-192.168.1.34:6002/sdb1 100
(r1:region,表示区域,z1:zone,表示可用域,192.168.1.34:6002/sdb1:IP地址:端口/设备名称,100:权重)
Swift-ring-builder account.builder(环类型) rebalance(建立虚拟节点与物理设备的映射关系)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值