镜像和实例¶
虚拟机镜像包含一个虚拟磁盘,其中包含一个可启动的操作系统。磁盘镜像为虚拟机文件系统提供了模板。镜像服务控制镜像的存储和管理。
实例是在云内部的物理计算节点上运行的单个虚拟机。用户可以从同一个镜像启动任意数量的实例。每个启动的实例都从基础镜像的副本运行。对实例所做的任何更改都不会影响基础镜像。快照捕获实例运行磁盘的状态。用户可以创建快照,并基于这些快照构建新镜像。计算服务控制实例、镜像和快照的存储和管理。
启动实例时,您必须选择一个flavor,它代表一组虚拟资源。Flavor定义了虚拟CPU数量、可用RAM大小和临时磁盘大小。用户必须从云上定义的可用flavor集中进行选择。OpenStack提供了许多预定义的flavor,您可以编辑或添加它们。
注意
有关创建和故障排除镜像的更多信息,请参阅OpenStack虚拟机镜像指南。
有关镜像配置选项的更多信息,请参阅OpenStack配置参考的镜像服务部分。
您可以从正在运行的实例中添加和删除额外资源,例如持久卷存储或公共IP地址。本章使用的示例是OpenStack云中典型的虚拟系统。它使用cinder-volume服务,该服务提供持久块存储,而不是所选实例flavor提供的临时存储。
此图显示了启动实例前的系统状态。镜像存储库中有许多预定义的镜像,由镜像服务支持。在云内部,计算节点包含可用的vCPU、内存和本地磁盘资源。此外,cinder-volume服务存储预定义卷。
没有运行实例的基础镜像状态
实例启动¶
要启动实例,请选择一个镜像、flavor和任何可选属性。选定的flavor提供一个根卷(在此图中标记为vda)和额外的临时存储(标记为vdb)。在此示例中,cinder-volume存储映射到此实例上的第三个虚拟磁盘,即vdc。
从镜像创建实例
镜像服务将基础镜像从镜像存储库复制到本地磁盘。本地磁盘是实例访问的第一个磁盘,它是标记为vda的根卷。较小的实例启动更快。需要跨网络复制的数据更少。
还创建了新的空临时磁盘,标记为vdb。删除实例时,此磁盘将被删除。
计算节点使用iSCSI连接到已连接的cinder-volume。cinder-volume映射到此图中标记为vdc的第三个磁盘。计算节点配置vCPU和内存资源后,实例从根卷vda启动。实例运行并更改磁盘上的数据(在图中以红色突出显示)。如果卷存储位于单独的网络上,则存储节点配置文件中指定的my_block_storage_ip选项会将镜像流量定向到计算节点。
注意
此示例场景中的某些细节在您的环境中可能有所不同。例如,您可能使用不同类型的后端存储或不同的网络协议。一个常见的变体是用于卷vda和vdb的临时存储可以由网络存储而不是本地磁盘支持。
删除实例时,除持久卷外,状态将被回收。临时存储(无论是否加密)都将被清除。内存和vCPU资源将被释放。在此过程中,镜像保持不变。
实例退出后镜像和卷的最终状态
镜像属性和属性保护¶
镜像属性是管理员或镜像所有者附加到OpenStack镜像服务镜像的键值对,如下所示
管理员定义核心属性,例如镜像名称。
管理员和镜像所有者可以定义附加属性,例如许可和计费信息。
管理员可以将任何属性配置为受保护,这限制了哪些策略或用户角色可以对该属性执行CRUD操作。受保护的属性通常是只有管理员才能访问的附加属性。此外,Glance本身保留以os_glance前缀命名的属性供其自身使用。
对于未受保护的镜像属性,管理员可以管理核心属性,镜像所有者可以管理附加属性。
配置属性保护
要配置属性保护,请编辑policy.yaml文件。此文件还可用于设置镜像服务操作的策略。
在
policy.yaml文件中定义角色或策略{ "context_is_admin": "role:admin", "default": "", "add_image": "", "delete_image": "", "get_image": "", "get_images": "", "modify_image": "", "publicize_image": "role:admin", "copy_from": "", "download_image": "", "upload_image": "", "delete_image_location": "", "get_image_location": "", "set_image_location": "", "add_member": "", "delete_member": "", "get_member": "", "get_members": "", "modify_member": "", "manage_image_cache": "role:admin", "get_task": "", "get_tasks": "", "add_task": "", "modify_task": "", "deactivate": "", "reactivate": "", "get_metadef_namespace": "", "get_metadef_namespaces":"", "modify_metadef_namespace":"", "add_metadef_namespace":"", "delete_metadef_namespace":"", "get_metadef_object":"", "get_metadef_objects":"", "modify_metadef_object":"", "add_metadef_object":"", "delete_metadef_object":"", "list_metadef_resource_types":"", "get_metadef_resource_type":"", "add_metadef_resource_type_association":"", "remove_metadef_resource_type_association":"", "get_metadef_property":"", "get_metadef_properties":"", "modify_metadef_property":"", "add_metadef_property":"", "remove_metadef_property":"", "get_metadef_tag":"", "get_metadef_tags":"", "modify_metadef_tag":"", "add_metadef_tag":"", "add_metadef_tags":"", "delete_metadef_tag":"", "delete_metadef_tags":"" }
对于每个参数,使用
"rule:restricted"限制所有用户访问,或使用"role:admin"将访问限制为管理员角色。例如{ "download_image": "upload_image": }
在属性保护配置文件中定义哪些角色或策略可以管理哪些属性。例如
[x_none_read] create = context_is_admin read = ! update = ! delete = ! [x_none_update] create = context_is_admin read = context_is_admin update = ! delete = context_is_admin [x_none_delete] create = context_is_admin read = context_is_admin update = context_is_admin delete = !
@值允许对属性执行相应的操作。!值不允许对属性执行相应的操作。
在
glance-api.conf文件中,定义属性保护配置文件的位置。property_protection_file = {file_name}
此文件包含属性保护的规则以及与之关联的角色和策略。
默认情况下,不强制执行属性保护。
如果您指定了文件名值且未找到文件,则
glance-api服务将不会启动。要查看示例配置文件,请参阅glance-api.conf。
可选地,在
glance-api.conf文件中,指定在属性保护配置文件中是否使用角色或策略property_protection_rule_format = roles
默认值为
roles。要查看示例配置文件,请参阅glance-api.conf。
镜像下载:工作原理¶
在启动虚拟机之前,将虚拟机镜像从镜像服务传输到计算节点。其工作方式可能因计算节点和镜像服务的设置而异。
通常,计算服务将使用调度服务传递给它的镜像标识符,并从镜像API请求镜像。尽管镜像不存储在Glance中,而是存储在后端(可以是对象存储、文件系统或任何其他受支持的方法),但连接是从计算节点到镜像服务建立的,镜像通过此连接传输。镜像服务将镜像从后端流式传输到计算节点。
可以将对象存储节点设置在单独的网络上,并且仍然允许镜像流量在计算节点和对象存储节点之间流动。在存储节点配置文件中配置my_block_storage_ip选项,以允许块存储流量到达计算节点。
某些后端支持更直接的方法,即在请求时,镜像服务将返回一个直接链接到后端存储的URL。您可以使用此方法下载镜像。目前,唯一支持直接下载方法的存储是文件系统存储。在计算节点上的nova.conf文件的image_file_url部分中,使用filesystems选项配置该方法。
计算节点还实现了镜像缓存,这意味着如果镜像之前已使用过,则不一定会每次都下载。有关计算节点上缓存配置选项的信息可以在配置参考中找到。
实例构建块¶
在OpenStack中,基本操作系统通常从OpenStack镜像服务中存储的镜像复制。这会产生一个临时实例,该实例从已知的模板状态启动,并在关闭时丢失所有累积状态。
您还可以将操作系统放在计算或块存储卷系统中的持久卷上。这提供了一个更传统的持久系统,该系统累积的状态在重新启动时得到保留。要获取系统上可用镜像的列表,请运行
$ glance image-list
+--------------------------------------+-----------------------------+
| ID | Name |
+--------------------------------------+-----------------------------+
| aee1d242-730f-431f-88c1-87630c0f07ba | Ubuntu 14.04 cloudimg amd64 |
+--------------------------------------+-----------------------------+
| 0b27baa1-0ca6-49a7-b3f4-48388e440245 | Ubuntu 14.10 cloudimg amd64 |
+--------------------------------------+-----------------------------+
| df8d56fc-9cea-4dfd-a8d3-28764de3cb08 | jenkins |
+--------------------------------------+-----------------------------+
显示的镜像属性是
ID自动生成或用户提供的镜像UUID。
名称镜像的自由格式、人类可读名称。
虚拟硬件模板称为flavors,由管理员定义。在Newton发布之前,默认安装还包括五个预定义flavor。
要获取系统上可用flavor的列表,请运行
$ openstack flavor list
+-----+-----------+-------+------+-----------+-------+-----------+
| ID | Name | RAM | Disk | Ephemeral | VCPUs | Is_Public |
+-----+-----------+-------+------+-----------+-------+-----------+
| 1 | m1.tiny | 512 | 1 | 0 | 1 | True |
| 2 | m1.small | 2048 | 20 | 0 | 1 | True |
| 3 | m1.medium | 4096 | 40 | 0 | 2 | True |
| 4 | m1.large | 8192 | 80 | 0 | 4 | True |
| 5 | m1.xlarge | 16384 | 160 | 0 | 8 | True |
+-----+-----------+-------+------+-----------+-------+-----------+
默认情况下,管理员用户可以配置flavor。您可以通过重新定义compute-api服务器上/etc/nova/policy.yaml中compute_extension:flavormanage的访问控制来更改此行为。
实例管理工具¶
OpenStack提供命令行、Web界面和基于API的实例管理工具。第三方管理工具也可用,它们使用本机API或提供的EC2兼容API。
OpenStack python-openstackclient包提供了一个基本的命令行工具,它使用openstack命令。它作为大多数Linux发行版的原生包提供,或者您可以使用pip python包安装程序安装最新版本
# pip install python-openstackclient
有关python-openstackclient和其他命令行工具的更多信息,请参阅OpenStack终端用户指南。
最新的镜像管理工具可以使用pip包管理器安装
# pip install python-glanceclient
此包为您提供了glance用于管理所有镜像。
控制实例运行位置¶
OpenStack配置参考的调度部分提供了有关控制实例运行位置的详细信息,包括确保一组实例在不同的计算节点上运行以实现服务弹性,或在同一节点上运行以实现高性能的实例间通信。
管理员用户可以指定其实例运行在哪个计算节点上。为此,请指定--availability-zone AVAILABILITY_ZONE:COMPUTE_HOST参数。
使用UEFI启动实例¶
统一可扩展固件接口(UEFI)是一种旨在替代传统BIOS的标准固件。操作系统正在缓慢但稳步地转向UEFI格式,在某些情况下,使其成为唯一格式。
配置UEFI环境
要在QEMU/KVM环境中成功从UEFI镜像启动实例,管理员必须在计算节点上安装以下软件包
OVMF,Intel tianocore固件到QEMU虚拟机的移植。
libvirt,自1.2.9版本以来一直支持UEFI引导。
由于默认UEFI加载器路径是/usr/share/OVMF/OVMF_CODE.fd,因此管理员在安装UEFI软件包后必须在此位置创建一个链接。
上传UEFI镜像
要从UEFI镜像启动实例,管理员必须首先上传一个UEFI镜像。为此,在创建镜像时必须将hw_firmware_type属性设置为uefi。例如
$ glance image-create-via-import --container-format bare \
--disk-format qcow2 --property hw_firmware_type=uefi \
--file /tmp/cloud-uefi.qcow --name uefi
之后,您可以从这个UEFI镜像启动实例。