第 3 章 虚拟机实例
OpenStack Compute 是一个中心组件,它根据需要提供虚拟机。Compute 会通过 Identity 服务进行用户验证;使用 Image 服务来获得镜像(用来启动实例);使用 dashboard 服务作为用户和管理界面。
RHEL OpenStack Platform 可以使您方便地管理云中的实例。Compute 服务会创建、调度并管理实例,并使其它 OpenStack 组件可以使用这个功能。本章介绍了相关的操作,以及添加组件(如密钥对、安全组、主机集合、flavor)的信息。实例(instance) 在 OpenStack 中被用来代表虚拟机实例。
3.1. 管理实例
在创建实例前,您需要确保其它 OpenStack 组件(例如网络、密钥对、作为引导源的镜像或卷)已为实例准备好。
本节讨论了添加这些组件的步骤,以及创建和管理实例的内容。管理实例包括更新实例、登录到实例、查看实例是如何被使用的、调整实例的大小以及删除实例。
3.1.1. 添加组件
按照以下小节中介绍的内容创建网络、密钥对以及上传镜像或卷源的内容。当创建实例时需要这些元素,而它们在默认的情况下不会被自动提供。同时,您还需要创建一个新的安装组来提供对用户的 SSH 访问。
- 在 dashboard 中选择项目。
- 选择网络 > 网络,确定已经存在了一个新实例可以加入的私人网络。如需了解创建网络的信息,请参阅 Networking Guide 的 Add a Network 一节(Red Hat Enterprise Linux OpenStack Platform)。
- 选择Compute > 访问 & 安全 > 密钥对,确定已经存在了一个密钥对(如需了解创建密钥对的信息,请参阅 第 3.2.1.1 节 “创建一个密钥对”)。
确定您有一个可以作为引导源的镜像或云硬盘:
- 要查看引导源镜像,选择镜像标签页(如需了解创建镜像的信息,请参阅 第 1.2.1 节 “创建镜像”)。
- 要查看引导源云硬盘,选择云硬盘标签页(如需了解创建云硬盘的信息,请参阅 第 4.1.1 节 “创建云硬盘”)。
- 选择 Compute > 访问 & 安全 > 安全组,确定您已经创建了一个安全组规则(如需了解创建安全组的信息,请参阅 Users and Identity Management Guide 中的 Project Security Management(Red Hat Enterprise Linux OpenStack Platform)。
3.1.2. 创建实例
- 在 dashboard 中选择项目 > Compute > 实例。
- 点启动云主机。
- 输入所需的信息(带有 '* '标记的项是必需的)后点运行。
标签页 | 项 | 备注 |
---|---|---|
详情 |
可用域 |
域(zone)就是可以放置您的实例的、包括云资源的逻辑组。如果您不能确定您的选择,使用默认域(如需了解更多信息,请参阅 第 3.4 节 “管理主机集合”)。 |
云主机名称 |
实例的名称。 | |
云主机类型 |
云主机类型决定了实例可以获得什么资源(例如,内存)。如需了解更多与云主机类型相关的信息,请参阅 第 3.3 节 “管理 flavor”。 | |
云主机启动源 |
根据所做的选择,新的项会被显示用来选择启动源:
| |
访问和安全 |
密钥对 |
指定的密钥对会被植入到实例中,并在使用 SSH 远程访问实例时使用它们。通常情况下,每个项目都会创建一个密钥对。 |
安全组 |
安全组包括了一组防火墙规则用来过滤并处理实例的网络数据(如需了解创建安全组的信息,请参阅 Users and Identity Management Guide 中的 Project Security Management(Red Hat Enterprise Linux OpenStack Platform)。 | |
Networking |
已选择的网络 |
您需要最少指定一个网络。一般情况下,实例会被分配一个私有网络,然后会获得一个浮动 IP 地址用于外部连接。 |
创建后 |
定制脚本源 |
您可以提供一组命令或一个脚本文件,当实例被引导后运行它们。例如,使用它们来设置实例的主机名 ,或设置一个用户密码。如果选择了 '直接输入',您可以在 '脚本数据项' 中直接输入您的命令;如果使用其它选项,则指定您的脚本文件。 注意 任何以 '#cloud-config' 开始的脚本都会被解析为使用 cloud-config 语法(如需了解与此语法相关的信息,请参阅 http://cloudinit.readthedocs.org/en/latest/topics/examples.html)。 |
高级选项 |
磁盘分区 |
在默认情况下,实例只包括一个分区,并可以根据需要自动调整它的大小。但是,您也可以选择手工配置您自己的分区。 |
配置驱动器 |
如果选择了这个选项,OpenStack 把元数据写到一个只读的配置驱动器中,在引导时会被附加到实例中(而不是加入到 Compute 的元数据服务中)。在实例被引导后,您可以挂载这个驱动器来查看其中的内容(您可以为实例提供文件)。 |
3.1.4. 重新调整实例的大小
要调整一个实例的大小(内存或 CPU 的数量),您需要为这个实例选择一个适当的新 flavor(有时也被称为“云主机类型”)。如果您需要增加它的大小,则需要保证包括它的主机有足够的空间。
设置每个主机来使用 SSH 密钥进行身份验证,从而使 Compute 可以使用 SSH 来在主机间移动磁盘(例如,compute 节点可以共享相同的 SSH 密钥)。
如需了解更多与设置 SSH 密钥验证相关的信息,请参阅 Migrating Instances Guide 中的 Configure SSH Tunneling Between Nodes(Red Hat Enterprise Linux OpenStack Platform)。
在
/etc/nova/nova.conf
文件中设置以下参数来允许在原始主机上重新调整大小:[DEFAULT] allow_resize_to_same_host = True
- 在 dashboard 中选择项目 > Compute > 实例。
- 点主机的操作箭头,选调整云主机大小。
- 在新的云主机类型项中选择一个新 flavor。
如果您需要在启动实例时手工对它进行分区(构建时间会比较快):
- 选择高级选项。
- 在磁盘分区项中选择手工。
- 点重新调整大小。
3.1.5. 连接到一个实例
本节介绍了通过 dashboard 或命令行接口访问一个实例控制台的方法。您也可以直接连接到实例的串口来进行故障排除(在网络连接失败时也可以使用这个方法)。
3.1.5.1. 使用 Dashboard 访问实例的控制台
您可以在 dashboard 中使用控制台(console)直接连接到您的实例。
- 在 dashboard 中选择 Compute > 实例。
- Click the instance’s More button and select Console.
- 使用镜像的用户名和密码进行登录(例如,一个 CirrOS 镜像使用 cirros/cubswin:))。
3.1.5.2. 直接连接到一个 VNC 控制台
您可以使用 nova get-vnc-console
命令所返回的 URL 来直接访问一个实例的 VNC 控制台。
- 浏览器
要获得一个浏览器 URL,使用:
$ nova get-vnc-console INSTANCE_ID novnc
- Java 客户端
要获得一个 Java-client URL,使用:
$ nova get-vnc-console INSTANCE_ID xvpvnc
nova-xvpvncviewer 提供了一个 Java 客户端的简单示例。要下载客户端,运行:
# git clone https://github.com/cloudbuilders/nova-xvpvncviewer # cd nova-xvpvncviewer/viewer # make
使用实例的 Java-client URL 来运行 viewer:
# java -jar VncViewer.jar _URL_
提供这个工具的目的只是方便用户的使用,红帽并不正式支持它。
3.1.5.3. 直接连接到一个串行控制台
您可以使用一个 websocket 客户端来直接访问实例的串口。串口连接通常被作为故障排除工具使用(例如,在网络配置失败时,也可以通过它来访问实例)。要获得一个正在运行的实例 URL,运行以下命令:
$ nova get-serial-console INSTANCE_ID
novaconsole 提供了一个 websocket 客户端的简单示例。要下载客户端,运行:
# git clone https://github.com/larsks/novaconsole/ # cd novaconsole
使用实例的串口 URL 运行客户端:
# python console-client-poll.py
提供这个工具的目的只是方便用户的使用,红帽并不正式支持它。
但是,根据所进行的安装,管理员可能会需要首先设置 nova-serialproxy 服务。这个代理服务是一个 websocket 代理,它提供了连接到 OpenStack Compute 串口的功能。
3.1.5.3.1. 安装并配置 nova-serialproxy
安装
nova-serialproxy
服务:# yum install openstack-nova-serialproxy
更新
/etc/nova/nova.conf
文件中的serial_console
部分:启用
nova-serialproxy
服务:$ openstack-config --set /etc/nova/nova.conf serial_console enabled true
指定用来创建由
nova get-serial-console
命令提供的 URLS 的字符串。$ openstack-config --set /etc/nova/nova.conf serial_console base_url ws://PUBLIC_IP:6083/
其中的
PUBLIC_IP
是运行nova-serialproxy
服务的主机的公共 IP 地址。指定实例串口控制台监听的 IP 地址(字符串)。
$ openstack-config --set /etc/nova/nova.conf serial_console listen 0.0.0.0
指定需要连接的 proxy client 的地址(字符串)。
$ openstack-config --set /etc/nova/nova.conf serial_console proxyclient_address ws://HOST_IP:6083/
其中的
HOST_IP
是您的 Compute 主机的 IP 地址。例如,对于一个启用了nova-serialproxy
服务的配置会和以下类似:[serial_console] enabled=true base_url=ws://192.0.2.0:6083/ listen=0.0.0.0 proxyclient_address=192.0.2.3
重启 Compute 服务:
# openstack-service restart nova
启动
nova-serialproxy
服务:# systemctl enable openstack-nova-serialproxy # systemctl start openstack-nova-serialproxy
- 重启所有正在运行的实例,从而使它们可以监听正确的网络套接字。
打开防火墙的串行控制器端口连接。串口的端口范围通过
/etc/nova/nova.conf
中的[serial_console]`
port_range 进行设置。在默认情况下,它的范围是10000:20000。更新 iptables:# iptables -I INPUT 1 -p tcp --dport 10000:20000 -j ACCEPT
3.1.6. 查看实例的使用
使用情况的统计数据可以基于:
每个项目
要查看每个项目的使用情况,选项目 > Compute > 概况。所有项目实例的使用数据会被显示。
您可以通过指定时间范围并点提交来查看特定时间段内的使用情况数据。
每个虚拟机管理器
如果以管理员的身份进行登录,您也可以查看所有项目的信息。点管理员 > 系统,选择其中的一个标签页。例如,资源使用情况标签页中提供了特定时间段中的使用情况数据报告。您也可以点虚拟机管理器来查看您当前的 vCPU、内存或磁盘的使用情况统计数据。
注意vCPU 使用情况
的值(y 中的 x
)反映了所有虚拟机的总 vCPU 数(x)和虚拟机管理器的内核数量(y)。
3.1.7. 删除实例
- 在 dashboard 中选择项目 > Compute > 实例,然后选择您的实例。
- 点终止云主机。
删除一个实例的操作并不会删除附加到它上面的卷,您需要单独删除它们(请参阅 第 4.1.4 节 “删除卷”)。
3.2. 管理实例安全
您可以通过为实例分配正确的安全组(设置防火墙规则)和密钥对(启用 SSH 用户访问)来管理对它的访问。另外,还可以为实例分配一个浮动 IP 地址,使它可以被外部网络访问。以下介绍了创建和管理密钥对、安全组、浮动 IP 地址以及使用 SSH 登录到一个实例的信息,以及为实例添加一个 admin
密码的方法。
如需了解更多与管理安全组相关的信息,请参阅 Users and Identity Management Guide 中的 Project Security Management(Red Hat Enterprise Linux OpenStack Platform)。
3.2.1. 管理密钥对
密钥对提供了到实例的 SSH 访问能力。每次创建一个密钥对时,它的证书都会被下载到本地系统,从而可以分发给用户。通常情况下,每个项目都会创建一个密钥对(可以在多个实例中使用)。
您也可以为 OpenStack 导入一个已经存在的密钥对。
3.2.1.1. 创建一个密钥对
- 在 dashboard 中,选项目 > Compute > 访问 & 安全。
- 在密钥对标签页中点创建密钥对。
- 在密钥对名称项中输入一个名称,点创建密钥对。
当密钥对被创建后,一个密钥对文件会通过浏览器自动下载。您需要保存这个文件用于以后的连接。对于使用命令行的 SSH 连接,您可以使用以下命令把这个文件加载到 SSH:
# ssh-add ~/.ssh/os-key.pem
3.2.1.2. 导入一个密钥对
- 在 dashboard 中,选项目 > Compute > 访问 & 安全。
- 在密钥对标签页中点导入密钥对。
- 在密钥对名称项中输入一个名称,把您的公共密钥复制/粘贴到公共密钥项中。
- 点导入密钥对。
3.2.1.3. 删除密钥对
- 在 dashboard 中,选项目 > Compute > 访问 & 安全。
- 在密钥对标签页中点相应密钥的删除密钥对按钮。
3.2.2. 创建安全组
安全组就是一组 IP 过滤器规则,它可以分配给项目实例,用来设置对实例的网络访问。安全组是与项目相关联的,项目成员可以编辑安全组的默认设置,并可以向其添加新规则。
- 在 dashboard 中,选项目标签页,点 Compute > 访问 & 安全。
- 在安全组标签页中,点 + 创建安全组。
- 为安全组提供一个名称和描述,点创建安全组。
如需了解更多与管理项目安全的信息,请参阅 Users and Identity Management Guide 中的 Project Security Management(Red Hat Enterprise Linux OpenStack Platform)。
3.2.3. 创建、分配和释放浮动 IP 地址
在默认情况下,实例会在首次创建时被分配一个内部 IP 地址。但是,您可以通过创建和分配一个浮动 IP 地址(外部地址)来使它可以通过公共网络进行访问。无论实例处于什么状态,您都可以修改与实例相关联的 IP 地址。
每个项目的可用浮动 IP 地址资源都是有限的(在默认情况下,是 50 个地址),因此您需要在某个 IP 地址不再被使用时释放它,从而使它可以被重复使用。浮动 IP 地址只能从一个存在的浮动 IP 地址池中分配。如需了解更多相关信息,请参阅 Networking Guide 中的 Create Floating IP Pools(Red Hat Enterprise Linux OpenStack Platform)。
3.2.3.1. 为项目分配一个浮动 IP 地址
- 在 dashboard 中,选项目 > Compute > 访问 & 安全。
- 在浮动 IP 标签页中,点分配 IP 给项目。
- 在资源池中选择用来分配 IP 地址的网络。
- 点分配 IP。
3.2.3.2. 分配一个浮动 IP
- 在 dashboard 中,选项目 > Compute > 访问 & 安全。
- 在浮动 IP 标签页中,点相关地址的关联按钮。
在 IP 地址项中选择要分配的地址。
注意如果没有可用的地址,您可以点
+
按钮创建一个新地址。- 在待连接的端口项中选择要被关联的实例。一个实例只能和一个浮动 IP 地址相关联。
- 点关联。
3.2.3.3. 释放浮动 IP
- 在 dashboard 中,选项目 > Compute > 访问 & 安全。
- 在浮动 IP 标签页中,点地址的菜单箭头(在关联/取消关联按钮旁)。
- 选择释放浮动 IP。
3.2.4. 登录到实例
先决条件:
- 确保实例的安全组中有一个 SSH 规则。请参阅 Users and Identity Management Guide 中的 Project Security Management(Red Hat Enterprise Linux OpenStack Platform)。
- 确保实例有一个与之关联的浮动 IP 地址(外部地址)。请参阅 创建、分配和释放浮动 IP 地址。
- 获得实例的密钥对证书。当密钥对被创建时,这个证书会被下载。如果您没有自己创建密钥对,请联系您的系统管理员(如需更多相关信息,请参阅 第 3.2.1 节 “管理密钥对”)。
首先把密钥对文件加入到 SSH,然后使用它:
修改所产生的密钥对证书的访问权限。
$ chmod 600 os-key.pem
检查
ssh-agent
是否已运行:# ps -ef | grep ssh-agent
如果还没有运行,使用以下命令运行它:
# eval `ssh-agent`
在您的本地机器上,把密钥对证书加载到 SSH。例如:
$ ssh-add ~/.ssh/os-key.pem
- 现在,您可以 SSH 到镜像文件。
以下是使用 cloud-user
用户 SSH 到 Red Hat Enterprise Linux 虚拟机镜像的示例:
$ ssh cloud-user@192.0.2.24
您也可以直接使用证书。例如:
$ ssh -i /myDir/os-key.pem cloud-user@192.0.2.24
3.2.5. 为实例添加一个 admin
密码
您可以使用以下方法为一个实例添加一个 admin
(root
)密码。
在
/etc/openstack-dashboard/local_settings
文件中,把change_set_password
参数的值设为True
。can_set_password: True
在
/etc/nova/nova.conf
文件中,把inject_password
参数的值设为True
。inject_password=true
重启 Compute 服务。
# service nova-compute restart
当使用 nova boot
命令启动一个新实例时,命令的输出中会显示一个 adminPass
参数。您可以使用它作为 root
用户的密码登录到这个实例。
Compute 服务会覆盖 /etc/shadow
文件中的 root
用户的密码。它同时也会为 KVM 客户机镜像激活 root
账户。如需了解更多与使用 KVM 客户机镜像相关的信息,请参阅 第 1.2.1.1 节 “在 RHEL OpenStack Platform 中使用 KVM Guest 镜像”
您也可以使用 dashboard 设置一个自定义密码。在把 can_set_password
参数的值设为 true
后运行以下命令:
# systemctl restart httpd.service
新添加的 admin
密码项如下所示:
这些项可以在启动或重建一个实例时使用。
3.3. 管理 flavor
每个创建的实例都会被分配一个 flavor(资源模板),它定义了实例的大小和容量。Flavor 也可以指定二级临时存储(secondary ephemeral storage)、交换磁盘、元数据来限制资源使用或对特定项目的访问(默认的 flavor 都没有定义这些额外的属性)。flavor 在 Red Hat Enterprise OpenStack Platform 中有时也被称为“云主机类型”。
名称 | vCPU | RAM | Root 磁盘大小 |
---|---|---|---|
m1.tiny |
1 |
512 MB |
1 GB |
m1.small |
1 |
2048 MB |
20 GB |
m1.medium |
2 |
4096 MB |
40 GB |
m1.large |
4 |
8192 MB |
80 GB |
m1.xlarge |
8 |
16384 MB |
160 GB |
多数最终用户都可以使用这些默认的 flavor。但是,您可能会需要创建并管理特殊的 flavor。例如,您可能需要:
- 根据所使用的硬件修改默认的内存和能力。
- 添加元数据来为实例强制一个特定的 I/O 速率,或匹配一个主机集合(host aggregate)。
使用镜像属性设置的行为会覆盖使用 flavors 设置的行为。如需了解更多信息,请参阅 第 1.2 节 “管理镜像”。
3.3.1. 更新配置权限
在默认情况下,只有管理员可以创建 flavor 或查看完整的 flavor 列表(选择 "管理员 > 系统 > 云主机类型")。要允许所有用户配置 flavor,在 /etc/nova/policy.json
文件(nova-api 服务器)中指定以下内容:
"compute_extension:flavormanage": "",
3.3.2. 创建 flavor
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 云主机类型。
点创建云主机类型, 指定以下项:
标签页 项 描述 主机类型信息
名称
唯一的名字。
ID
唯一的 ID。默认值
auto
会自动产生一个 UUID4 值,但是您可以手工指定一个整数或 UUID4 值。VCPU
虚拟 CPU 的数量
RAM (MB)
内存(以 MB 为单位)
根磁盘 (GB)
临时磁盘的大小(以 GB 为单位)。要使用镜像本身的大小,把它设为
0
。当 Instance Boot Source=Boot from Volume 时这个磁盘不被使用。临时磁盘 (GB)
二级临时磁盘的大小(以 GB 为单位)。
Swap 磁盘 (MB)
交换磁盘的大小(以 MB 为单位)
云主机类型访问
选择的项目
可以使用这个云主机类型的项目。如果没有选择项目,所有项目都可以访问(
Public=Yes
)。- 点创建云主机类型。
3.3.3. 更新常规属性
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 云主机类型。
- 点 flavor 的 编辑云主机类型按钮。
- 更新相关的值并点保存。
3.3.4. 更新云主机类型的元数据
除了常规属性外,您还可以为云主机类型添加元数据(extra_specs
),它可以更精细地定义实例的使用情况。例如,您可以设置允许使用的最大带宽。
- 预定义的关键字决定了硬件支持或配额。它受您所使用的虚拟机管理器(hypervisor)的限制(对于 libvirt,请参阅 表 3.2 “Libvirt 元数据”)。
-
预定义的关键字和用户定义的关键字都可以决定实例的调度。例如,您可以设置
SpecialComp=True
,任何使用这个云主机类型的实例都将只能在元数据中带有相同关键字和值的主机集合中运行。如需了解更多相关信息,请参阅 第 3.4 节 “管理主机集合”。
3.3.4.1. 查看元数据
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 云主机类型。
-
点云主机类型的 Metadata 链接(
Yes
或No
)。当前所有的值都在右面的 Existing Metadata 项中列出。
3.3.4.2. 添加元数据
您可以使用一个关键字/值
数据对来指定云主机类型的元数据。
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 云主机类型。
-
点云主机类型的 Metadata 链接(
Yes
或No
)。当前所有的值都在右面的 Existing Metadata 项中列出。 - 在可用的元数据中,点其它项,选择您需要添加的关键字(请参阅 表 3.2 “Libvirt 元数据”)。
- 点 + 按钮;您现在可以看到新的关键字出现在已存在的元数据项中。
在右面项中输入关键字的值。
- 当输入完“关键字/值”数据对后,点保存。
键 | 描述 |
---|---|
hw:action |
用来配置每个实例的支持限制。有效值包括:
例如: |
hw:NUMA_def |
定义 NUMA 的拓扑。当 flavor 中的 RAM 和 vCPU 的分配值比 compute 主机中的 NUMA 节点大时,通过定义 NUMA 拓扑可以使主机更好地利用 NUMA,并提高客户机 OS 的性能。flavor 中定义的 NUMA 设置会覆盖镜像中的设置。有效的定义包括:
注意 如果 numa_cpu 或 numa_mem.N 的值比实际有效的值大,则会出现一个异常错误。 示例(带有 8 个 vCPU 和 4GB 内存的实例):
调度程序会查找带有 2 个 NUMA 节点的主机,它需要可以在一个节点上运行 6 个 CPU 和 3 GB 内存,在另一个节点上运行 2 个 CPU 和 1 GB 内存。如果某个主机只有一个 NUMA 节点,它可以运行 8 个 CPU 和 4 GB 内存,这个主机不会被认为是一个有效的匹配。无论 numa_mempolicy 是如何设置的,相同的逻辑都适用于调度程序。 |
hw:watchdog_action |
当实例出现故障时,可以使用实例的 watchdog 设备触发一个操作。有效的操作是:
例如: |
hw_rng:action |
通过使用镜像属性把一个随机数生成器设备添加到镜像中(请参阅 RHEL OpenStack Platform 文档的 "Command-Line Interface Reference" 部分中的 hw_rng_model 内容)。 如果添加了设备,有效的操作将包括:
例如: |
hw_video:ram_max_mb |
视频设备允许使用的最大内存数量(以 MB 为单位)。
例如: |
quota:option |
对实例的限制。有效选项包括:
例如: |
3.4. 管理主机集合
为了性能和管理的目的,一个单一的 Compute 部署可以被分成不同的逻辑组。OpenStack 会使用以下的相关术语:
主机集合(Host aggregate) - 一个主机集合就是 OpenStack 部署中的一个逻辑组,它包括了一组 Compute 主机,以及相关的元数据。一个主机可以属于多个主机集合。只有系统管理员可以查看或创建主机集合。
一个主机集合的元数据通常被用来为 Compute 调度器(scheduler)提供信息(如为一部分主机限制特定的云主机类型或镜像)。当在一个主机集合中指定了元数据,只有那些在云主机类型中指定了相同元数据的实例才可以使用其中的主机。
系统管理员可以通过主机集合实现负载均衡、强制物理隔离(或冗余)、对带有相同属性的服务器进行分组或分离不同的硬件系统。当您创建一个集合时,需要指定一个域名(zone name),它会作为最终用户可以看到的这个集合的名称。
可用域(Availability zone) - 可用域就是最终用户可以看到的主机集合。最终用户无法看到这个域是由哪些主机组成的,也无法看到这个域的元数据,而只能看到域的名称。
系统管理员可以设置包括特定计算能力的域,或位于特定区域中的域,最终用户将可以使用这些配置的域。
3.4.1. 启用主机集合调度
在默认情况下,主机集合元数据不会被用来过滤实例的使用情况,您需要更新 Compute 的调度配置来启用元数据:
-
编辑
/etc/nova/nova.conf
文件(您需要具有 root 或 nova 用户的权限)。 确定
scheduler_default_filters
参数包括:AggregateInstanceExtraSpecsFilter
(对于主机集合元数据)。例如:scheduler_default_filters=AggregateInstanceExtraSpecsFilter,RetryFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,CoreFilter
AvailabilityZoneFilter
在启动一个实例时的有效域主机的规格。例如:scheduler_default_filters=AvailabilityZoneFilter,RetryFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,CoreFilter
- 保存配置文件。
3.4.2. 查看可用域或主机集合
使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 主机集合。当前所有定义的集合会在主机集合项中列出,所有域会在可用域项中列出。
3.4.3. 添加一个主机集合
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 主机集合。当前所有定义的集合会在主机集合项中列出。
- 点创建主机集合。
- 在名称项中指定集合的名称,最终用户将会在可用域项中看到这个名称。
- 点在集合中管理主机。
- 点相应主机的 + 图标来选择主机。
- 点创建主机集合。
3.4.4. 更新一个主机集合
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 主机集合。当前所有定义的集合会在主机集合项中列出。
更新实例的名称或可用域:
- 点集群的编辑主机集群按钮。
- 更新名称或可用域的值,点保存。
更新实例的分配的主机:
- 在操作项中选集合的箭头图标。
- 点管理主机。
- 点主机的 + 或 - 图标来修改主机的分配。
- 完成后点保存。
更新实例的元数据:
- 在操作项中选集合的箭头图标。
- 点更新元数据按钮。所有当前值都在右面的存在的元数据项中列出。
- 在可用的元数据中点其它项,输入您要添加的关键字。您可以使用预定义的关键字(请参阅 表 3.3 “主机集合元数据”)或添加您自己的关键字(只在实例的 flavor 中设置了相同关键字时才有效)。
点 + 按钮;您现在可以看到新的关键字出现在已存在的元数据项中。
注意点 - 图标删除一个关键字。
点保存。
表 3.3. 主机集合元数据 键 描述 cpu_allocation_ratio
设置虚拟 CPU 对物理 CPU 的分配比率。这取决于为 Compute 调度设置的
AggregateCoreFilter
过滤。disk_allocation_ratio
设置虚拟磁盘对物理磁盘的分配比率。这取决于为 Compute 调度设置的
AggregateDiskFilter
过滤。filter_tenant_id
如果指定,集合只包括这个租户(项目)的主机。这取决于为 Compute 调度设置的
AggregateMultiTenancyIsolation
过滤。ram_allocation_ratio
设置虚拟内存对物理内存的分配比率。这取决于为 Compute 调度设置的
AggregateRamFilter
过滤。
3.4.5. 删除一个主机集群
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 主机集合。当前所有定义的集合会在主机集合项中列出。
从集群中删除所有分配的主机:
- 在操作项中选集合的箭头图标。
- 点管理主机。
- 点主机的 - 图标删除主机。
- 完成后点保存。
- 在操作项中选集合的箭头图标。
- 点删除主机集合。
3.5. 调度主机和 Cell
Compute 调度服务决定了一个实例要被放置在哪个 cell 或主机(或主机集合)中。作为一个管理员,您可以设置调度的决定过程。例如,您可以把实例调度到特定组中的主机,或具有特定 RAM 的主机中。
您可以配置以下组件:
- Filters(过滤器) - 决定可以放置实例的初始主机范围(请参阅 第 3.5.1 节 “配置调度过滤器”)。
- Weights(权重) - 通过过滤程序后的主机再根据权重系统来进行优先级排列。具有最高权重值的主机有最高的优先级(请参阅 第 3.5.2 节 “配置调度权重”)。
-
Scheduler service(调度程序服务) - 在调度程序所在主机的
/etc/nova/nova.conf
文件中包括了以下配置选项,它决定了调度程序如何执行它的任务、处理权重和过滤。主机和 cell 都有调度程序。如需了解这些选项的完整列表,请参阅 "Configuration Reference" (RHEL OpenStack Platform Documentation)。
在下图中,主机 1 和主机 3 都通过了过滤程序。主机 1 具有最高的权重,因此在调度过程中有最高优先级。
3.5.1. 配置调度过滤器
您可以使用 scheduler_default_filters 选项(/etc/nova/nova.conf
文件)来定义调度程序(scheduler)使用的过滤器(您需要具有 root 或 nova 用户的权限)。过滤器可以被添加或删除。
默认情况下,以下过滤器被配置并在调度程序中运行:
scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter
一些过滤器会使用通过命令中的参数传递给实例的信息:
-
nova boot
命令,请参阅 RHEL OpenStack Platform Documentation 中的 "Command-Line Interface Reference"。 - 实例的 flavor(参阅 第 3.3.4 节 “更新云主机类型的元数据”)
- 实例的镜像(参阅 附录 A, 镜像配置参数)。
下表列出了可用的过滤器
过滤器 | 描述 |
---|---|
AggregateCoreFilter |
使用 host-aggregate 元数据关键字 cpu_allocation_ratio 过滤掉超过过度分配(over-commit)比率(虚拟 CPU 和物理 CPU 分配的比率)的主机,它只在为实例指定了主机集合(host aggregate)的情况下有效。 |
如果没有设置这个值,过滤器会使用 /etc/nova/nova.conf 文件中的 cpu_allocation_ratio 的值。它的默认值是 | |
AggregateDiskFilter |
使用 host-aggregate 元数据关键字 disk_allocation_ratio 过滤掉超过过度分配(over-commit)比率(虚拟磁盘和物理磁盘分配的比率)的主机,它只在为实例指定了主机集合(host aggregate)的情况下有效。 |
如果没有设置这个值,过滤器会使用 /etc/nova/nova.conf 文件中的 disk_allocation_ratio 的值。它的默认值是 | |
AggregateImagePropertiesIsolation |
只通过那些元数据和实例镜像的元数据匹配的主机集合中的主机,它只在为实例指定了主机集合的情况下有效。如需了解更多相关信息,请参阅 第 1.2.1 节 “创建镜像”。 |
AggregateInstanceExtraSpecsFilter |
主机集合中的元数据必须与主机的 flavor 元数据相匹配。如需了解更多相关信息,请参阅 第 3.3.4 节 “更新云主机类型的元数据”。 |
AggregateMultiTenancyIsolation |
指定了 filter_tenant_id 的主机只能包括所指定租户(项目)中的实例。 注意 租户仍然可以在其它主机上放置实例。 |
AggregateRamFilter |
使用 host-aggregate 元数据关键字 ram_allocation_ratio 过滤掉超过过度分配(over-commit)比率(虚拟内存和物理内存分配的比率)的主机,它只在为实例指定了主机集合(host aggregate)的情况下有效。 |
如果没有设置这个值,过滤器会使用 /etc/nova/nova.conf 文件中的 ram_allocation_ratio 的值。它的默认值是 | |
AllHostsFilter |
通过所有有效的主机(但不禁用其它过滤器)。 |
AvailabilityZoneFilter |
过滤器使用实例指定的可用域。 |
ComputeCapabilitiesFilter |
确定 Compute 元数据被正确读取。 |
ComputeFilter |
通过所有可以正常工作并被启用的主机。 |
CoreFilter |
使用 |
DifferentHostFilter |
在一个和指定主机不同的主机上创建实例。使用 |
DiskFilter |
使用 |
ImagePropertiesFilter |
只通过匹配实例镜像属性的主机。如需了解更多信息,请参阅 第 1.2.1 节 “创建镜像”。 |
IsolatedHostsFilter |
只通过运行独立镜像(在 |
JsonFilter |
接受并使用实例的自定义 JSON 过滤器:
|
这个过滤器通过
| |
MetricFilter |
过滤掉带有无效指标数据的过滤器。 |
NUMATopologyFilter |
根据主机的 NUMA 拓扑过滤主机。如果实例没有定义拓扑,所有主机都可以被使用。这个过滤程序会尝试匹配带有完全相同的 NUMA 拓扑的主机。这个过滤器还会查看每个 NUMA 节点的标准过度订阅(over-subscription)的限制,并根据它为 compute 主机提供限制。 |
RamFilter |
使用 |
RetryFilter |
过滤掉调度失败的主机。它只在 scheduler_max_attempts 大于 0 的情况下有效( |
SameHostFilter |
通过一个或多个指定的主机。使用 |
ServerGroupAffinityFilter |
只通过一个特定服务器组中的主机:
|
ServerGroupAntiAffinityFilter |
只通过还没有包括任何实例的服务器组中的主机:
|
SimpleCIDRAffinityFilter |
只通过特定 IP 子网范围内(由实例的 cidr 和
|
3.5.2. 配置调度权重
cell 和主机可以被加上权重来进行调度,具有最大权重的主机或 cell 将会在经过过滤后被选择。所有的权重器都具有一个乘数(multiplier),它会在规格化节点权重后被应用。一个节点的权重以以下方法计算:
w1_multiplier * norm(w1) + w2_multiplier * norm(w2) + ...
您可以在调度程序主机的 /etc/nova/nova.conf
文件中配置权重选项(需要有 root 或 nova 的用户权限)。
3.5.2.1. 为主机配置权重选项
您可以在 [DEFAULT] scheduler_weight_classes 选项中定义调度程序需要使用的主机权重器:
-
nova.scheduler.weights.ram
- 主机可用内存的权重。 -
nova.scheduler.weights.metrics
- 主机指标数据(metrics)的权重。 -
nova.scheduler.weights.all_weighers
- 使用所有主机权重器(默认)。
权重器 | 选项 | 描述 |
---|---|---|
所有 |
[DEFAULT] scheduler_host_subset_size |
定义所选主机的子集合的大小(整数),它的值必须不小于 |
metrics |
[metrics] required |
指定当 [metrics]
|
metrics |
[metrics] |
当 [metrics] |
metrics |
[metrics] |
权重 metric 使用的乘数。在默认情况下, |
metrics |
[metrics] |
指定 metric 以及它们权重的比率,它是一个使用逗号分隔的
例如: |
ram |
[DEFAULT] |
RAM 的乘数(浮点值)。在默认情况下是 |
3.5.2.2. 为 cell 配置权重选项
您可以使用 [cells] scheduler_weight_classes 选项(在 /etc/nova/nova.conf
文件中)来定义调度器使用的 cell 权重程序。您需要具有 root
或 nova
用户权限。
有效的权重程序是:
-
nova.cells.weights.all_weighers
- 使用所有 cell 权重程序(默认)。 -
nova.cells.weights.mute_child
- 对一个子 cell 是否已经有一段时间没有发送容量或容量进行权重。 -
nova.cells.weights.ram_by_instance_type
- 对 cell 的有效 RAM 进行权重。 nova.cells.weights.weight_offset
- 评估一个 cell 的权重 offset.注意在
`nova-manage cell create
命令中使用 --woffset 选项可以指定一个 cell 的权重 offset。
权重程序 | 选项 | 描述 |
---|---|---|
|
[cells] |
已经沉默了一段时间的主机的乘数(multiplier)。它需要是一个负的浮点数,默认值是 |
|
[cells] |
沉默主机的权重值。它的值需要是负的浮点数,默认值是 |
|
[cells] |
权重 RAM 的乘数。它的值需要是一个浮点数,默认值是 |
|
[cells] |
权重 cell 的乘数(浮点值)。允许实例通过把它的权重偏移(weight offset)设置为 |
3.6. 撤离实例
如果您需要把一个实例从一个有故障或已停止运行的 compute 节点上移到同一个环境中的其它主机服务器上时,可以使用 nova evacuate
命令对实例进行撤离(evacuate)。
- 撤离的操作只有在实例的磁盘在共享存储上,或实例的磁盘是块存储卷时才有效。因为在其它情况下,磁盘无法被新 compute 节点访问。
-
实例只有在它所在的服务器停止运行的情况下才可以被撤离;如果服务器没有被关闭,
evacuate
命令会运行失败。
如果您有一个可以正常工作的 compute 节点,您需要:
-
对实例进行一个静态复制(实例没有处于运行状态)作为备份;或把实例复制到其它环境中。使用
nova image-create
创建一个快照(请参阅 Migrate a Static Instance)。 -
把一个静态(没有运行的)实例移到相同环境中的另外一个主机(不需要共享存储),使用
nova migrate
(请参阅 Migrate a Static Instance)。 -
把一个动态(正在运行的)实例移到相同环境中的另外一个主机,使用
nova live-migration
命令(请参阅 Migrate a Live (running) Instance)。
3.6.1. 撤离一个实例
使用以下命令撤离一个实例:
# nova evacuate [--password pass] [--on-shared-storage] instance_name [target_host]
其中:
-
--password
- 撤离实例的 admin 密码(如果指定了--on-shared-storage
,则无法使用)。如果没有指定密码,一个随机密码会被产生,并在撤离操作完成后被输出。 -
--on-shared-storage
- 指定所有实例文件都在共享存储中。 -
instance_name
- 要撤离的实例名称。 target_host
- 实例撤离到的主机;如果您没有指定这个主机,Compute 调度会为您选择一个主机。您可以使用以下命令找到可能的主机:# nova host-list | grep compute
例如:
# nova evacuate myDemoInstance Compute2_OnEL7.myDomain
-
3.6.2. 撤离所有实例
使用以下命令在一个特定主机上撤离所有实例:
# nova host-evacuate instance_name [--target target_host] [--on-shared-storage] source_host
其中:
--target
- 实例撤离到的主机;如果您没有指定这个主机,Compute 调度会为您选择一个主机。您可以使用以下命令找到可能的主机:# nova host-list | grep compute
-
--on-shared-storage
- 指定所有实例文件都在共享存储中。 source_host
- 被撤离的主机名。例如:
# nova host-evacuate --target Compute2_OnEL7.localdomain myDemoHost.localdomain