通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统(虚拟出来的计算机都具有单独的操作系统,跟我们宿主机是相互隔离的),并且应用程序都可以在相互独立的空间内运行而互不影响。
虚拟化的优势:
重新定义划分IT资源,可以实现IT资源的动态分配,灵活调度,跨域共享
提高IT资源利用率
虚拟化的种类:
根据用途分
完全虚拟化:含有hypervisor的一种软件,VMware和微软的VirtualPC是代表该方法的两个商用商品。
准虚拟化:完全虚拟化是一项处理器密集型技术,因为他要求hypervisor管理各个虚拟服务器,并让他们彼此独立。准虚拟化代表:Xen
系统虚拟化:没有独立的hypervisor层,主机操作系统本身负责多个虚拟服务器之间的资源分配。
桌面虚拟化:比如上机考试的电脑,他本地是没有操作系统,而是远端有一个中心机房,把操作系统投射到你屏幕里,进行统一管理。
根据架构分
1型虚拟化:hypervisor直接部署在服务器的硬件上。典型代表:ESXi,Xen
2型虚拟化:首先在你的硬件上部署一个Linux操作系统,在这个操作系统上部署我们hypervisor软件。典型代表:(KVM,VirtualBox,VMWareWorkstation)
kvm是怎么进行管理的?
kvm是基于CPU的类型进行管理。
简述一下kvm的原理?
kvm全称“基于内核的虚拟机”,是一个开源的软件,基于内核的虚拟化技术,实际是嵌入系统的一个虚拟化模块,通过优化内核来使用虚拟技术,该内核模块使得Linux变成一个hypervisor,虚拟机使用Linux自身的调度器进行管理。(就是说Linux要部署一个kvm模块,他才能变成hypervisor层)。
kvm空间有哪些东西?
用户空间:指的是用户得到一个虚拟机
内核空间:指的是你的kvm宿主机里面它部署的虚拟化的软件,是通过驱动内核来实现的
虚机:指的是用户的得到一个虚拟机层
Guest:指的我们虚拟机,也称VM
kvm:运行在内核空间,提供CPU和内存的虚拟
QEMU(扩展软件):帮我们提供了虚拟机的I/O设备(CPU内存显示器),其他的硬件虚拟化
kvm.ko是什么?
kvm有一个内核模块叫kvm.ko,它来提供我们CPU和内存
Libvirt是什么?
kvm的管理工具
Libvirt包含些什么?
1后台daemon程序libvirtd:libvirtd是服务程序,接受和处理API请求
2API(软件的接口,可以根据这个接口开发管理的软件,调用这个程序)库
3命令行工具virsh
2、kvm虚拟机管理
virsh有哪两种模式?
命令模式
交互模式
kvm是怎么透传的?
让虚拟机中处理器对VT功能的支持达到透传的效果,也就是说KVM是将物理CPU的特性全部传给虚拟机,所有理论上可以嵌套N多层。
3、kvm存储管理
kvm的存储虚拟化是通过什么来管理的?
存储池(storagepool)和卷(volume)
StoragePool最常用的类型是什么?
文件目录类型
kvm默认的storagepool存放在哪?为什么是这个位置?
/var/lib/libvirt/images/
因为每个pool都有一个xml文件,该文件dir字段内定义了pool的存放路径。
KVM支持多种Volume文件格式:
raw:是默认格式,即原始磁盘镜像格式,移植性好,性能好,但大小固定,不能节省磁盘空间。
qcow2:是推荐使用的格式,cow表示copyonwrite,能够节省磁盘空间,支持AES加密,支持zlib压缩,支持多快照,功能很多。
vmdk:是VMWare的虚拟磁盘格式,也就是说VMWare虚机可以直接在KVM上运行。
4、kvm虚拟机迁移
什么是迁移?
在源主机上实时备份操作系统和应用程序的状态,然后把存储介质连接到目标主机上,最后在目标主机上恢复系统。
什么是完整备份,增量备份?
完整备份{全部备份},增量备份{只备份新增加的内容}
迁移的目的?
简化系统维护管理、提高系统负载均衡、增强系统错误容忍度、优化系统电源管理
什么是热迁移?
热迁移又叫动态迁移、实时迁移,即虚拟机保存/恢复
迁移的种类?
P2P:物理机之间的迁移
V2P:虚拟机迁到物理机
P2V:物理机迁到虚拟机
V2V:虚拟机迁到虚拟机
热迁移的应用有哪些?
1、虚拟机的热迁移技术最初是被用于双机容错或者负载均衡
2、系统硬件维护
3、数据库备份
4、环境重现
5、计算机共享
热迁移的优缺点?
优点:可伸缩性比较强,减低服务器的总体能耗
缺点:VMotion在进行迁移之前,管理软件会检测目标服务器的X86架构是否与原服务器兼容。CPU的类型也要一样,不仅不能一个是英特尔,一个是AMD,甚至相同厂商不同产品线的CPU也不行,比如英特尔至强和奔腾。
如何衡量迁移的效率?
3、对服务的性能影响
热迁移有哪些注意事项?
1、源宿主机和目的宿主机直接尽量用网络共享的存储系统来保存客户机磁盘镜像。
2、为了提高动态迁移的成功率,尽量在同类型cpu的主机上面进行动态迁移。
3、64位的客户机只能运行在64宿主机之间的迁移,而32位客户机可以在32宿主机和64位宿主机之间迁移。
4、目的宿主机和源宿主机的软件尽可能的相同。也就是同为Vmware,KVM,Xen等。
5、在进行动态迁移时,被迁移客户机的名称是唯一的,在目的宿主机上不能有与源宿主机被迁移客户机同名的客户机存在。
5、kvm虚拟机网卡管理
LAN是什么?
本地局域网
LAN中的计算机通常怎么去连接?
使用Hub集线器和Switch交换机
一个LAN表示一个广播域(路由器组播广播域)。
其含义是:LAN中的所有成员都会收到任意一个成员发出的广播包
VLAN表示什么?
虚拟的网络段,一个带有VLAN功能的switch能够将自己的端口划分出多个LAN
简单地说,VLAN将一个交换机分成了多个交换机,限制了广播的范围
在二层将计算机隔离到不同的VLAN中
通常交换机的端口有哪两种配置模式?
Access和Trunk
什么是网卡bond?
也称作网卡捆绑。就是将两个或者更多的物理网卡绑定成一个虚拟网卡。网卡是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在应用部署中是一种常用的技术。
网卡绑定的目的是什么?
1、提高网卡的吞吐量。
2、增强网络的高可用,同时也能实现负载均衡。
bond模式一共有几种?常用的是哪几种?
7种
mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。
1、openstack简介
目前主要的openstack的商业版本有哪些?
m版
openstack版本命名规则以及版本发布日期?
26个英文字母命名,每半年更新一次
Openstacck和云计算是什么?
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。
云计算是一个按使用量付费的商业模式,他这个模式根据用户的需求不同用户只要通过互联网,可以从云计算里面获取不同的资源(资源包括网络,服务器计算,存储,应用软件,服务)。
Openstack有哪些组件及作用?
计算:Nova:负责创建、调度、销毁云主机
镜像服务:Glance:装机使用
网络&地址管理:Neutron:负责实现SDN
对象存储:Swift:目录结构存储数据
块存储:Cinder:提供持久化块存储
UI界面:Horizon:web展示界面操作平台
测量:Ceilometer
部署编排:Heat
openstack共享服务组建有哪些?
数据库服务:MairaDB及MongoDB(部署度量服务时用到)
消息传输:RabbitMQ
缓存:Memcached
存储:ceph、GFS、LVM、ISICI等
高可用及负载均衡:pacemaker、HAproxy、keepalive、lvs等
云计算分为哪三个阶段?
物理服务器阶段
虚拟化架构阶段
云计算技术阶段
云计算提供的三个层次?
saas把在线软件作为一种服务
paas把平台作为一种服务
iaas把硬件设备作为一种服务
什么是中间件?
工作在两个或者多个软件之间的软件,就像是中介一样,承上启下,常见的中间件,rabbitmq(负责两个组件之间通信用的)tomcat(解释java程序),memcache(做网站缓存),redis(做网站缓存)
什么是耦合,解耦合?
比如拿一个应用来说,你有一个服务,那么这个服务最后达成一个应用的话,底层有很多很多小组件,必须相互之间去联系配合,才能提供服务,这些小组件之间必须有一定的关系的联系起来,这些关系就是耦合,这些小组件关系性越强,其中的某一个坏掉了,那么其他的就不能正常工作了,
所以说,松耦合性越高,依赖性越低。
2、Rabbitmq
什么是MQ?
是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息,(针对应用程序的数据)来通信,而无需专用连接来链接它们。
什么是AMQP?
高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
什么是rabbitmq?
属于一个流行的开源消息队列系统。属于AMQP(高级消息队列协议)标准的一个实现。
是应用层协议的一个开放标准,为面向消息的中间件设计。
用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
rabbitmq特点?
使用Erlang编写
支持持久化
支持HA
提供C#
rabbitmq工作原理?
(1)客户端连接到消息队列服务器,打开一个channel。
(4)客户端使用routingkey,在exchange和queue之间建立好绑定关系。
(5)客户端投递消息到exchange。
(6)exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。
rabbitmq的元数据?
元数据可以持久化在RAM或Disc.从这个角度可以把RabbitMQ集群中的节点分成两种
RAMNode和DiskNode.
RAMNode只会将元数````据存放在RAM
Disknode会将元数据持久化到磁盘。
rabbitmq中概念名词?
Broker简单来说就是消息队列服务器实体
Exchange消息交换机,它指定消息按什么规则,路由到哪个队列
Queue消息队列载体,每个消息都会被投入到一个或多个队列
Binding绑定,它的作用就是把exchange和queue按照路由规则绑定起来
RoutingKey路由关键字,exchange根据这个关键字进行消息投递
vhost虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离
producer消息生产者,就是投递消息的程序
consumer消息消费者,就是接受消息的程序
channel消息通道,在客户端的每个连接里,可建立多个channel
每个channel代表一个会话任务
3、memcached
缓存系统是怎么使用的呢?
一般是在大型海量的并发网站里面,或者是openstack这个云环境,当你的集群规模达到很大的时候,因为不管是你网站还是openstack也好,他底层都有数据库,一般我们都是用关系型数据库,尤其是大型的关系型数据库的话,如果对其进行每秒上万次的并发访问,每次都会去访问后台的数据库,那么对你的数据库而言会产生很大访问压力,数据库他的并发量并不支持很多,也就几百次,并且每次访问都在一个有上亿条记录的数据表中查询某条记录时,其效率会非常低,对数据库而言,这也是无法承受的。
Memcached缓存流程
client向apache发起一个网页访问,那么apache会先在memcache里面检索client访问的数据存不存在,如果存在,直接返回给client,如果不存在,memcache就去访问数据库,在数据库里找到了你要的数据,memcache会在缓存里缓存一份,同时发送给你client。
Memcached概念?
Memcached是一个开源的、高性能的分布式内存对象缓存系统、Memcached是一种内存缓存、当Memcached服务器节点的物理内存剩余空间不足,Memcached将使用最近最少使用算法(LRU,LastRecentlyUsed)对最近不活跃的数据进行清理,从而整理出新的内存空间存放需要存储的数据。
Memcached功能特点?
协议简单
基于libevent的事件处理(记录日志)
内置的内存管理方式
节点相互独立的分布式
使用Memcached应该考虑哪些因素?
Memcached服务单点故障
存储空间限制
存储单元限制
数据碎片
利旧算法局限性
数据访问安全性
keystone是什么?
keystone是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证、令牌的发放和校验、服务列表、用户权限的定义等等。
4、keystone
keystone之间的关系?
openstack系统基本角色有哪两个?
一个是管理员admin
一个是租户_member_
Keystone基本架构?
Token:用来生成和管理token
Catalog:用来存储和管理service/endpoint
Identity:用来管理tenant/user/role和验证
Policy:用来管理访问权限
5、Glance
glance是什么?
Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找、注册和检索等
Glance服务是负责管理镜像,不负责镜像的存储,它要把镜像存储到Glance服务运行的服务器的某一个目录下面,或者对接不同的后端。所以搭完Glance服务后要给它指定镜像保存的方式。
什么是image?
Image是一个模板,里面包含了基本的操作系统和其他的软件。就是把一个现成的虚拟机装好后做成镜像,上传到Glance服务里面,这就好比kvm的clone,直接基于某一个虚拟机去克隆他,可以达到秒级的或分钟级的。
什么是imageservice?它的具体功能是什么?
ImageService的功能是管理Image,让用户能够发现、获取和保存Image。在OpenStack中,提供ImageService的是Glance
1、提供RESTAPI让用户能够查询和获取image的元数据和image本身
2、支持多种方式存储image,包括普通的文件系统、Swift、AmazonS3等
3、对Instance执行Snapshot创建新的image
什么是glance-api?
glance-api是系统后台运行的服务进程。对外提供RESTAPI,响应image查询、获取和存储的调用。是负责用户检索的大门。
什么是glance-registry?
glance-registry是系统后台运行的服务进程。负责处理和存取image的metadata,例如image的大小和类型。在控制节点上可以查看glance-registry进程
什么是Database?
Image的metadata会保持到database中,默认是MySQL。在控制节点上可以查看glance的database信息
什么是Storebackend(后端存储)?
Glance自己并不存储image。真正的image是存放在backend中的。Glance支持多种backend,包括:
1.Adirectoryonalocalfilesystem(这是默认配置)
2.GridFS
3.CephRBD
4.AmazonS3
5.Sheepdog
6.OpenStackBlockStorage(Cinder)
7.OpenStackObjectStorage(Swift)
8.VMwareESX
6、nova
nova是什么?
Nova是OpenStack最核心的服务,负责维护和管理云环境的计算资源。OpenStack作为IaaS的云操作系统,虚拟机生命周期管理也就是通过Nova来实现的。计算资源只是内存跟cpu。
nova的用途和功能是什么?
1)实例生命周期管理
2)管理计算资源
3)网络和认证管理
4)REST风格的API(拥有自己的AIP,Nova-api)
5)异步的一致性通信
6)Hypervisor透明:支持Xen,XenServer/XCP,KVM,UML,VMwarevSphereandHyper-V
nova-api?
是整个Nova组件的门户,接收和响应客户的API调用。所有对Nova的请求都首先由nova-api处理。nova-api向外界暴露若干HTTPRESTAPI接口,在keystone中我们可以查询nova-api的endponits。
Nova-api对接收到的HTTPAPI请求会做什么处理?
1.检查客户端传入的参数是否合法有效
2.调用Nova其他子服务的处理客户端HTTP请求
3.格式化Nova其他子服务返回的结果并返回给客户端
nova-scheduler?
虚机调度服务,负责决定在哪个计算节点上运行虚机。创建Instance时,用户会提出资源需求,
例如CPU、内存、磁盘各需要多少。OpenStack将这些需求定义在flavor中,用户只需要指定用哪个flavor就可以了。
Filterscheduler是nova-scheduler默认的调度器,调度过程分为哪两步?
1.通过过滤器(filter)选择满足条件的计算节点(运行nova-compute)
2.通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建Instance。
Nova允许使用第三方scheduler,配置scheduler_driver即可。这又一次体现了OpenStack的开放性。
nova-compute?
nova-compute是管理虚机的核心服务,在计算节点上运行。通过调用HypervisorAPI实现节点上的instance的生命周期管理。
OpenStack对instance的操作,最后都是交给nova-compute来完成的。
nova-compute与Hypervisor一起实现OpenStack对instance生命周期的管理。
nova-conductor?
nova-compute经常需要更新数据库,比如更新和获取虚机的状态。出于安全性和伸缩性的考虑,nova-compute并不会直接访问数据库,而是将这个任务委托给nova-conductor。
nova-console:用户可以通过多种方式访问虚机的控制台
nova-novncproxy:基于Web浏览器的VNC访问
nova-spicehtml5proxy:基于HTML5浏览器的SPICE访问
nova-xvpnvncproxy:基于Java客户端的VNC访问
nova-consoleauth:负责对访问虚机控制台请求提供Token认证
nova-cert:提供x509证书支持
MessageQueue?
在前面我们了解到Nova包含众多的子服务,这些子服务之间需要相互协调和通信。为解耦各个子服务,Nova通过MessageQueue作为子服务的信息中转站。所以在架构图上我们看到了子服务之间没有直接的连线,是通过MessageQueue联系的。
OpenStack默认是用RabbitMQ作为MessageQueue。MQ是OpenStack的核心基础组件,我们后面也会详细介绍。
从学习Nova的角度看,虚机创建是一个非常好的场景,涉及的nova-*子服务很全,下面是流程。
1.客户(可以是OpenStack最终用户,也可以是其他程序)向API(nova-api)发送请求:“帮我创建一个虚机”
2.API对请求做一些必要处理后,向Messaging(RabbitMQ)发送了一条消息:“让Scheduler创建一个虚机”
3.Scheduler(nova-scheduler)从Messaging获取到API发给它的消息,然后执行调度算法,从若干计算节点中选出节点A
4.Scheduler向Messaging发送了一条消息:“在计算节点A上创建这个虚机”
5.计算节点A的Compute(nova-compute)从Messaging中获取到Scheduler发给它的消息,然后在本节点的Hypervisor上启动虚机。
6.在虚机创建的过程中,Compute如果需要查询或更新数据库信息,会通过Messaging向Conductor(nova-conductor)发送消息,Conductor负责数据库访问。
以上是创建虚机最核心的步骤,这几个步骤向我们展示了nova-*子服务之间的协作的方式,也体现了OpenStack整个系统的分布式设计思想,掌握这种思想对我们深入理解OpenStack会非常有帮助
7、Neutron(还需整理)
什么是SDN
软件定义网络的统称,把物理环境中的网络设备用软件来实现它的功能。
Neutron的设计目标是什么
网络即服务
local网络类型是什么样的?
本地宿主机网络,就是说我这个计算节点起的虚拟机,指定它用的是local网络,那么这个计算节点里面的虚拟机只可以跟它同在同一个宿主机里面的其他虚拟机通信,它不能跨节点通信。
flat网络类型?
flat网络中的实例能与位于同一网络的实例通信,并且可以跨多个节点。它无vlan标记。
vlan网络类型?
同一vlan中的instance可以通信,不同vlan只能通过router通信。vlan网络可跨节点,是应用最广泛的网络类型。它具有802.1q标记。
vxlan网络类型?
vxlan是基于隧道技术的overlay(覆盖)网络。vxlan网络通过唯一的segmentationID(分割ID)(也叫VNI)与其他vxlan网络区分。vxlan中数据包会通过VNI封装成UDP包进行传输。因为二层的包通过封装在三层传输,能够克服vlan和物理网络基础设施的限制。
gre网络类型?
gre是与vxlan类似的一种overlay网络。主要区别在于使用IP包而非UDP进行封装。
什么是subnet?
subnet是一个IPv4或者IPv6地址段。instance的IP从subnet中分配。每个subnet需要定义IP地址的范围和掩码。
什么是port?
port可以看做虚拟交换机上的一个端口。port上定义了MAC地址和IP地址,当instance的虚拟网卡VIF(VirtualInterface)绑定到port时,port会将MAC和IP分配给VIF。
Neutron提供了什么功能?
Neutron为整个OpenStack环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和VPN等。
Neutron通过dnsmasq提供DHCP服务,而dnsmasq通过LinuxNetworkNamespace独立的为每个network服务隔离
虚拟机连接外网的流量图走向(南北流向)?
vm要出外网,要经过一个tap设备,连接到了Linuxbridge网桥上,这个Linuxbridge叫qbr1b4cd,qbr1b4cd又要连接到br-int上,他俩之间有两个接口,Linuxbridge的接口是qvb1b4cd,br-int的接口是qvo1fb4cd,而后br-int又通过qr接口连接到ruter路由上,ruter路由通过qg接口连接到br-ex上,通过你的物理网卡就出去了。
虚拟机连接虚拟机的流量走向?
虚拟机跨节点通信流量走向(东西流向)?
8、cinder(还需整理)
cinder是什么?
cinder-api?
接收API请求,调用cinder-volume。是整个Cinder组件的门户,所有cinder的请求都首先由cinder-api处理。cinder-api向外界暴露若干HTTPRESTAPI接口。在keystone中我们可以查询cinder-api的endponits。
cinder-volume?
管理volume的服务,与volumeprovider协调工作,管理volume的生命周期。
运行cinder-volume服务的节点被称作为存储节点。
cinder-volume在存储节点上运行,OpenStack对Volume的操作,最后都是交给cinder-volume来完成的。
cinder-volume自身并不管理真正的存储设备,存储设备是由volumeprovider管理的。
cinder-volume与volumeprovider一起实现volume生命周期的管理。
Scheduler调度服务?
Cinder可以有多个存储节点,当需要创建volume时,cinder-scheduler会根据存储节点的属性和资源使用情况选择一个最合适的节点来创建volume。
Worker工作服务
调度服务只管分配任务,真正执行任务的是Worker工作服务。
在Cinder中,这个Worker就是cinder-volume了。这种Scheduler和Worker之间职能上的划分使得OpenStack非常容易扩展:当存储资源不够时可以增加存储节点(增加Worker)。当客户的请求量太大调度不过来时,可以增加Scheduler。
通过的Driver架构。cinder-volume为这些volumeprovider定义了统一的接口,volumeprovider只需要实现这些接口,就可以Driver的形式即插即用到OpenStack系统中。
9、horizon
什么是horizon?
Horizon为Openstack提供一个WEB前端的管理界面(UI服务),通过Horizone所提供的DashBoard服务,管理员可以使用通过WEBUI对Openstack整体云环境进行管理,并可直观看到各种操作结果与运行状态。
区域(Region)?
1、地理上的概念,可以理解为一个独立的数据中心,每个所定义的区域有自己独立的Endpoint;
2、区域之间是完全隔离的,但多个区域之间共享同一个Keystone和Dashboard(目前Openstack中的Dashboard还不支持多个区域);
3、除了提供隔离的功能,区域的设计更多侧重地理位置的概念,用户可以选择离自己更新的区域来部署自己的服务,选择不同的区域主要是考虑那个区域更靠近自己,如用户在美国,可以选择离美国更近的区域;
4、区域的概念是由Amazon在AWS中提出,主要是解决容错能力和可靠性;
可用性区域(AvailabilityZone)?
1、AZ是在Region范围内的再次切分,例如可以把一个机架上的服务器划分为一个AZ,划分AZ是为了提高容灾能力和提供廉价的隔离服务;
3、AZ是用户可见的一个概念,并可选择,是物理隔离的,一个AZ不可用不会影响其他的AZ,用户在创建Instance的时候可以选择创建到那些AZ中;
HostAggreates?
一组具有共同属性的节点集合,如以CPU作为区分类型的一个属性,以磁盘(SSD\SAS\SATA)作为区分类型的一个属性,以OS(Windows\Linux)为作区分类型的一个属性;
Cell?
nova为了增加横向扩展以及分布式、大规模(地理位置级别)部署的能力,同时又不增加数据库和消息中间件的复杂度,引入了cell的概念,并引入了nova-cell服务。
1、主要是用来解决OpenStack的扩展性和规模瓶颈;
2、每个Cell都有自己独立的DB和AMQP,不与其他模块共用DB和AMQP,解决了大规模环境中DB和AMQP的瓶颈问题;
3、Cell实现了树形结构(通过消息路由)和分级调度(过滤算法和权重算法),Cell之间通过RPC通讯,解决了扩展性问题。
10、ceph(还需整理)
什么是分布式存储?
我在一个环境当中,有很多很多的服务器,服务器上也有它自己很多的硬盘,我通过软件的形式把若干服务器都收集起来,部署成一个软件,在这个逻辑的软件里可以同时看到我若干服务器的磁盘的空间,这个逻辑的软件对外就像是一个整体一样,这个整体叫storagespool,用户呢有一天想用这个空间了,用户直接去对应这个存储池提供的接口,这用的话,用户保存一个文件,实际上保存在若干个服务器里,文件会随机存到第一个服务器的第一块硬盘里,下一次就可能存到第二个服务器的第三块硬盘里。它会把文件进行打散,分成不同的小块,每块存放的位置可能是不同的服务器上的不同硬盘里。
ceph的特点?
高性能:a.摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架、感知等。c.能够支持上千个存储节点的规模,支持TB到PB级的数据。
高可用性:a.副本数可以灵活控制。(就是说让副本保存份数可以多份,在正常的生产环境是保存3副本)b.支持故障域分隔,数据强一致性。c.多种故障场景自动进行修复自愈。d.没有单点故障,自动管理。(假如说我这个文件设置的是3副本,如果后端服务器坏掉,副本数不够3,它会自动补充至3副本)
高可扩展性:a.去中心化。b.扩展灵活。c.随着节点增加而线性增长。
特性丰富:a.支持三种存储接口:块存储(我得到的是硬盘)、文件存储(目录)、对象存储(有可能给你对接的是一个挂载的目录,但是后端怎么去存的,它会把数据打散,采用键值对形式存储)。b.支持自定义接口,支持多种语言驱动。
ceph提供的功能有哪些?
对象存储(RADOSGW):提供RESTful接口,也提供多种编程语言绑定。兼容S3(是AWS里的对象存储)、Swift(是openstack里的对象存储);块存储(RDB):由RBD提供,可以直接作为磁盘挂载,内置了容灾机制;文件系统(CephFS):提供POSIX兼容的网络文件系统CephFS,专注于高性能、大容量存储;什么是块存储/对象存储/文件系统存储?一个文件在ceph里怎么做的读取和存储?
首先用户把一个文件放到ceph集群后,先把文件进行分割,分割为等大小的小块,小块叫object,让后这些小块跟据一定算法跟规律,算法是哈希算法,放置到PG组里,就是归置组,然后再把归置组放到OSD里面。
1、docker简介
什么是docker?
docker是一个技术的类别,docker就像云计算里的openstack一样,它是虚拟化里的一款软件。
docker是以什么样的形式存在操作系统中?
进程
docker的目标是什么?
一次封装,到处运行
docker特点?
优点:
1、启动快,资源占用小,资源利用高,快速构建标准化运行环境。
2、创建分布式应用程序时快速交付和部署,更轻松的迁移和扩展,更简单的更新管理。
局限:
1、Docker是基于Linux64bit的,无法在windows/unix(是Linux系统的鼻祖)或32bit的linux环境下使用。
2、LXC是基于cgroup等linuxkernel功能的,因此container的guest系统只能是linux。
3、隔离性相比KVM(因为kvm是完全的虚拟化,它中间有hypervirson独立的虚拟化层来管理上层的kvm虚拟机,但是容易是寄托于宿主机里面的进程,它就是宿主机里的一个进程,假如说你宿主机坏了,那么你这个容器也就不能用了,但是kvm的宿主机坏了,可以把kvm的文件copy出来还可以使用)之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库。
4、管理相对简单,主要是基于namespace隔离。
5、cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)。
6、docker对disk的管理比较有限。
7、container随着用户进程的停止而销毁,container中的log等用户数据不便收集。
docker与虚拟机比较?
1、启动快比虚拟机,可以秒级启动,像虚拟机启动,需要有开机的流程。
2、对资源占用小,宿主机上可运行千台容器。
3、方便用户获取,分布,和更新应用镜像(生成容器的基础,就像我们给虚拟机安装操作系统一样,你得有一个iso的基础镜像,你才能装操作系统,容易也一样,但容器的镜像不是iso文件),指令简单,学习费用低。
4、通过Dockerfile配置文件来灵活的自动创建和部署镜像&容器,提高工作效率。
5、Docker除了运行其中应用外,基本不消耗其他系统资源,保证应用性能同时,尽量减小系统开销(如果我们在宿主机里运行一台kvm虚拟机,那么这个kvm虚拟机的操作系统本身也会占用宿主机一定的资源,你如果再在kvm上部署一个mysql或者apache,那么他俩也会占用宿主机的系统资源,但是容器不一样,如果你这个容器运行的是mysql,那么只有mysql会占用你系统的资源,容器本身是不占用的)。
docker镜像为什么要分层?
这个就是我们最新下载的镜像,它底层运行的kernel(内核),还有bootfs(开启引导项的一个文件系统)这是我们的基础镜像层,第二层是怎么来的,有一天对这个镜像做了一个更改,比如说我想以后我启动的这个容器/root目录下都有相同的一个文件,那我得对这个镜像做更改,不更改的话,我以后生成的容易,就没有我想要的这个文件了。我做的这个修改会在二层之上累加一层,如图
把我对这个原来的镜像所作的操作变化、新添加的东西都保存在最上层,你每做的一次更改,它都会往高的累加。我现在/root添加了一个文件,那么我还想在/root创建一个目录,那么它会在上一个状态的基础上又多一层,新状态的最上层,记录了我创建这个目录的记录,如图。
可以看到,新镜像是从base镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。
docker底层依赖哪些核心技术?
命名空间(Namespaces):实现了容器间资源的隔离。
联合文件系统(UnionFileSystem):控制为每一个成员目录设定只读/读写/写出权限。
Linux虚拟网络支持:本地和容器内创建虚拟接口
2、docker存储和网络
docker有哪两种存储资源类型?
(1)DataVolume(数据卷)
(2)DataVolumeDontainers---数据卷容器
什么是DataVolume?
DataVolume本质上是DockerHost文件系统中的目录或文件,使用类似与Linux下对目录或者文件进行mount操作。数据卷可以在容器之间共享和重用,对数据卷的更改会立马生效,对数据卷的更新不会影响镜像,卷会一直存在,直到没有容器使用。
DataVolume的特点有哪些
a)DataVolume是目录或文件,而并非格式化的磁盘(块设备)。
b)容器可以读写volume中的数据。
c)volume数据可以被永久的保存,即使使用它的容器已经销毁。
什么是DataVolumeDontainers?
如果用户需要在容器之间共享一些持续更新的数据,最简单的方法就是使用数据卷容器,其实数据卷容器就是一个普通的容器,只不过是专门用它提供数据卷供其他容器挂载使用。
Docker--none网络
none网络就是什么都没有的网络。挂在这个网络下的容器除了lo,没有其他任何网卡。
Dockerhost网络
host网络连接到host网络的容器,共享dockerhost的网络栈,容器的网络配置与host完全一样。
DockerBridge网络
docker安装时会创建一个命名为docker0的linuxbridge。如果不指定--network,创建的容器默认都会挂到docker0上。
Kubernetes的几个重要概念
Cluster
Cluster是计算、存储和网络资源的集合,Kubernetes利用这些资源运行各种基于容器的应用。
Master(其实Master是一个服务,也是一个节点,可以理解为控制节点)
Master是Cluster的大脑,它的主要职责是调度,即决定将应用放在哪里运行。Master运行Linux操作系统,可以是物理机或者虚拟机。为了实现高可用,可以运行多个Master。
Node(计算节点)
Node的职责是运行容器应用。Node由Master管理,Node负责监控并汇报容器的状态,并根据Master的要求管理容器的生命周期。Node运行在Linux操作系统,可以是物理机或者是虚拟机。
Pod
假如说下图是k8s的一个生态环境,那么这套系统里运行着很多的容器(小圆圈代表容器),那么我们k8s集群要管理这些零散的容器,它不是直接去调用容器,而是把容器放到一个盒子里,一个调度单元里,它管理你集群是管理你的调度单元,调度单元里可以运行一个容器,也可以运行多个容器。
Pod是Kubernetes的最小工作单元。每个Pod包含一个或多个容器。Pod中的容器会作为一个整体被Master调度到一个Node上运行。
Kubernetes引入Pod主要基于下面两个目的:
1、可管理性。
有些容器天生就是需要紧密联系,一起工作。Pod提供了比容器更高层次的抽象,将它们封装到一个部署单元中。Kubernetes以Pod为最小单位进行调度、扩展、共享资源、管理生命周期。
2、通信和资源共享。
Pod中的所有容器使用同一个网络namespace,即相同的IP地址和Port空间。它们可以直接用localhost通信。同样的,这些容器可以共享存储,当Kubernetes挂载volume到Pod,本质上是将volume挂载到Pod中的每一个容器。
Pods有两种使用方式:
1、运行单一容器。
one-container-per-Pod是Kubernetes最常见的模型,这种情况下,只是将单个容器简单封装成Pod。即便是只有一个容器,Kubernetes管理的也是Pod而不是直接管理容器。
2、运行多个容器。
哪些容器应该放到一个Pod中?这些容器联系必须非常紧密,而且需要直接共享资源。
Controller(组件)
Kubernetes通常不会直接创建Pod,而是通过Controller来管理Pod的。Controller中定义了Pod的部署特性,比如有几个副本,在什么样的Node上运行等。为了满足不同的业务场景,Kubernetes提供了多种Controller类型,包括Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等
Deployment是最常用的Controller,比如前面在线教程中就是通过创建Deployment来部署应用的。Deployment可以管理Pod的多个副本,并确保Pod按照期望的状态运行。
ReplicaSet实现了Pod的多副本管理。使用Deployment时会自动创建ReplicaSet,也就是说Deployment是通过ReplicaSet来管理Pod的多个副本,我们通常不需要直接使用ReplicaSet。
DaemonSet用于每个Node最多只运行一个Pod副本的场景。正如其名称所揭示的,DaemonSet通常用于运行daemon。
StatefuleSet能够保证Pod的每个副本在整个生命周期中名称是不变的。而其他Controller不提供这个功能,当某个Pod发生故障需要删除并重新启动时,Pod的名称会发生变化。同时StatefuleSet会保证副本按照固定的顺序启动、更新或者删除。
Job用于运行结束就删除的应用。而其他Controller中的Pod通常是长期持续运行。
Service
Deployment可以部署多个副本,每个Pod都有自己的IP,外界如何访问这些副本呢?
通过Pod的IP吗?
要知道Pod很可能会被频繁地销毁和重启,它们的IP会发生变化,用IP来访问不太现实。
答案是Service。
KubernetesService定义了外界访问一组特定Pod的方式。Service有自己的IP和端口,Service为Pod提供了负载均衡。
Kubernetes运行容器(Pod)与访问容器(Pod)这两项任务分别由Controller和Service执行。
Namespace
如果有多个用户或项目组使用同一个KubernetesCluster,如何将他们创建的Controller、Pod等资源分开呢?
答案就是Namespace。
Namespace可以将一个物理的Cluster逻辑上划分成多个虚拟Cluster,每个Cluster就是一个Namespace。不同Namespace里的资源是完全隔离的。
Kubernetes默认创建了三个Namespace。
default--创建资源时如果不指定,将被放到这个Namespace中。
kube-system--Kubernetes自己创建的系统资源将放到这个Namespace中。
kube-public--Kubernetes公共的系统资源将放到这个Namespace中。
如果一组Pod对外提供服务(比如HTTP),它们的IP很有可能发生变化,那么客户端如何找到并访问这个服务呢?
Kubernetes给出的解决方案是Service。
在k8s里面,比如我们运行了一个服务,这个服务是启动了3副本,客户端要访问这个服务的时候,不是直接访问你的pod,而是访问pod对外提供的代表,service,service会固定一个IP地址,即使你的pod怎么去销毁重新创建,没关系,我service对外提供服务,你只要访问我service这个固定IP就好。(你访问service的时候,不是说三个pod同时对外提供服务,它会把你请求呢根据一定的算法,转发到你后端的三个pod里面,有可能你这个访问的是第一个pod给你提供的实际服务,有可能第二次就是第二个pod给你提供的服务,那么类似于负载均衡这个工作是kube-proxy做的。)
ServiceClusterIP是一个虚拟IP,是由Kubernetes节点上的iptables规则管理的。
外网如何访问Service?
除了Cluster内部可以访问Service,很多情况我们也希望应用的Service能够暴露给Cluster外部。Kubernetes提供了多种类型的Service,默认是ClusterIP。
ClusterIP
Service通过Cluster内部的IP对外提供服务,只有Cluster内的节点和Pod可访问,这是默认的Service类型,前面实验中的Service都是ClusterIP。
NodePort
Service通过Cluster节点的静态端口对外提供服务。Cluster外部可以通过
LoadBalancer
Service利用cloudprovider特有的loadbalancer对外提供服务,cloudprovider负责将loadbalancer的流量导向Service。目前支持的cloudprovider有GCP、AWS、Azur等。
KubernetesCluster由两种类型的节点来组成的,一种是Master节点,一种是Node节点
Master节点
Master是KubernetesCluster的大脑,运行着如下Daemon(进程)服务:kube-apiserver(接口)、kube-scheduler(调度)、kube-controller-manager(控制管理)、etcd(数据库[kunbernetes的数据库是键值对的数据库])和Pod网络(例如flannel)。
APIServer(kube-apiserver)
APIServer提供HTTP/HTTPSRESTfulAPI,即KubernetesAPI。APIServer是KubernetesCluster的前端接口,各种客户端工具(CLI或UI)以及Kubernetes其他组件可以通过它管理Cluster的各种资源。
Scheduler(kube-scheduler)
Scheduler负责决定将Pod放在哪个Node上运行(也就是决定你哪个容器运行在哪个计算节点上)。Scheduler在调度时会充分考虑Cluster的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。
ControllerManager(kube-controller-manager)(控制管理)
ControllerManager负责管理Cluster各种资源,保证资源处于预期的状态。ControllerManager由多种controller组成,包括replicationcontroller、endpointscontroller、namespacecontroller、serviceaccountscontroller等。
不同的controller管理不同的资源。例如replicationcontroller管理Deployment、StatefulSet、DaemonSet的生命周期,namespacecontroller管理Namespace资源。
etcd
Pod网络
Pod要能够相互通信,KubernetesCluster必须部署Pod网络,flannel是其中一个可选方案。
node节点
Node是Pod运行的地方,Kubernetes支持Docker、rkt等容器Runtime。Node上运行的Kubernetes组件有kubelet、kube-proxy和Pod网络(例如flannel)。
kubelet
kubelet是Node的agent,当Scheduler确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、volume等)发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向Master报告运行状态。
kube-proxy
service在逻辑上代表了后端的多个Pod,外界通过service访问Pod。service接收到的请求是如何转发到Pod的呢?这就是kube-proxy要完成的工作。
每个Node都会运行kube-proxy服务,它负责将访问service的TCP/UPD数据流转发到后端的容器。如果有多个副本,kube-proxy会实现负载均衡。
kubernetes创建资源的两种方式
基于命令行的方式:
基于配置文件的方式:
后面我们都将采用配置文件的方式,大家需要尽快熟悉和掌握。
kubectlapply不但能够创建Kubernetes资源,也能对资源进行更新,非常方便。不过Kubernets还提供了几个类似的命令,例如kubectlcreate(他只是一个简单的创建过程)、kubectlreplace、kubectledit和kubectlpatch。
为避免造成不必要的困扰,我们会尽量只使用kubectlapply(因为它可以对资源进行更新),此命令已经能够应对超过90%的场景,事半功倍。
openstack命令
openstack-servicerestart#重启openstack服务
openstackendpoint-list#查看openstack的端口
nova的常用命令
novalist#列举当前用户所有虚拟机
novashowID#列举某个虚机的详细信息
novadeleteID#直接删除某个虚机
novaservice-list#获取所有服务列表
novaimage-list#获取镜像列表
novaflavor-list#列举所有可用的类型
novavolume-list#列举所有云硬盘
novavolume-show#显示指定云硬盘的详细信息
novavolume-create#创建云硬盘
novavolume-delete#删除云硬盘
novavolume-snapshot-create#创建云硬盘快照
novavolume-snapshot-delete#删除云硬盘快照
novalive-migrationIDnode#热迁移
novamigrateIDnode#冷迁移
novamigration-list#列出迁移列表
novaget-vnc-consoleIDnovnc#获取虚机的vnc地址
novareset-state--activeID#标识主机状态
neutron常用命令
neutronagent-list#列举所有的agent
neutronagent-showID#显示指定agent信息
neutronport-list#查看端口列表
neutronnet-list#列出当前租户所有网络
neutronnet-list--all-tenants#列出所有租户所有网络
neutronnet-showID#查看一个网络的详细信息
neutronnet-deleteID#删除一个网络
ipnetns#查看命名空间
ipnetsnexechaproxyipa#查看haproxy的ip
cinder命令
cinderlist#列出所有的volumes
cinderservice-list#列出所有的服务
cindersnapshot-list#列出所有的快照
cinderbackup-list#列出所有备份
cindertype-list#列出所有volume类型
cindershow
cinderdelete
ceph命令
ceph-s#查看osd状态
cephosdtree#查看osd
cephosddownosd.0#终止osd.0
cephosdrm0#删除osd.0
cephhealthdetail#查看集群健康状况
cephauthlist#获取权限列表
cephauthcapsclient.lucymon'allowr'mds'allwor,allowrwpath=/lucy,allowrwpath=/jerry_share'osd'allowrw'#修改clent.lucy用户权限
cephauthget-keyclient.lucy#获取某个用户的key
systemctlstatusceph-osd.target#重启osd服务
systemctlstatusceph-osd@5.service#查看osd.5的状态
rabbitmq命令
rabbitmqctlcluster_status#查看消息队列集群状态
rabbitmqctlstart_app#启动
rabbitmqctlstop_app#停止
rabbitmqctlreset#重置
rabbitmqctllist_queues#查看rabbitmq队列
systemctlstatusrabbitmq-service.service#查看rabbitmq的状态
镜像格式转换
qemu-imgconvert-fqcow2-0rawWin10_1803_chinese_x64_glance.qcow2Win10_1803_chinese_x64_glance.raw
上传镜像
openstackimagecreate"name"--filecirros-0.3.5-x86_64-disk.img--disk-formatqcow2--container-formatbare--public