HCIP-OpenStack组件介绍

在这里插入图片描述
openstack把这些组件服务都集成到httpd服务中了,目的是为了提升性能。登入不了openstack在控制节点查下httpd服务,systemctl status httpd
Horizon:提供webUI图形化界面的
Keystone:提供身份认证服务、授权、endpoint端点(类似于电话簿,给谁打哪个电话),所有的服务都要在keystone组件上注册的,不注册无法访问。
Nova:提供计算服务的,cpu,内存
Cinder:提供块存储服务的,提供磁盘的
Glance:提供镜像服务的,glance加载镜像但不保存镜像,glance后面一定会对接存储的,这里对接的是swift对象存储镜像(但实验环境是存在本地文件系统的)。
Swift:对象存储,后端可以对接nfs/ceph/glusterfs/aws等
Neutron提供网络服务,网络/子网/路由接口/dhcp等

每个组件(模块)对应有很多服务的,[root@controller ~]# systemctl list-unit-files |grep cinder
openstack-cinder-api.service                                           enabled  
openstack-cinder-backup.service                                        enabled  
openstack-cinder-scheduler.service                                     enabled  
openstack-cinder-volume.service                                        enabled 

在这里插入图片描述
发放云主机,控制节点的nova-api接收请求,给nova-scheduler处理做完计算调度后,发放给某个计算节点的nova-compute处理(实验环境把控制节点当计算节点使用了)。
创建云硬盘,控制节点的cinder-api接收请求,给cinder-scheduler处理做完计算调度后,发放给某个存储节点cinder-volume处理(生产环境有独立的存储节点的,实验环境是将存储部署在控制节点)。
rabbitmq
通过rabbitmq消息队列处理请求,按照规则排队处理互不影响,不会说因为cinder-scheduler调度慢而影响cinder-api接收请求性能,也不会因为cinder-volume处理慢而影响cinder-scheduler调度性能,把这些服务解耦了提升性能了。
rabbitmq基于AMQP协议,rabbitmq来处理消息队列的,每个组件都会生成自己组件的队列,在这个队列里面去消费就行,产生需求信息的叫生产端(如nova-api、cinder-api产生新需求的),把生产端的需求拿过来放到对应队列里面,再由相应组件去对应队列里面取用消费。用rabbitmq为了实现消息的传递互通,能解决并发问题、rabbitmq并发量是毫秒级的,性能很好,不管并发量多大直接扔给rabbitmq,再由其它组件进行消费就行,把这些组件服务充分进行解耦了。
rabbitmq默认部署在控制节点,rabbitmq掌握各个组件的互通,rabbitmq服务停了发放云主机会有问题的,不知哪有问题,就按照组件单个组件查日志,发放云主机先经过nova组件,就先查看nova组件日志,比如查看nova-api.log日志找到error发现rabbitmq连接不上。systemctl status rabbitmq-server.service
控制节点上已经安装了rabbitmq,rabbitmq默认部署在控制节点
rabbitmq-plugins list 列出所有rabbitmq模块,能查看rabbitmq模块是否启用
rabbitmq-plugins enable rabbitmq_management 启用rabbitmq_management模块就能网页登录rabbitmq
默认只有25672端口给内部rabbitmq互通的,15672 端口是启用rabbitmq_management模块开通的,给用户网页登录rabbitmq用的。

# netstat -utlnp |grep 56
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      6681/beam.smp       
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      6681/beam.smp       
tcp6       0      0 :::5672                 :::*                    LISTEN      6681/beam.smp   

通过ip:15672 尝试网页登录rabbitmq有问题,telnet看15672端口是否通,如果无法登录,添加一条iptables规则,iptables -I INPUT 1 -p tcp --dport 15672 -j ACCEPT
在这里插入图片描述
在这里插入图片描述

1、OpenStack界面管理服务Horizon

界面管理服务Horizon:提供基于Web的控制界面,使云管理员和用户能够管理各种OpenStack资源和服务。首次出现在OpenStack的“Essex”版本中。依赖Keystone认证服务。
Horizon属于全局组件之一,提供一个Web管理界面,与OpenStack其他服务交互。管理员与用户可以通过Horizon实现资源的管理、实例的生命周期管理以及连接插件等。
Horizon是OpenStack的一个子项目,用于提供一个web前端控制台(称为Dashboard),以此来展示OpenStack的功能。实际上,Horizon并不会为OpenStack添加任何一个新的功能,它只是使用了OpenStack部分API功能,因此可以扩展Horizon的功能,扩展Dashboard。
在这里插入图片描述
Horizon核心价值:
1、核心支持:对所有核心OpenStack项目提供开箱即用的支持。
2、可扩展性:每个开发者都能增加组件。
3、易于管理:架构和代码易于管理,浏览方便。
4、视图一致:始终保持视觉和交互范式一致性。
5、易于使用:用户界面友好,提供人们想要使用的强大界面。
6、可兼容性:API强调向后兼容性。
Horizon与其他服务的交互关系:
Horizon​唯一依赖的服务是Keystone认证服务。Horizon​可以与其他服务结合使用,例如镜像服务,计算服务和网络服务。Horizon​​还可以在有独立服务(如对象存储)的环境中使用。
用户可以通过浏览器使用Horizon提供的控制面板来访问云平台的计算、存储和网络资源,比如启动虚拟机实例、创建子网、分配IP地址、设置访问控制等。
在这里插入图片描述
基于Django的Horizon体系结构如图,底层API模块openstack_dashboard.api将OpenStack其他项目的API封装起来以供Horizon其他模块调用。
Horizon将页面上的所有元素模块化,并将表单、表格等一些网页中的常见元素全部封装成Python类,如上图所示的View模块。每个这样的组件都有自己对应的HTML模板,在渲染整个页面时,Horizon会先找到当前页面包含多少组件,并将各个组件分别渲染成一段HTML片段,最后将它们拼接成一个完整的HTML页面返回给浏览器。
Horizon采用了Django框架,简单来说Horizon是一个基于Django的网站,同时Horizon采用了许多流行的前端技术来扩展其功能。
Django的设计哲学中,业务逻辑与表现逻辑是分开的,Django视图是代表业务逻辑的,模板系统则被视为控制表现与表现逻辑相关的工具。
Horizon秉承了这种哲学,遵循DRY原则,专注于代码的高度可用,致力于支持可扩展的控制面板的框架,尽可能地重复利用已有的模板开发和管理OpenStack网站。
Horizon面板设计分为3层:Dashboard --> PanelGroup --> Panel
Django是一种流行的基于Python语言的开源Web应用程序框架。Django遵循DRY(Don’t Repeat Yourself)原则,专注于代码的高度可重用。web开发:网站程序基本有三部分组成,业务逻辑代码(Python),静态文件(js/css),模板(Python中的jinja,mako,nodejs中有jade),用户向webserver发起请求之后,server程序找到当前url对应的模板,填充模板变量(输出成字符串形式的html源码),返回给浏览器,浏览器渲染页面。
在这里插入图片描述
如图所示,整个页面主要由各个Dashboard、PanelGroup、Panel,以及单击Panel后渲染的页面组成。当前的Dashboard是“项目”,PanelGroup是“项目”下的“计算”,Panel是“计算”下的“概况”。右侧区域就是单击Panel“概况”渲染的页面部分。
项目也称为租户。每个用户都是一个或多个项目的成员。在项目中,用户创建和管理实例。在项目界面,用户可以查看和管理选定项目中的资源,包括实例、镜像、密钥对和主机组。
在这里插入图片描述
管理员界面提供管理员可以管理的资源,例如计算、存储、网络和系统设置等。
在这里插入图片描述
身份管理界面提供认证管理功能。

2、OpenStack认证服务Keystone

多域管理,通过domain(域)逻辑隔离不同的租户/项目以及用户,但角色是全局通用的。
如果是管理员角色权限,那么所有的域下面的资源都可以看到。如果是普通用户,只能看到当前所在域下面的资源。
在这里插入图片描述

查看域,[root@controller ~(admin)]# openstack domain list
创建域,[root@controller ~(admin)]# openstack domain create memeda 
删除域,[root@controller ~(admin)]# openstack domain delete memeda
Failed to delete domain with name or ID 'memeda': Cannot delete a domain that is enabled, please disable it first. (HTTP 403) (Request-ID: req-2b24ee89-3200-4e07-bbb9-3265c131910a)
1 of 1 domains failed to delete.
删除域失败,得先禁用域disable再删除
查看域的详情信息,[root@controller ~(admin)]# openstack domain show memed
发现域是enabled启用的,得先禁用域disable再删除
禁用域,[root@controller ~(admin)]# openstack domain set --disable memeda
查看域的详情信息,[root@controller ~(admin)]# openstack domain show memeda
删除域,[root@controller ~(admin)]# openstack domain delete memeda
查看memeda域下面的项目[root@controller ~(admin)]# openstack project list --domain memeda
查看memeda域下面的用户,[root@controller ~(admin)]# openstack user list --domain memeda
在memeda域里面创建项目和用户再关联角色
在memeda域里面创建项目
[root@controller ~(admin)]# openstack project create memeda --domain memeda
在memeda域里面创建用户
[root@controller ~(admin)]# openstack user create --password redhat --domain memeda memeda
关联角色,给哪个域哪个项目哪个用户关联角色(项目和用户最好用id唯一的,防止多个域内用户项目名重复)这里给关联了admin角色权限
[root@controller ~(admin)]# openstack role add --project 333d5d01d0074b8c854d6c8e7de67bc5 --user f6e8c320a6e8482e8c967d5036bab143 admin

启用多域,修改配置文件,vim /etc/openstack-dashboard/local_settings

[root@controller openstack-dashboard(admin)]# vim local_settings
#OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = False
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True   启用多域 ,默认禁用多域 # Overrides the default domain used when running on single-domain model
# with Keystone V3. All entities will be created in the default domain.
#OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'  默认使用Default域 
启用多域了,想使用默认的Default域登入时也必须手工输入Default

重启apache服务,[root@controller ~(admin)]# systemctl restart httpd
重新登录,输入对应的域,用户名和密码进行登录。
在这里插入图片描述
在这里插入图片描述
认证服务Keystone:提供身份验证,服务发现和分布式多租户授权。支持LDAP、OAuth、OpenID Connect、SAML和SQL。首次出现在OpenStack的“Essex”版本中。为其他OpenStack服务提供认证支持。
在这里插入图片描述
Keystone基本概念:
Domain:一个域可以对应一个大的机构、一个数据中心,并且必须全局唯一。云的终端用户可以在自己的Domain中创建多个Project、User、Group和Role。具备对多个Project进行统一管理的能力。
User:Keystone会通过认证信息(Credential,如密码等)验证用户请求的合法性,通过验证的用户将会分配到一个特定的令牌,该令牌可以被当作后续资源访问的一个通行证,并非全局唯一,只需要在域内唯一即可。
Group:用户组是一组User的容器,可以向Group中添加用户,并直接给Group分配角色,在这个Group中的所有用户就拥有了Group所拥有的角色权限。通过引入Group的概念,Keystone实现了对用户组的管理,达到了同时管理一组用户权限的目的。
Project:项目是各个服务中的一些可以访问的资源集合。我们需要在创建虚拟机时指定某个项目,在Cinder创建卷时也需要指定具体的项目。用户总是被默认绑定到某些项目上,在用户访问项目的资源前,必须具有对该项目的访问权限,或者说在特定项目下被赋予了特定的角色。项目不必全局唯一,只需要在某个域下唯一即可。
Role:一个用户所具有的角色,角色不同意味着被赋予的权限不同,只有知道用户被赋予的角色才能知道该用户是否有权限访问某资源。用户可以被赋予一个域或项目内的角色。一个用户被赋予域的角色意味着他对域内所有的项目都具有相同的角色,而特定项目的角色只具有对特定项目的访问权限。角色可以被继承,在一个项目树下,拥有父项目的访问权限也意味着同时拥有对子项目的访问权限。角色必须全局唯一。
Service:服务,如Nova、Swift、Glance、Cinder等。一个服务可以根据User、Tenant和Role确认当前用户是否具有访问其资源的权限。服务会对外暴露一个或多个端点,用户可以通过这些端点访问资源并执行操作。
Endpoint:端点,是指一个可以用来访问某个具体服务的网络地址,我们可以将端点理解为服务的访问点。如果我们需要访问一个服务,就必须知道它的Endpoint。一般以一个URL地址来表示一个端点。
Token:令牌,令牌是允许访问特定资源的凭证。无论通过何种方式,Keystone的最终目的都是对外提供一个可以访问资源的令牌。
Credential:凭证,确认用户身份的数据,如用户的用户名和密码。
在这里插入图片描述
Keystone作为OpenStack中一个独立的提供安全认证的模块,主要负责OpenStack用户的身份认证、令牌管理、提供访问资源的服务目录,以及基于用户角色的访问控制。用户访问系统的用户名和密码是否正确,令牌的发放,服务端点的注册,以及该用户是否具有访问特定资源的权限等都离不开Keystone服务的参与。
Identity:身份服务,提供身份验证凭证及有关用户和用户组数据。
Token:令牌,Keystone在确认用户的身份后,会给用户提供一个核实身份且可以用于后续资源请求的令牌。
Catalog:对外提供一个服务的查询目录,服务目录存储了OpenStack所有服务的Endpoint信息。
Policy:安全策略或者访问控制,一个基于规则的身份验证引擎,通过配置文件来定义各种动作与用户角色的匹配关系。
Resource:提供关于Domain和Project的数据。
Assignment:提供关于Role和Role Assignment的数据,负责角色授权。Role Assignment包含Role、Resource、Identity。
在这里插入图片描述
Keystone与其他服务的交互关系:
Keystone为其他项目提供认证,外部请求调用OpenStack内部的服务时,需要先从Keystone获取到相应的Token,
OpenStack内部不同项目间的调用也需要先从Keystone获取到认证后才能进行。
在OpenStack的整体框架结构中,Keystone的作用类似于一个服务总线,Nova、Glance、Horizon、Swift、Cinder及Neutron等其他服务都通过Keystone来注册其服务的Endpoint,针对这些服务的任何调用都需要经过Keystone的身份认证,并获得服务的Endpoint来进行访问。
在这里插入图片描述
在这里插入图片描述
用户使用OpenStack,第一步就要向Keystone提供用户名密码来获取Token。当用户获取Token后,需要向Nova发送创建虚拟机请求,Nova负责调用计算资源并管理虚拟机的生命周期,所以这个创建请求要发送到Nova。请求的Head中会携带Token,当Nova-api接收到请求后,会将Token传递到Keystone进行验证是否有效合法。当验证成功后返回信息给Nova,Nova才开始进行创建VM操作。以网络资源为例,Nova-api将token透传给Nova-compute,Nova-compute会向Neutron-server发送与网络相关操作请求,请求Head中也携带Token,Neutron收到请求后也会将Token传递到Keystone验证,验证成功才执行相应操作。

块存储服务Cinder和对象存储服务Swift

在这里插入图片描述
临时磁盘来源:
计算节点的本地磁盘。
通过NFS挂载的外部存储(使用此方式创建临时磁盘时,可以在多个计算节点之间迁移虚拟机,因为虚拟机实例的根磁盘位于可被多个物理主机访问的共享存储上)。
在这里插入图片描述
块存储(Cinder):操作对象是磁盘,直接挂载到主机,一般用于主机的直接存储空间和数据库应用,DAS和SAN都可以提供块存储。
对象存储(Swift):操作对象是对象(object),一个对象名称就是一个域名地址,可以直接通过REST API的方式访问对象。
文件存储(Manila):操作对象是文件和文件夹,在存储系统上增加了文件系统,再通过NFS或CIFS协议进行访问。
块存储服务Cinder:提供块存储服务,为虚拟机实例提供持久化存储。调用不同存储接口驱动,将存储设备转化成块存储池,用户无需了解存储实际部署位置或设备类型。首次出现在OpenStack的“Folsom”版本中。依赖Keystone认证服务。
在这里插入图片描述
Cinder作用:Cinder在虚拟机与具体存储设备之间引入了一层“逻辑存储卷”的抽象,Cinder本身不是一种存储技术,并没有实现对块设备的实际管理和服务。Cinder只是提供了一个中间的抽象层,为后端不同的存储技术,如DAS、NAS、SAN、对象存储及分布式文件系统等,提供了统一的接口。不同的块设备服务厂商在Cinder中以驱动的形式实现上述接口与OpenStack进行整合。
Cinder与其他服务的交互关系:Cinder依赖Keystone认证服务。通过Nova模块创建虚拟机实例,Cinder为虚拟机实例提供持久化块存储能力。Cinder创建的卷备份支持存储到Swift。
在这里插入图片描述
Cinder Client封装Cinder提供的rest接口,以CLI形式供用户使用。
Cinder API对外提供rest API,对操作需求进行解析,对API进行路由寻找相应的处理方法。包含卷的增删改查(包括从源卷、镜像、快照创建)、快照增删改查、备份、volume type管理、挂载/卸载(Nova调用)等。
Cinder Scheduler负责收集backend上报的容量、能力信息,根据设定的算法完成卷到指定cinder-volume的调度。
Cinder Volume多节点部署,使用不同的配置文件、接入不同的backend设备,由各存储厂商插入driver代码与设备交互完成设备容量和能力信息收集、卷操作。
Cinder Backup实现将卷的数据备份到其他存储介质(目前SWIFT/Ceph/TSM提供了驱动)。
SQL DB提供存储卷、快照、备份、service等数据,支持MySQL、PG、MSSQL等SQL数据库。
在这里插入图片描述
Cinder默认使用LVM(Logical Volume Manager)作为后端存储(Backend Storage),而LVM通过在操作系统与物理存储资源之间引入逻辑卷(Logical Volume)的抽象来解决传统磁盘分区管理工具的问题。
LVM将众多不同的物理存储资源(物理卷、Physical Volume,如磁盘分区)组成卷组。LVM从卷组中创建一个逻辑卷,然后将ext3、ReiserFS等文件系统安装在这个逻辑卷上。
除了LVM,目前Cinder已经以驱动的形式支持众多存储技术或存储厂商的设备作为后端存储,如SAN(Storage Area Network)、Ceph、Sheepdog,以及EMC、华为等厂商的设备。Cinder默认的后端驱动是LVM。
在这里插入图片描述
在这里插入图片描述
创建卷类型的目的是为了筛选不同的后端存储,例如SSD、SATA、高性能、低性能等,通过创建不同的自定义卷类型,创建卷时自动筛选出合适的后端存储。
Cinder API对外提供REST API,对操作需求进行解析,并调用处理方法:卷create/delete/list/show,快照create/delete/list/show,卷attach/detach (Nova调用),其他:Volume types、Quotas、Backups。
在这里插入图片描述
Cinder scheduler负责收集后端上报的容量、能力信息,根据设定的算法完成卷到指定cinder-volume的调度。Cinder scheduler通过过滤和权重,筛选出合适的后端。
和Nova Scheduler类似,Cinder Scheduler也是经过Filter筛选符合条件的后端,然后使用Weigher计算后端进行权重排序,最终选择出最合适的后端存储。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Nova调用Cinder API创建卷,传递主机的信息,如hostname,iSCSI initiator name,FC WWPNs。
Cinder API将该信息传递给Cinder Volume。
Cinder Volume通过创建卷时保存的host信息找到对应的Cinder Driver。
Cinder Driver通知存储允许该主机访问该卷,并返回该存储的连接信息(如iSCSI iqn,portal,FC Target WWPN,NFS path等)。
Nova调用针对于不同存储类型进行主机识别磁盘的代码( Cinder 提供了brick模块用于参考)实现识别磁盘或者文件设备。
Nova通知Cinder已经进行了挂载。
Nova将主机的设备信息传递给hypervisor来实现虚拟机挂载磁盘。
在这里插入图片描述
Cinder主要操作三个资源:
Volume: 块设备卷,提供创建,删除,扩容,挂载/卸载等功能
Snapshot: 针对于块设备卷的快照创建、删除、回滚等功能
Backup: 提供对块设备卷的备份,恢复能力
创建卷的流程,和挂载卷的流程是不一样的。从创建卷到挂载卷,它是两个动作,分别由不通的组件来执行。创建卷的时候,是由cinder组件来创建;而挂载卷的时候,是由nova组件来挂载。
在这里插入图片描述
创建云硬盘,控制节点的cinder-api接收请求,给cinder-scheduler处理做完计算调度后,发放给某个存储节点cinder-volume处理(生产环境有独立的存储节点的,实验环境是将存储部署在控制节点)。
/etc/libvirt/qemu目录下有个xml配置文件,将物理机的/dev/sda映射给虚拟机的/vda,先挂载到物理机再通过xml配置文件映射给虚拟机使用。
在这里插入图片描述
Cinder对接后端NFS存储
具体操作流程请大家参考视频及https://blog.51cto.com/cloudcs/5387939
在这里插入图片描述
cinder-api接收外部请求,放到消息队列中由cinder-scheduler消费,cinder-api和cinder-scheduler服务位于控制节点,cinder-volume在存储节点(这里有3台linux主机存储节点,cinder-scheduler根据调度选择合适linux主机),在下面有驱动,不同的对接存储类型有不同的存储驱动driver,存储不同所执行的命令不同,通过驱动进行翻译在底层存储创建。
openstack本身不提供存储,openstack对接了后端底层的存储,对接存储需要开发驱动程序,当执行openstack标准指令,通过驱动将openstack指令转化为存储指令,如创建一个100G卷,这个openstack指令被转化为创建lun指令扔到存储中执行。cinder create –volume-name vol100 100 create lun --lun-size 100G --lun-name vol100

Glance

在这里插入图片描述
Glance提供镜像服务的,不是提供镜像存储的。现在实验环境镜像是存储在本地的文件系统中。
在这里插入图片描述
可以把glance对接到swift对象存储,现在实验环境swift对象存储对接的后端存储是在本地文件系统。
在这里插入图片描述
swift是个组件本身不存储,是要对接到后端存储的,后端存储对接默认也是在本地文件系统。
在这里插入图片描述
让glance对接到swift里面,修改配置文件,修改配置文件前先备份。

[root@controller glance(admin)]# cp glance-api.conf glance-api.conf.bak
[root@controller glance(admin)]# vim glance-api.conf
3057 stores=file,http,swift     glance支持的选项
3111 default_store=swift      glance默认使用的选项,默认是file对接的本地文件系统
3982 swift_store_region = RegionOne   默认存储的区域
4032 swift_store_endpoint_type = publicURL 端点类型public,走哪个endpoint去连接
4090 swift_store_container = glance  名字可以自定义,未来上传镜像后,会自动创建一个以glance开头的容器名。
4118 swift_store_large_object_size = 5120 限制最大单个上传的对象为5G大小。
4142 swift_store_large_object_chunk_size = 200 类似于条带化大小,不能超过200个chunk
4160 swift_store_create_container_on_put = true 要不要自动给你创建一个容器
4182 swift_store_multi_tenant = true 是否支持多租户/项目
4230 swift_store_admin_tenants = services   swift对应的租户/项目名称
4382 swift_store_auth_version = 2 身份认证版本
4391 swift_store_auth_address = http://192.168.100.151:5000/v3 身份认证地址(keystonerc_admin环境变量文件里面的OS_AUTH_URL)
4399 swift_store_user = swift  对象存储使用的默认用户swift
4408 swift_store_key = 6424bb8bc0e04f6c  swift用户的密码(去应答文件里面搜索SWIFT)

修改完配置文件后,重启glance服务。
[root@controller glance(admin)]# systemctl restart openstack-glance-*
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
把镜像存在对象存储中,对象存储中存储的内容一般是不改动的数据,读取性能好,适合大量永久存储。
自定义镜像:现成的iso镜像不行,kvm虚拟化支持qcow2镜像,利用kvm去创建一台linux,之后将kvm虚拟机磁盘导出镜像,并上传到openstack平台里面,进行云主机创建。
流程参考:https://blog.51cto.com/cloudcs/5509044 注意:开源openstack无法调出admin密码重置选项。

# cat /etc/yum.repos.d/local.repo   用本地yum源
[local_repo]
name = local
baseurl = file:///mnt/
gpgcheck = 0
在外面的虚拟机安装虚拟化软件包及虚拟机镜像管理工具
# yum groupinstall -y "Virtualization*"
# yum install -y libguestfs-tools-c.x86_64
创建10G的kvm虚拟机,创建kvm虚拟机使用的磁盘文件,/var/lib/libvirt/images/centos7.0.qcow2 10G修改里面kvm虚拟机网卡配置文件,改完不用重启直接安装软件包
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=dhcp
DEVICE=eth0
NAME=eth0
ONBOOT=yes
安装cloud-init 软件包,kvm虚拟机可连通外网,使用自带的在线yum源
# yum install -y cloud-utils-growpart cloud-init
编辑 /etc/cloud/cloud.cfg 配置文件,在 cloud_init_modules 下添加 - resolv-conf(注意格式一致)
# cat /etc/cloud/cloud.cfg  (截取了部分内容)
cloud_init_modules:- disk_setup- migrator- bootcmd- write-files- growpart- resizefs- set_hostname- update_hostname- update_etc_hosts- rsyslog- users-groups- ssh- resolv-conf编辑 /etc/sysconfig/network 配置文件,添加  NOZEROCONF=yes
# cat /etc/sysconfig/network
#Created by anaconda
NOZEROCONF=yes编辑 /etc/default/grub 配置文件,添加 GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
# cat /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
GRUB_DISABLE_RECOVERY="true"
执行命令使参数生效,# grub2-mkconfig -o /boot/grub2/grub.cfg
关闭 KVM 虚拟机,# init 0在外面的虚拟机重置并清理镜像
# virsh list --all  查看所有kvm虚拟机
清理个性化数据,# virt-sysprep -d centos7.0    centos7.0指的是kvm虚拟机名字
查找centos7.0 kvm虚拟机对应的磁盘文件,# virsh domblklist centos
/var/lib/libvirt/images/centos7.0.qcow2
创建并清理压缩镜像,# virt-sparsify --compress /var/lib/libvirt/images/centos7.0.qcow2 /tmp/centos7.qcow2

在openstack使用自定义镜像,创建实例规格给多大,和当时创建kvm虚拟机时给多大磁盘一致,建议10G。

swift

块存储,适合大量增删改数据库场景。
文件存储,读取大量不改动的数据、文件共享,对接的后端存储真正的存储落脚点还是在底层的磁盘。
桶中存储的对象如何保存到底层的磁盘中,针对桶中存储的对象计算出一个hash值,hash值会落在中间的ring环中,ring环中每个分区会对应一个虚拟节点zone,虚拟节点zone又和底层存储是关联的。
在这里插入图片描述
在这里插入图片描述
对象存储实验环境后端存储默认使用的是2G大小的虚拟设备(/srv/node/swiftloopback ),更换swift后端对接的存储,现在对接到本地文件系统(lvm)。
swift对接本地文件系统实验步骤:
1.控制节点新增一块20G磁盘
2.对磁盘做分区(分两个分区)
[root@controller ~]# fdisk /dev/nvme0n2
3.对分区格式化
[root@controller ~]# mkfs.xfs /dev/nvme0n2p1
[root@controller ~]# mkfs.xfs /dev/nvme0n2p2
4.卸载原有的swift虚拟设备
[root@controller ~]# umount /srv/node/swiftloopback
在/etc/fstab中禁止/srv/node/swiftloopback 开机自动挂载,用# mount -a 刷新下
5.删除原有目录swiftloopback,创建两个目录并在/etc/fstab中永久挂载
[root@controller ~]# cd /srv/node/
[root@controller node]# ls
swiftloopback
[root@controller node]# rm -rf swiftloopback/
[root@controller node]# ls
[root@controller node]# mkdir ob1 ob2
[root@controller node]# ls
ob1 ob2
在这里插入图片描述
6、更换文件拥有者和所属组
[root@controller node]# pwd
/srv/node
[root@controller node]# chown swift:swift ob*
7、删除原有ring再创建builder
在这里插入图片描述
用man求帮助
swift-ring-builder <builder_file> <…>
在这里插入图片描述
[root@controller swift]# swift-ring-builder account.builder create 12 2 1
[root@controller swift]# swift-ring-builder container.builder create 12 2 1
[root@controller swift]# swift-ring-builder object.builder create 12 2 1
12:代表2 的多少次方,未来要ring要切分多少个分区
2:代表的是多少副本数,未来一个对象要保存几份数据
1: 代表小时数,当ring创建好之后,不能在1个小时内进行修改。
8、创建ring
swift-ring-builder <builder_file> <…>
add z-:/<device_name>_
创建account/container/object ring
去对应的account-server.conf/container-server.conf/object-server.conf查看ip和端口号
weight值多少无所谓,做多副本保存多个zone的weight值要一样,哪个zone权重大文件会更多的保存在该zone
在这里插入图片描述
查看swift-ring-builder object.builder account.builder/container.builder/object.builder
在这里插入图片描述
9、再平衡
[root@controller swift]# swift-ring-builder account.builder rebalance
[root@controller swift]# swift-ring-builder container.builder rebalance
[root@controller swift]# swift-ring-builder object.builder rebalance
查看有了3个ring
在这里插入图片描述
10、测试
之前的文件
在这里插入图片描述
在这里插入图片描述
glance对接swift,上传一个镜像,这个镜像被放置swift对象存储里面,而swift对象存储又对接到了后端的本地存储(自定义双副本机制),最终在底层查询镜像的时候,是两份数据。
两个容器里面保存的对象一共是3个文件
在这里插入图片描述
底层查询为6个文件
在这里插入图片描述

heat

参考,https://blog.51cto.com/cloudcs/6616896
1.admin创建一些公共资源
创建租户/用户/公网/规格/镜像
2.编写yaml文件
自动实现:创建私网/安全组和规则/密钥/发放云主机/分配浮动ip/绑定浮动ip/创建路由/分配网关/创建子接口连接私网
instance.yaml,发放一台云主机,并可以ping通外网。
yaml文件只用改3个地方,image id和network id和实例类型的规格名
Openstack image list 查看id Openstack network list 查看id

heat_template_version: 2018-08-31description: Simple template to deploy a stack with two virtual machine instancesparameters:image_name_1: type: string label: Image ID description: SCOIMAGE Specify an image name for instance1 default: 08ec9068-b833-42e2-8410-e1bf15d78292public_net:type: stringlabel: Network IDdescription: SCONETWORK Network to be used for the compute instancedefault: 91488328-3886-4f1a-944a-e84ff5864d9cresources:mykey:type: OS::Nova::KeyPairproperties:save_private_key: truename: key666web_secgroup:type: OS::Neutron::SecurityGroupproperties:rules:- protocol: tcpremote_ip_prefix: 0.0.0.0/0port_range_min: 22port_range_max: 22- protocol: icmpprivate_net:type: OS::Neutron::Netproperties: name: private_netprivate_subnet:type: OS::Neutron::Subnetproperties: network_id: { get_resource: private_net }cidr: "192.168.66.0/24"ip_version: 4vrouter:type: OS::Neutron::Routerproperties: external_gateway_info: network: { get_param: public_net }vrouter_interface:type: OS::Neutron::RouterInterfaceproperties:router_id: { get_resource: vrouter }subnet_id: { get_resource: private_subnet }instance_port:type: OS::Neutron::Portproperties:network: { get_resource: private_net }security_groups: - default- { get_resource: web_secgroup }fixed_ips:- subnet_id: { get_resource: private_subnet }floating_ip:type: OS::Neutron::FloatingIPproperties:floating_network_id: { get_param: public_net }association:type: OS::Neutron::FloatingIPAssociationproperties:floatingip_id: { get_resource: floating_ip }port_id: { get_resource: instance_port }instance1: type: OS::Nova::Server properties:image: { get_param: image_name_1 }key_name: { get_resource: mykey }flavor: m2.memenetworks:- port : { get_resource : instance_port }outputs:private_key:description: Private keyvalue: { get_attr: [ mykey, private_key ] }

在这里插入图片描述
在这里插入图片描述
增加yml内容如创建磁盘
https://docs.openstack.org/heat/latest/template_guide/basic_resources.html#create-a-key-pair

neutron

OVN建立在OVS之上的,遵循SDN(SDN软件定义网络)架构来管理的,用软件将控制面和转发面分离(),OVN做控制面,OVS做转发面(OVS虚拟交换机)
https://mp.weixin.qq.com/s?__biz=MzAwMDQyOTcwOA==&mid=2247485357&idx=1&sn=1e80c02232e2bdafec8dcf71dd4fa265&chksm=9ae85c4ead9fd5584e488f7f7f5b7d2ad4bd86c18cb780d057653b23eac4001dabe8f9b6d98a&cur_album_id=2470011981178322946&scene=189#wechat_redirect
https://mp.weixin.qq.com/s?__biz=MzAwMDQyOTcwOA==&mid=2247485088&idx=1&sn=f7eb3126eaa7d8c2a5056332694aea8b&chksm=9ae85d43ad9fd455f5b293c7a7fa60847b14eea18030105f2f330ce5076e7ec44eca7d30abad&cur_album_id=2470011981178322946&scene=189#wechat_redirect

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/46558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Mybatis源码分析】解析语句标签_Select|Update|Insert|Delete

解析语句标签 Select|Update|Insert|Delete 一、前言二、语句标签的源码分析三、sql 标签的解析四、总结 一、前言 在阐述解析语句标签之前&#xff0c;得先知道我们的语句标签内容最后被封装到Configuration哪&#xff1f;&#xff08;都应该知道 Mybatis 通过的是 XMLConfig…

排序(七种排序)

1.插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 1.插入排序 1.1思路 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为 止&#xff0c;得到一个新的有序序列 1.2实现 //插入排…

全志orangepi-zero2驱动编写

文章目录 编译内核拓展一下&#xff0c;如果是其他板子内核编译有几种方式&#xff08;可以不用看&#xff09;&#xff1a;以下是树莓派板子的内核编译 驱动编写框架驱动框架 结束 编译内核 编写驱动之前先去官网下载&#xff0c;手册&#xff0c;跳到5.几章先弄好内核编译 照…

openGauss学习笔记-45 openGauss 高级数据管理-物化视图

文章目录 openGauss学习笔记-45 openGauss 高级数据管理-物化视图45.1 全量物化视图45.1.1 全量物化视图语法格式45.1.2 全量物化视图参数说明45.1.3 全量物化视图示例 45.2 增量物化视图45.2.1 增量物化视图语法格式45.2.2 增量物化视图参数说明45.2.3 增量物化视图示例 openG…

工厂模式并不难理解

文章目录 工厂模式简单工厂模式简单工厂模式使用的场景 工厂方法模式工厂方法模式使用场景 抽象工厂模式抽象工厂模式使用场景 工厂模式 功能&#xff1a;将对象的创建交给工厂&#xff0c;我们只需要告诉工厂我们要什么对象就可以得到该对象。 目的&#xff1a;实现创建对象…

【算法刷题之链表篇(1)】

目录 1.leetcode-82. 删除排序链表中的重复元素 II&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;方法及思路&#xff08;一次遍历&#xff09;&#xff08;3&#xff09;代码实现 2.leetcode-19. 删除链表的倒数第 N 个结点&#xff08;1&#xff09;题目描述&a…

无需公网IP——搭建web站点

文章目录 概述使用 Raspberry Pi Imager 安装 Raspberry Pi OS设置 Apache Web 服务器测试 web 站点安装静态样例站点将web站点发布到公网安装 Cpolar内网穿透cpolar进行token认证生成cpolar随机域名网址生成cpolar二级子域名将参数保存到cpolar配置文件中测试修改后配置文件配…

认识容器,走进Docker

文章目录 容器技术简介容器的核心技术容器平台技术容器的支持技术 Docker理念Docker安装配置阿里云镜像加速器 容器技术简介 一切在云端&#xff0c;万物皆容器&#xff0c;说到容器&#xff0c;大家都会想到Docker,Docker现在几乎是容器的代名词&#xff0c;什么是Docker&…

网络通信原理TCP的四次断开连接(第四十九课)

FIN:发端完成发送任务标识。用来释放一个连接。FIN=1表明此报文段的发送端的数据已经发送完毕,并要求释放连接。 SEQ:序号字段。 TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。 序列号为X ACK :确认号 。 …

ViT模型架构和CNN区别

目录 Vision Transformer如何工作 ViT模型架构 ViT工作原理解析 步骤1&#xff1a;将图片转换成patches序列 步骤2&#xff1a;将patches铺平 步骤3&#xff1a;添加Position embedding 步骤4&#xff1a;添加class token 步骤5&#xff1a;输入Transformer Encoder 步…

【Rust】Rust学习 第十五章智能指针

指针 &#xff08;pointer&#xff09;是一个包含内存地址的变量的通用概念。这个地址引用&#xff0c;或 “指向”&#xff08;points at&#xff09;一些其他数据。Rust 中最常见的指针是第四章介绍的 引用&#xff08;reference&#xff09;。引用以 & 符号为标志并借用…

C# Linq源码分析之Take (三)

概要 本文在前两篇Take源码分析的基础上&#xff0c;着重分析Range参数中有倒数的情况&#xff0c;即分析TakeRangeFromEndIterator的源码实现。 源码及分析 TakeRangeFromEndIterator方法用于处理Range中的开始和结束索引存在倒数的情况。该方法位于Take.cs文件中。通过yie…

Lnton羚通算法算力云平台在环境配置时 OpenCV 无法显示图像是什么原因?

问题&#xff1a; cv2.imshow 显示图像时报错&#xff0c;无法显示图像 0%| | 0/1 [00:00<…

构建 NodeJS 影院微服务并使用 docker 部署【01/4】

图片来自谷歌 — 封面由我制作 一、说明 构建一个微服务的电影网站&#xff0c;需要Docker、NodeJS、MongoDB&#xff0c;这样的案例您见过吗&#xff1f;如果对此有兴趣&#xff0c;您就继续往下看吧。 在本系列中&#xff0c;我们将构建一个 NodeJS 微服务&#xff0c;并使用…

qt初入门0:结构体中QString用memset导致崩溃分析及QLatin1String简单查看源码

初识Qt,进行开发时遇到一个崩溃问题 简单整理 1&#xff1a;问题描述如下&#xff0c;结构体中QString成员&#xff0c;然后对结构体调用了memset导致问题&#xff1a; 2&#xff1a;问题分析&#xff0c;加断点调试的方式可以明确分析到行数 可以明确看出&#xff0c;初始化…

Windows下问题定位

1、内存相关知识点&#xff1b; 1&#xff09;windows下32位进程&#xff0c;用户态为2G内存&#xff0c;内核态也为2G内存&#xff1b;却别于linux操作系统&#xff1b; 备注&#xff1a;可以通过命令行与管理员权限&#xff0c;启动3G的用户态空间&#xff0c;但是部…

git权限问题解决方法Access denied fatal: Authentication failed

文章目录 遇到Access denied 的权限问题解决方法1、git的密码修改过&#xff0c;但是本地没更新。2、确定问题&#xff0c;然后增加配置① 查询用户信息②如果名称和email不对&#xff0c;设置名称&#xff1a;③ 检查ssh-add是否链接正常④ 设置不要每次都输入用户名密码 3、配…

【校招VIP】CSS校招考点之选择器优先级

考点介绍&#xff1a; 选择器是CSS的基础&#xff0c;也是校招中的高频考点&#xff0c;特别是复合选择器的执行优先级&#xff0c;同时也是实战中样式不生效的跟踪依据。 因为选择器的种类较多&#xff0c;很难直接记忆&#xff0c;可以考虑选择一个相对值&#xff0c;比如id类…

人大进仓数据库ksql命令基础

测试环境信息: 系统为银河麒麟V10 数据库为Kingbase ES V8 数据库安装目录为/opt/Kingbase/ES/V8 ksql命令位于/opt/Kingbase/ES/V8/Server/bin下 使用--help获取帮助 续上图 1.查看数据库列表 ./ksql -U system -l 2.查看数据库版本 ./ksql -V 3.连接指定的数据库tes…

【GAMES202】Real-Time Shadows2—实时阴影2

一、PCSS回顾 上一篇我们说了如何用PCSS是实现软阴影&#xff0c;这个过程是没有任何问题的&#xff0c;但是有一个速度的问题&#xff0c;因为PCSS涉及到非常多次对纹理特定某一块区域遍历的操作&#xff08;工业界一般都是用在该区域采样的方式&#xff0c;会因此产生噪声&am…