对于新手来说,了解OpenStack还是有些难度的,这篇文章重点关注于OpenStack一些基础的概念知识,希望对各位有所帮助
Glance 为 VM 提供 image
Cinder 和 Swift 分别为 VM 提供块存储和对象存储
Neutron 为 VM 提供网络连接
keystone
- 管理用户及其权限
- 维护 OpenStack Services 的 Endpoint
- Authentication(认证)和 Authorization(鉴权)
OpenStack 排查问题的方法主要是通过日志,每个 Service 都有自己的日志文件。
Keystone 主要有两个日志:keystone.log 和 keystone_access.log
/var/log/keystone/keystone.log
Endpoint 是一个网络上可访问的地址,通常是一个 URL。Service 通过 Endpoint 暴露自己的 API
Keystone 负责管理和维护每个 Service 的 Endpoint
可以使用下面的命令来查看 Endpoint
root@devstack-controller:~# source devstack/openrc admin admin
root@devstack-controller:~# openstack catalog list
glance
OpenStack 由 Glance 提供 Image 服务
Image 是一个模板,里面包含了基本的操作系统和其他的软件。
在 OpenStack 中,提供 Image Service 的是 Glance,其具体功能如下
- 提供 REST API 让用户能够查询和获取 image 的元数据和 image 本身
- 支持多种方式存储 image,包括普通的文件系统、Swift、Amazon S3 等
- 对 Instance 执行 Snapshot 创建新的 image
Glance 自己并不存储 image。 真正的 image 是存放在 backend 中的。
Glance 支持多种 backend,包括
- A directory on a local file system(这是默认配置)
- GridFS
- Ceph RBD
- Amazon S3
- Sheepdog
- OpenStack Block Storage (Cinder)
- OpenStack Object Storage (Swift)
- VMware ESX
具体使用哪种 backend,是在 /etc/glance/glance-api.conf 中配置的
filesystem_store_datadir = /var/lib/glance/images/ 保存的image目录
glance image-list 查看目前已经存在的 image
制作镜像-web说先去生成快照 然后用glance image-list查看id
glance image-download –file /root/test.img(名字) 956bea57-617a-4afb-ae63-d15da057c252 (id)
然后转换镜像格式
qemu-img convert -c -O qcow2 test.img test.qcow2
qemu-img convert -f qcow2 -O raw (-f为指定源格式 )
Openstack手动创建快照步骤:
找到实例的ID 如:b0778aff-ff7e-42dd-9b76-d753c9
在实例所在节点进入该实例目录 如
/var/lib/nova/instances/b0778aff-ff7e-42dd-9b76-d753c9d1bea3
里面有个disk文件,就是实例的对应磁盘文件
停止该实例运行
压缩复制该文件
qemu-img convert -c -O qcow2 disk win7_stu.qcow2
命令行上传镜像
glance image-create –name “iperf” –file iperf.vmdk –disk-format vmdk –container-format bare –visibility public –progress
–id #镜像的ID
–name #镜像的名称
–store #储存的镜像上传到
–disk-format #镜像的格式。可以接受的格式包含: ami,ari, aki, vhd, vmdk, raw, qcow2, vdi, and iso.
–container-format #镜像容器的格式。可以接受的格式包含:ami,ari, aki, bare, and ovf.
–owner # 拥有该镜像的租户
–size #镜像的大小(以bytes表示). 一般只与’–location’和’–copy_from’一起使用。
–min-disk #启动镜像所需的最小硬盘空间(用gigabytes表示).
–min-ram #启动镜像所需的最小内存数量(用megabytes表示).
–location #镜像所在位置的URL。例如,如果镜像储存在swift中,
–file #在创建过程中将要被上传的本地文件(包括硬盘镜像)。另外,镜像也可以通过stdin传递给客户端。
–checksum #被Glance使用的可用于认证的镜像数据的哈希值,在此请提供一个md5校验值。
–copy-from #用法和’–location’参数相似,但表明Glance服务器应该能立即从镜像所储存的地方拷贝数据并储存。
–is-public [True|False] #表示镜像是否能被公众访问。
–is-protected [True|False] #用于避免镜像被删除。
–property #与镜像有关的任意的属性。可以使用很多次。
–human-readable #用对人友好的格式打印镜像的尺寸。
–progress #显示上传的进度条
glance image-delete id 删除镜像
Glance 主要有两个日志,glance_api.log 和 glance_registry.log,保存在/var/log/glance/目录里。
neutron 管理的是网络和子网
网络相关操作
neutron net-create
neutron net-delete
neutron net-update
neutron net-list
neutron net–show
子网相关操作
neutron subnet-create
neutron subnet-delete
neutron subnet-update
neutron subnet-list
neutron subnet–show
nova
Nova 的架构比较复杂,包含很多组件,这些组件以子服务(后台 deamon 进程)的形式运行,可以分为以下几类:
nova-api
接收和响应客户的 API 调用,所有nova请求都是由nova-api处理
除了提供 OpenStack 自己的API,nova-api 还支持 Amazon EC2 API。也就是说,如果客户以前使用 Amazon EC2,并且用 EC2 的 API 开发了些工具来管理虚机,那么如果现在要换成 OpenStack,这些工具可以无缝迁移到OpenStack,因为 nova-api 兼容 EC2 API,无需做任何修改。
Nova-api 对接收到的 HTTP API 请求会做如下处理:
检查客户端传人的参数是否合法有效
调用 Nova 其他子服务的处理客户端 HTTP 请求
格式化 Nova 其他子服务返回的结果并返回给客户端
nova-scheduler
虚机调度服务,负责决定在哪个计算节点上运行虚机(默认实现是根据计算节点空闲的内存量计算权重值:空闲内存越多,权重越大,instance 将被部署到当前空闲内存最多的计算节点上)
在 /etc/nova/nova.conf 中,nova 通过 scheduler_driver,scheduler_available_filters 和 scheduler_default_filters这三个参数来配置 nova-scheduler
nova-scheduler相关日志 nova-scheduler在: /var/log/nova/scheduler.log
nova-compute
管理虚机的核心服务,通过调用 Hypervisor API 实现虚机生命周期管理
nova-compute 需要获取和更新数据库中 instance 的信息。但 nova-compute 并不会直接访问数据库,而是通过 nova-conductor 实现数据的访问。
每隔一段时间,nova-compute 就会报告当前计算节点的资源使用情况和 nova-compute 服务状态。
nova-compute 创建 instance 的过程可以分为 4 步:
为 instance 准备资源
创建 instance 的镜像文件
创建 instance 的 XML 定义文件
创建虚拟网络并启动虚拟机
Hypervisor
计算节点上跑的虚拟化管理程序,虚机管理最底层的程序。 不同虚拟化技术提供自己的 Hypervisor。 常用的 Hypervisor 有 KVM,Xen,VMWare 等
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 证书支持
openstack的日志
Nova 放在 /var/log/nova/ 下,Glance 放在/var/log/glance下……
各个子服务的日志文件也是单独保存,命名也很规范,容易区分。比如 nova-api 的日志一般就命名为 /var/log/nova/api.log,其他日志类似。
所有日志格式都是统一的
<时间戳><日志等级><代码模块><日志内容><源代码位置>
说明:
时间戳 日志记录的时间,包括 年 月 日 时 分 秒 毫秒
日志等级 有INFO WARNING ERROR DEBUG等
代码模块当前运行的模块Request ID 日志会记录连续不同的操作,为了便于区分和增加可读性,
每个操作都被分配唯一的Request ID,便于查找
日志内容 这是日志的主体,记录当前正在执行的操作和结果等重要信息
源代码位置 日志代码的位置,包括方法名称,源代码文件的目录位置和行号。这一项不是所有日志都有
用 tail -f 打印日志文件,这样需要查看的日志肯定在操作之后的打印输出的这些内容里。 另外也可以通过时间戳来确定需要的日志范围。
openstack 冷迁移
Migrate 操作的作用是将 instance 从当前的计算节点迁移到其他节点上。Migrate 不要求源和目标节点必须共享存储,当然共享存储也是可以的。
Migrate 前必须满足一个条件:计算节点间需要配置 nova 用户无密码访问。
1、用户操作,向 nova-api 发送请求
2、nova-api 发送消息
3、nova-scheduler 执行调度
4、nova-scheduler 发送消息
5、nova-compute 执行操作
创建流程
- 界面或命令行通过RESTful API向keystone获取认证信息。
- keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
- 界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
- nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
- keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
- 通过认证后nova-api和数据库通讯。
- 初始化新建虚拟机的数据库记录。
- nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
- nova-scheduler进程侦听消息队列,获取nova-api的请求。
- nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
- 对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
- nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
- nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
- nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)
- nova-conductor从消息队队列中拿到nova-compute请求消息。
- nova-conductor根据消息查询虚拟机对应的信息。
- nova-conductor从数据库中获得虚拟机对应信息。
- nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
- nova-compute从对应的消息队列中获取虚拟机信息消息。
- nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
- glance-api向keystone认证token是否有效,并返回验证结果。
- token验证通过,nova-compute获得虚拟机镜像信息(URL)。
- nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
- neutron-server向keystone认证token是否有效,并返回验证结果。
- token验证通过,nova-compute获得虚拟机网络信息。
- nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
- cinder-api向keystone认证token是否有效,并返回验证结果。
- token验证通过,nova-compute获得虚拟机持久化存储信息。
- nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。