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