搜索

第 3 章 虚拟机实例

download PDF

OpenStack Compute 是一个中心组件,它根据需要提供虚拟机。Compute 会通过 Identity 服务进行用户验证;使用 Image 服务来获得镜像(用来启动实例);使用 dashboard 服务作为用户和管理界面。

RHEL OpenStack Platform 可以使您方便地管理云中的实例。Compute 服务会创建、调度并管理实例,并使其它 OpenStack 组件可以使用这个功能。本章介绍了相关的操作,以及添加组件(如密钥对、安全组、主机集合、flavor)的信息。实例(instance) 在 OpenStack 中被用来代表虚拟机实例。

3.1. 管理实例

在创建实例前,您需要确保其它 OpenStack 组件(例如网络、密钥对、作为引导源的镜像或卷)已为实例准备好。

本节讨论了添加这些组件的步骤,以及创建和管理实例的内容。管理实例包括更新实例、登录到实例、查看实例是如何被使用的、调整实例的大小以及删除实例。

3.1.1. 添加组件

按照以下小节中介绍的内容创建网络、密钥对以及上传镜像或卷源的内容。当创建实例时需要这些元素,而它们在默认的情况下不会被自动提供。同时,您还需要创建一个新的安装组来提供对用户的 SSH 访问。

  1. 在 dashboard 中选择项目
  2. 选择网络 > 网络,确定已经存在了一个新实例可以加入的私人网络。如需了解创建网络的信息,请参阅 Networking GuideAdd a Network 一节(Red Hat Enterprise Linux OpenStack Platform)。
  3. 选择Compute > 访问 & 安全 > 密钥对,确定已经存在了一个密钥对(如需了解创建密钥对的信息,请参阅 第 3.2.1.1 节 “创建一个密钥对”)。
  4. 确定您有一个可以作为引导源的镜像或云硬盘:

  5. 选择 Compute > 访问 & 安全 > 安全组,确定您已经创建了一个安全组规则(如需了解创建安全组的信息,请参阅 Users and Identity Management Guide 中的 Project Security ManagementRed Hat Enterprise Linux OpenStack Platform)。

3.1.2. 创建实例

  1. 在 dashboard 中选择项目 > Compute > 实例
  2. 启动云主机
  3. 输入所需的信息(带有 '* '标记的项是必需的)后点运行
标签页备注

详情

可用域

域(zone)就是可以放置您的实例的、包括云资源的逻辑组。如果您不能确定您的选择,使用默认域(如需了解更多信息,请参阅 第 3.4 节 “管理主机集合”)。

 

云主机名称

实例的名称。

 

云主机类型

云主机类型决定了实例可以获得什么资源(例如,内存)。如需了解更多与云主机类型相关的信息,请参阅 第 3.3 节 “管理 flavor”

 

云主机启动源

根据所做的选择,新的项会被显示用来选择启动源:

访问和安全

密钥对

指定的密钥对会被植入到实例中,并在使用 SSH 远程访问实例时使用它们。通常情况下,每个项目都会创建一个密钥对。

 

安全组

安全组包括了一组防火墙规则用来过滤并处理实例的网络数据(如需了解创建安全组的信息,请参阅 Users and Identity Management Guide 中的 Project Security ManagementRed Hat Enterprise Linux OpenStack Platform)。

Networking

已选择的网络

您需要最少指定一个网络。一般情况下,实例会被分配一个私有网络,然后会获得一个浮动 IP 地址用于外部连接。

创建后

定制脚本源

您可以提供一组命令或一个脚本文件,当实例被引导后运行它们。例如,使用它们来设置实例的主机名 ,或设置一个用户密码。如果选择了 '直接输入',您可以在 '脚本数据项' 中直接输入您的命令;如果使用其它选项,则指定您的脚本文件。

注意

任何以 '#cloud-config' 开始的脚本都会被解析为使用 cloud-config 语法(如需了解与此语法相关的信息,请参阅 http://cloudinit.readthedocs.org/en/latest/topics/examples.html)。

高级选项

磁盘分区

在默认情况下,实例只包括一个分区,并可以根据需要自动调整它的大小。但是,您也可以选择手工配置您自己的分区。

 

配置驱动器

如果选择了这个选项,OpenStack 把元数据写到一个只读的配置驱动器中,在引导时会被附加到实例中(而不是加入到 Compute 的元数据服务中)。在实例被引导后,您可以挂载这个驱动器来查看其中的内容(您可以为实例提供文件)。

3.1.3. 更新实例(使用操作菜单)

为了更新实例,您可以选择项目 > Compute > 实例,并在 操作 栏中选择所需的操作。

操作描述

创建快照

快照可以保留正在运行的实例的磁盘状态。

绑定浮动 IP/解除浮动 IP 的绑定

在一个实例可以和外部网络进行通讯,或被外部用户访问前,您需要为这个实例关联一个浮动 IP(外部)地址。因为外部子网中的外部地址数量是有限的,所以我们推荐您释放那些不使用的地址。

编辑实例

更新实例的名称和关联的安全组。

编辑安全组

为实例添加和删除安全组。如需了解创建安全组的信息,请参阅 Users and Identity Management Guide 中的 Project Security ManagementRed Hat Enterprise Linux OpenStack Platform)。

控制台

在浏览器中查看实例的控制台(可以方便地访问实例)。

查看日志

查看实例的控制台日志中的最新内容。打开后,您可以点 'View Full Log' 来查看日志的全部内容。

暂停/恢复实例

马上暂停实例(不需要用户进行确认);实例的当前状态会保存在内存(RAM)中。

挂起/恢复实例

马上挂起实例(不需要用户进行确认);和休眠一样,实例的当前状态会保存在磁盘中。

重新调整实例的大小

打开重启调整实例窗口(请参阅 第 3.1.4 节 “重新调整实例的大小”)。

软重启

安全地停止并重启实例。软重启会在重启实例前尝试安全地停止所有进程。

硬重启

停止并重启实例。硬重启只是简单地关闭实例的电源,然后对它进行重启。

关闭实例

安全地停止实例。

重新构建实例

使用新的镜像和磁盘分区选择来重新构建镜像(关闭、重新构建镜像和重新启动实例)。当操作系统出现问题时,这个选项比终止实例并重新开始更容易。

终止实例

永久删除实例(您会被要求进行确认)。

您可以创建并分配一个外部 IP 地址(请参阅 第 3.2.3 节 “创建、分配和释放浮动 IP 地址”

3.1.4. 重新调整实例的大小

要调整一个实例的大小(内存或 CPU 的数量),您需要为这个实例选择一个适当的新 flavor(有时也被称为“云主机类型”)。如果您需要增加它的大小,则需要保证包括它的主机有足够的空间。

  1. 设置每个主机来使用 SSH 密钥进行身份验证,从而使 Compute 可以使用 SSH 来在主机间移动磁盘(例如,compute 节点可以共享相同的 SSH 密钥)。

    如需了解更多与设置 SSH 密钥验证相关的信息,请参阅 Migrating Instances Guide 中的 Configure SSH Tunneling Between NodesRed Hat Enterprise Linux OpenStack Platform)。

  2. /etc/nova/nova.conf 文件中设置以下参数来允许在原始主机上重新调整大小:

    [DEFAULT] allow_resize_to_same_host = True
  3. 在 dashboard 中选择项目 > Compute > 实例
  4. 点主机的操作箭头,选调整云主机大小
  5. 新的云主机类型项中选择一个新 flavor。
  6. 如果您需要在启动实例时手工对它进行分区(构建时间会比较快):

    1. 选择高级选项
    2. 磁盘分区项中选择手工
  7. 重新调整大小

3.1.5. 连接到一个实例

本节介绍了通过 dashboard 或命令行接口访问一个实例控制台的方法。您也可以直接连接到实例的串口来进行故障排除(在网络连接失败时也可以使用这个方法)。

3.1.5.1. 使用 Dashboard 访问实例的控制台

您可以在 dashboard 中使用控制台(console)直接连接到您的实例。

  1. 在 dashboard 中选择 Compute > 实例
  2. Click the instance’s More button and select Console. console access
  3. 使用镜像的用户名和密码进行登录(例如,一个 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
  1. 安装 nova-serialproxy 服务:

    # yum install openstack-nova-serialproxy
  2. 更新 /etc/nova/nova.conf 文件中的 serial_console 部分:

    1. 启用 nova-serialproxy 服务:

      $ openstack-config --set /etc/nova/nova.conf serial_console enabled true
    2. 指定用来创建由 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 地址。

    3. 指定实例串口控制台监听的 IP 地址(字符串)。

      $ openstack-config --set /etc/nova/nova.conf serial_console listen 0.0.0.0
    4. 指定需要连接的 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
  3. 重启 Compute 服务:

    # openstack-service restart nova
  4. 启动 nova-serialproxy 服务:

    # systemctl enable openstack-nova-serialproxy
    # systemctl start openstack-nova-serialproxy
  5. 重启所有正在运行的实例,从而使它们可以监听正确的网络套接字。
  6. 打开防火墙的串行控制器端口连接。串口的端口范围通过 /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. 删除实例

  1. 在 dashboard 中选择项目 > Compute > 实例,然后选择您的实例。
  2. 终止云主机
注意

删除一个实例的操作并不会删除附加到它上面的卷,您需要单独删除它们(请参阅 第 4.1.4 节 “删除卷”)。

3.2. 管理实例安全

您可以通过为实例分配正确的安全组(设置防火墙规则)和密钥对(启用 SSH 用户访问)来管理对它的访问。另外,还可以为实例分配一个浮动 IP 地址,使它可以被外部网络访问。以下介绍了创建和管理密钥对、安全组、浮动 IP 地址以及使用 SSH 登录到一个实例的信息,以及为实例添加一个 admin 密码的方法。

如需了解更多与管理安全组相关的信息,请参阅 Users and Identity Management Guide 中的 Project Security ManagementRed Hat Enterprise Linux OpenStack Platform)。

3.2.1. 管理密钥对

密钥对提供了到实例的 SSH 访问能力。每次创建一个密钥对时,它的证书都会被下载到本地系统,从而可以分发给用户。通常情况下,每个项目都会创建一个密钥对(可以在多个实例中使用)。

您也可以为 OpenStack 导入一个已经存在的密钥对。

3.2.1.1. 创建一个密钥对

  1. 在 dashboard 中,选项目 > Compute > 访问 & 安全
  2. 密钥对标签页中点创建密钥对
  3. 密钥对名称项中输入一个名称,点创建密钥对

当密钥对被创建后,一个密钥对文件会通过浏览器自动下载。您需要保存这个文件用于以后的连接。对于使用命令行的 SSH 连接,您可以使用以下命令把这个文件加载到 SSH:

# ssh-add ~/.ssh/os-key.pem

3.2.1.2. 导入一个密钥对

  1. 在 dashboard 中,选项目 > Compute > 访问 & 安全
  2. 密钥对标签页中点导入密钥对
  3. 密钥对名称项中输入一个名称,把您的公共密钥复制/粘贴到公共密钥项中。
  4. 导入密钥对

3.2.1.3. 删除密钥对

  1. 在 dashboard 中,选项目 > Compute > 访问 & 安全
  2. 密钥对标签页中点相应密钥的删除密钥对按钮。

3.2.2. 创建安全组

安全组就是一组 IP 过滤器规则,它可以分配给项目实例,用来设置对实例的网络访问。安全组是与项目相关联的,项目成员可以编辑安全组的默认设置,并可以向其添加新规则。

  1. 在 dashboard 中,选项目标签页,点 Compute > 访问 & 安全
  2. 安全组标签页中,点 + 创建安全组
  3. 为安全组提供一个名称和描述,点创建安全组

如需了解更多与管理项目安全的信息,请参阅 Users and Identity Management Guide 中的 Project Security ManagementRed Hat Enterprise Linux OpenStack Platform)。

3.2.3. 创建、分配和释放浮动 IP 地址

在默认情况下,实例会在首次创建时被分配一个内部 IP 地址。但是,您可以通过创建和分配一个浮动 IP 地址(外部地址)来使它可以通过公共网络进行访问。无论实例处于什么状态,您都可以修改与实例相关联的 IP 地址。

每个项目的可用浮动 IP 地址资源都是有限的(在默认情况下,是 50 个地址),因此您需要在某个 IP 地址不再被使用时释放它,从而使它可以被重复使用。浮动 IP 地址只能从一个存在的浮动 IP 地址池中分配。如需了解更多相关信息,请参阅 Networking Guide 中的 Create Floating IP PoolsRed Hat Enterprise Linux OpenStack Platform)。

3.2.3.1. 为项目分配一个浮动 IP 地址

  1. 在 dashboard 中,选项目 > Compute > 访问 & 安全
  2. 浮动 IP 标签页中,点分配 IP 给项目
  3. 资源池中选择用来分配 IP 地址的网络。
  4. 分配 IP

3.2.3.2. 分配一个浮动 IP

  1. 在 dashboard 中,选项目 > Compute > 访问 & 安全
  2. 浮动 IP 标签页中,点相关地址的关联按钮。
  3. 在 IP 地址项中选择要分配的地址。

    注意

    如果没有可用的地址,您可以点 + 按钮创建一个新地址。

  4. 待连接的端口项中选择要被关联的实例。一个实例只能和一个浮动 IP 地址相关联。
  5. 关联

3.2.3.3. 释放浮动 IP

  1. 在 dashboard 中,选项目 > Compute > 访问 & 安全
  2. 浮动 IP 标签页中,点地址的菜单箭头(在关联/取消关联按钮旁)。
  3. 选择释放浮动 IP

3.2.4. 登录到实例

先决条件

首先把密钥对文件加入到 SSH,然后使用它

  1. 修改所产生的密钥对证书的访问权限。

    $ chmod 600 os-key.pem
  2. 检查 ssh-agent 是否已运行:

    # ps -ef | grep ssh-agent
  3. 如果还没有运行,使用以下命令运行它:

    # eval `ssh-agent`
  4. 在您的本地机器上,把密钥对证书加载到 SSH。例如:

    $ ssh-add ~/.ssh/os-key.pem
  5. 现在,您可以 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 密码

您可以使用以下方法为一个实例添加一个 adminroot)密码。

  1. /etc/openstack-dashboard/local_settings 文件中,把 change_set_password 参数的值设为 True

    can_set_password: True
  2. /etc/nova/nova.conf 文件中,把 inject_password 参数的值设为 True

    inject_password=true
  3. 重启 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 密码项如下所示:

dashboard

这些项可以在启动或重建一个实例时使用。

3.3. 管理 flavor

每个创建的实例都会被分配一个 flavor(资源模板),它定义了实例的大小和容量。Flavor 也可以指定二级临时存储(secondary ephemeral storage)、交换磁盘、元数据来限制资源使用或对特定项目的访问(默认的 flavor 都没有定义这些额外的属性)。flavor 在 Red Hat Enterprise OpenStack Platform 中有时也被称为“云主机类型”。

表 3.1. 默认 Flavor
名称vCPURAMRoot 磁盘大小

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

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 云主机类型
  2. 创建云主机类型, 指定以下项:

    标签页描述

    主机类型信息

    名称

    唯一的名字。

     

    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.3. 更新常规属性

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 云主机类型
  2. 点 flavor 的 编辑云主机类型按钮。
  3. 更新相关的值并点保存

3.3.4. 更新云主机类型的元数据

除了常规属性外,您还可以为云主机类型添加元数据(extra_specs),它可以更精细地定义实例的使用情况。例如,您可以设置允许使用的最大带宽。

  • 预定义的关键字决定了硬件支持或配额。它受您所使用的虚拟机管理器(hypervisor)的限制(对于 libvirt,请参阅 表 3.2 “Libvirt 元数据”)。
  • 预定义的关键字和用户定义的关键字都可以决定实例的调度。例如,您可以设置 SpecialComp=True,任何使用这个云主机类型的实例都将只能在元数据中带有相同关键字和值的主机集合中运行。如需了解更多相关信息,请参阅 第 3.4 节 “管理主机集合”

3.3.4.1. 查看元数据

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 云主机类型
  2. 点云主机类型的 Metadata 链接(YesNo)。当前所有的值都在右面的 Existing Metadata 项中列出。

3.3.4.2. 添加元数据

您可以使用一个关键字/值数据对来指定云主机类型的元数据。

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 云主机类型
  2. 点云主机类型的 Metadata 链接(YesNo)。当前所有的值都在右面的 Existing Metadata 项中列出。
  3. 可用的元数据中,点其它项,选择您需要添加的关键字(请参阅 表 3.2 “Libvirt 元数据”)。
  4. 点 + 按钮;您现在可以看到新的关键字出现在已存在的元数据项中。
  5. 在右面项中输入关键字的值。

    flavor metadata

  6. 当输入完“关键字/值”数据对后,点保存
表 3.2. Libvirt 元数据
描述

hw:action

用来配置每个实例的支持限制。有效值包括:

  • cpu_max_sockets - 支持的最大 CPU 插槽数量。
  • cpu_max_cores - 支持的最大 CPU 内核数量。
  • cpu_max_threads - 支持的最大 CPU 线程的量。
  • cpu_sockets - 首选的 CPU 插槽数量。
  • cpu_cores - 首选的 CPU 内核数量。
  • cpu_threads - 首选的 CPU 线程数量。
  • serial_port_count - 每个实例的最多串口数量。

例如:hw:cpu_max_sockets=2

hw:NUMA_def

定义 NUMA 的拓扑。当 flavor 中的 RAM 和 vCPU 的分配值比 compute 主机中的 NUMA 节点大时,通过定义 NUMA 拓扑可以使主机更好地利用 NUMA,并提高客户机 OS 的性能。flavor 中定义的 NUMA 设置会覆盖镜像中的设置。有效的定义包括:

  • numa_nodes - 实例可以看到的 NUMA 节点数量。设置为 '1' 来确保镜像 NUMA 设置被覆盖掉。
  • numa_mempolicy - 内存分配策略。有效策略包括:

    • strict - 强制实例的内存分配来自于和它绑定的 NUMA 节点(如果设置了 numa_nodes,这是默认值)。
    • preferred - 内核可以使用其它节点。当 numa_nodes 被设置为 '1' 时会有用。
  • numa_cpus.0 - vCPU N-M 到 NUMA 节点 0 的映射(以逗号分隔)。
  • numa_cpus.1 - vCPU N-M 到 NUMA 节点 1 的映射(以逗号分隔)。
  • numa_mem.0 - 把 N GB 内存映射到 NUMA 节点 0。
  • numa_mem.1 - 把 N GB 内存映射到 NUMA 节点 1。
  • numa_cpu.N 和 numa_mem.N 只有在设置了 numa_nodes 时才有效。另外,它们只有在实例的 NUMA 节点的 CPU 和内存分配不对称时才需要(对于一些 NFV 负载非常重要)。
注意

如果 numa_cpu 或 numa_mem.N 的值比实际有效的值大,则会出现一个异常错误。

示例(带有 8 个 vCPU 和 4GB 内存的实例):

  • hw:numa_nodes=2
  • hw:numa_cpus.0=0,1,2,3,4,5
  • hw:numa_cpus.1=6,7
  • hw:numa_mem.0=3
  • hw:numa_mem.1=1

调度程序会查找带有 2 个 NUMA 节点的主机,它需要可以在一个节点上运行 6 个 CPU 和 3 GB 内存,在另一个节点上运行 2 个 CPU 和 1 GB 内存。如果某个主机只有一个 NUMA 节点,它可以运行 8 个 CPU 和 4 GB 内存,这个主机不会被认为是一个有效的匹配。无论 numa_mempolicy 是如何设置的,相同的逻辑都适用于调度程序。

hw:watchdog_action

当实例出现故障时,可以使用实例的 watchdog 设备触发一个操作。有效的操作是:

  • disabled - 没有附加的设备(默认值)。
  • pause - 暂停实例。
  • poweroff - 强制关闭实例。
  • reset - 强制重置实例。
  • none - 启用 watchdog,但当实例出现故障时不进行任何操作。

例如:hw:watchdog_action=poweroff

hw_rng:action

通过使用镜像属性把一个随机数生成器设备添加到镜像中(请参阅 RHEL OpenStack Platform 文档的 "Command-Line Interface Reference" 部分中的 hw_rng_model 内容)。

如果添加了设备,有效的操作将包括:

  • allowed - 如果为 True,这个设备被启用;如果为 False,设备被禁用。在默认情况下,设备被禁用。
  • rate_bytes - 在每个 rate_period 周期中,为了填充它的熵池,实例的内核可以从主机读的最大字节数(整数)。
  • rate_period - 读持续的时间(以秒为单位,整数)。

例如:hw_rng:allowed=True

hw_video:ram_max_mb

视频设备允许使用的最大内存数量(以 MB 为单位)。

例如:hw:ram_max_mb=64

quota:option

对实例的限制。有效选项包括:

  • cpu_period - 强制 cpu_quota 限制的时间(以 ms 为单位)。在指定的 cpu_period 时间中,每个 vCPU 不能占用超过 cpu_quota 的运行时。这个值的范围必须是 [1000, 1000000],'0' 代表没有值。
  • cpu_quota - 在每个 cpu_period 时间段中 vCPU 所允许的最大带宽(以 ms 为单位)。这个值的范围必须是 [1000, 18446744073709551],'0' 代表没有值,负值代表 vCPU 不被控制。cpu_quota 和 cpu_period 可以被用来保证所有 vCPU 以相同的速度运行。
  • cpu_shares - 域共享 CPU 的时间。这个值只有在对同一个域中的其它机器加权重的情况下才有意义。一个云主机类型的相关值为 '200' 的实例会获得比相关值为 '100' 的实例多一倍的机器时间。
  • disk_read_bytes_sec - 每秒磁盘可以读取的最大数据量(以字节为单位)。
  • disk_read_iops_sec - 每秒所允许的最大读 I/O 操作。
  • disk_write_bytes_sec - 每秒磁盘可写的最大数据量(以字节为单位)。
  • disk_write_iops_sec - 每秒所允许的最大写 I/O 操作。
  • disk_total_bytes_sec - 每秒所允许的最大吞吐量总和的限制。
  • disk_total_iops_sec - 每秒所允许的最大总 I/O 操作。
  • vif_inbound_average - 期望的平均流入网络流量。
  • vif_inbound_burst - 在 vif_inbound_peak 速度上可以接收的最大网络流量。
  • vif_inbound_peak - 可以接收流入网络数据的最大速率。
  • vif_outbound_average - 期望的平均流出网络流量。
  • vif_outbound_burst - 在 vif_outbound_peak 速度上可以发送的最大网络流量。
  • vif_outbound_peak - 可以发送流出网络数据的最大速率。

例如:quota:vif_inbound_average=10240

3.4. 管理主机集合

为了性能和管理的目的,一个单一的 Compute 部署可以被分成不同的逻辑组。OpenStack 会使用以下的相关术语:

  • 主机集合(Host aggregate) - 一个主机集合就是 OpenStack 部署中的一个逻辑组,它包括了一组 Compute 主机,以及相关的元数据。一个主机可以属于多个主机集合。只有系统管理员可以查看或创建主机集合。

    一个主机集合的元数据通常被用来为 Compute 调度器(scheduler)提供信息(如为一部分主机限制特定的云主机类型或镜像)。当在一个主机集合中指定了元数据,只有那些在云主机类型中指定了相同元数据的实例才可以使用其中的主机。

    系统管理员可以通过主机集合实现负载均衡、强制物理隔离(或冗余)、对带有相同属性的服务器进行分组或分离不同的硬件系统。当您创建一个集合时,需要指定一个域名(zone name),它会作为最终用户可以看到的这个集合的名称。

  • 可用域(Availability zone) - 可用域就是最终用户可以看到的主机集合。最终用户无法看到这个域是由哪些主机组成的,也无法看到这个域的元数据,而只能看到域的名称。

    系统管理员可以设置包括特定计算能力的域,或位于特定区域中的域,最终用户将可以使用这些配置的域。

3.4.1. 启用主机集合调度

在默认情况下,主机集合元数据不会被用来过滤实例的使用情况,您需要更新 Compute 的调度配置来启用元数据:

  1. 编辑 /etc/nova/nova.conf 文件(您需要具有 root 或 nova 用户的权限)。
  2. 确定 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. 保存配置文件。

3.4.2. 查看可用域或主机集合

使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 主机集合。当前所有定义的集合会在主机集合项中列出,所有域会在可用域项中列出。

3.4.3. 添加一个主机集合

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 主机集合。当前所有定义的集合会在主机集合项中列出。
  2. 创建主机集合
  3. 名称项中指定集合的名称,最终用户将会在可用域项中看到这个名称。
  4. 在集合中管理主机
  5. 点相应主机的 + 图标来选择主机。
  6. 创建主机集合

3.4.4. 更新一个主机集合

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 主机集合。当前所有定义的集合会在主机集合项中列出。
  2. 更新实例的名称可用域

    • 点集群的编辑主机集群按钮。
    • 更新名称可用域的值,点保存
  3. 更新实例的分配的主机

    • 操作项中选集合的箭头图标。
    • 管理主机
    • 点主机的 + 或 - 图标来修改主机的分配。
    • 完成后点保存
  4. 更新实例的元数据

    • 操作项中选集合的箭头图标。
    • 更新元数据按钮。所有当前值都在右面的存在的元数据项中列出。
    • 可用的元数据中点其它项,输入您要添加的关键字。您可以使用预定义的关键字(请参阅 表 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. 删除一个主机集群

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 系统 > 主机集合。当前所有定义的集合会在主机集合项中列出。
  2. 从集群中删除所有分配的主机:

    1. 操作项中选集合的箭头图标。
    2. 管理主机
    3. 点主机的 - 图标删除主机。
    4. 完成后点保存
  3. 操作项中选集合的箭头图标。
  4. 删除主机集合

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 具有最高的权重,因此在调度过程中有最高优先级。

Scheduling Hosts

3.5.1. 配置调度过滤器

您可以使用 scheduler_default_filters 选项(/etc/nova/nova.conf 文件)来定义调度程序(scheduler)使用的过滤器(您需要具有 root 或 nova 用户的权限)。过滤器可以被添加或删除。

默认情况下,以下过滤器被配置并在调度程序中运行:

scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter

一些过滤器会使用通过命令中的参数传递给实例的信息:

下表列出了可用的过滤器

表 3.4. 调度过滤器
过滤器描述

AggregateCoreFilter

使用 host-aggregate 元数据关键字 cpu_allocation_ratio 过滤掉超过过度分配(over-commit)比率(虚拟 CPU 和物理 CPU 分配的比率)的主机,它只在为实例指定了主机集合(host aggregate)的情况下有效。

 

如果没有设置这个值,过滤器会使用 /etc/nova/nova.conf 文件中的 cpu_allocation_ratio 的值。它的默认值是 16.0(每个物理 CPU 可以分配 16 个虚拟 CPU)。

AggregateDiskFilter

使用 host-aggregate 元数据关键字 disk_allocation_ratio 过滤掉超过过度分配(over-commit)比率(虚拟磁盘和物理磁盘分配的比率)的主机,它只在为实例指定了主机集合(host aggregate)的情况下有效。

 

如果没有设置这个值,过滤器会使用 /etc/nova/nova.conf 文件中的 disk_allocation_ratio 的值。它的默认值是 1.0(每个物理磁盘可以分配一个虚拟磁盘)。

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 的值。它的默认值是 1.5(每个物理内存可以分配 1.5 的虚拟内存)。

AllHostsFilter

通过所有有效的主机(但不禁用其它过滤器)。

AvailabilityZoneFilter

过滤器使用实例指定的可用域。

ComputeCapabilitiesFilter

确定 Compute 元数据被正确读取。: 前的所有内容被认为是命名空间(namespace)。例如,quota:cpu_period 使用 quota 作为命名空间,cpu_period 是关键字。

ComputeFilter

通过所有可以正常工作并被启用的主机。

CoreFilter

使用 /etc/nova/nova.conf 文件中的 cpu_allocation_ratio 过滤掉超过过度分配比率(虚拟 CPU 到物理 CPU 分配比率)的主机。它的默认值是 16.0(每个物理 CPU 可以分配 16 个虚拟 CPU)。

DifferentHostFilter

在一个和指定主机不同的主机上创建实例。使用 nova boot 命令的 --different_host 选项来指定不同的主机。

DiskFilter

使用 /etc/nova/nova.conf 文件中的 disk_allocation_ratio 过滤掉超过过度分配比率(虚拟磁盘到物理磁盘分配比率)的主机。它的默认值是 1.0(每个物理磁盘可以分配 1 个虚拟磁盘)。

ImagePropertiesFilter

只通过匹配实例镜像属性的主机。如需了解更多信息,请参阅 第 1.2.1 节 “创建镜像”

IsolatedHostsFilter

只通过运行独立镜像(在 /etc/nova/nova.conf 文件中使用 isolated_hostsisolated_images(以逗号分隔的值) 指定)的独立主机。

JsonFilter

接受并使用实例的自定义 JSON 过滤器:

  • 有效的操作包括:=、<、>、in、⇐、>=、not、or、and
  • 可识别的变量是:$free_ram_mb、$free_disk_mb、$total_usable_ram_mb、$vcpus_total、$vcpus_used
 

这个过滤器通过 nova boot 命令的 '--hint query' 指定。例如:

--hint query='['>=', '$free_disk_mb', 200 * 1024]'

MetricFilter

过滤掉带有无效指标数据的过滤器。

NUMATopologyFilter

根据主机的 NUMA 拓扑过滤主机。如果实例没有定义拓扑,所有主机都可以被使用。这个过滤程序会尝试匹配带有完全相同的 NUMA 拓扑的主机。这个过滤器还会查看每个 NUMA 节点的标准过度订阅(over-subscription)的限制,并根据它为 compute 主机提供限制。

RamFilter

使用 /etc/nova/nova.conf 文件中的 ram_allocation_ratio 过滤掉超过过度分配比率(虚拟内存到物理内存的分配比率)的主机。它的默认值是 1.5(每个物理内存可以分配 1.5 倍的虚拟内存)。

RetryFilter

过滤掉调度失败的主机。它只在 scheduler_max_attempts 大于 0 的情况下有效(scheduler_max_attempts=3 是默认设置)。

SameHostFilter

通过一个或多个指定的主机。使用 nova boot--hint same_host 选项指定主机。

ServerGroupAffinityFilter

只通过一个特定服务器组中的主机:

  • 设置服务器组的 affinity 策略(nova server-group-create --policy affinity groupName)。
  • 构建带有指定组的实例(nova boot 选项 --hint group=UUID)。

ServerGroupAntiAffinityFilter

只通过还没有包括任何实例的服务器组中的主机:

  • 设置服务器组的 anti-affinity 策略(nova server-group-create --policy anti-affinity groupName)。
  • 构建带有指定组的实例(nova boot 选项 --hint group=UUID)。

SimpleCIDRAffinityFilter

只通过特定 IP 子网范围内(由实例的 cidr 和 build_new_host_ip hint 指定)的主机。例如:

--hint build_near_host_ip=192.0.2.0 --hint cidr=/24

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 - 使用所有主机权重器(默认)。
表 3.5. 主机权重选项
权重器选项描述

所有

[DEFAULT] scheduler_host_subset_size

定义所选主机的子集合的大小(整数),它的值必须不小于 1。如果是 1,权重功能返回的第 1 个主机会被选择。如果它的值小于 1,这个值会被忽略,并使用 1 作为它的值。

metrics

[metrics] required

指定当 [metrics] weight_setting 无效时如何处理 metrics:

  • True - 需要 metrics,如果无效,会产生一个 exception。为了避免产生 exception,在 scheduler_default_filters 选项中使用 MetricFilter
  • False - 无效的 metric 在权重处理过程中被认为是一个负参数;返回的值由 weight_of_unavailable 设置。

metrics

[metrics] weight_of_unavailable

当 [metrics] weight_setting 中的 metric 无效时的权重值。它只在 required=False 时有效。

metrics

[metrics] weight_multiplier

权重 metric 使用的乘数。在默认情况下,weight_multiplier=1.0,并在所有可能的主机中的实例上有效。如果这个值是负数,带有较低 metric 的主机会有高优先值。

metrics

[metrics] weight_setting

指定 metric 以及它们权重的比率,它是一个使用逗号分隔的 metric=ratio 对列表。有效的 metric 名是:

  • cpu.frequency - 当前 CPU 的频率
  • cpu.user.time - CPU 用户模式时间
  • cpu.kernel.time - CPU 内核时间
  • cpu.idle.time - CPU 空闲时间
  • cpu.iowait.time - CPU I/O 等待时间
  • cpu.user.percent - CPU 用户模式百分比
  • cpu.kernel.percent - CPU 内核百分比
  • cpu.idle.percent - CPU 空闲百分比
  • cpu.iowait.percent - CPU I/O 等待百分比
  • cpu.percent - 一般的 CPU 利用率

例如:weight_setting=cpu.user.time=1.0

ram

[DEFAULT] ram_weight_multiplier

RAM 的乘数(浮点值)。在默认情况下是 ram_weight_multiplier=1.0,并在所有可能主机上的实例中有效。如果它的值为负数,具有较少 RAM 的主机具有高优先级。

3.5.2.2. 为 cell 配置权重选项

您可以使用 [cells] scheduler_weight_classes 选项(在 /etc/nova/nova.conf 文件中)来定义调度器使用的 cell 权重程序。您需要具有 rootnova 用户权限。

有效的权重程序是:

  • 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。

表 3.6. Cell 权重选项
权重程序选项描述

mute_child

[cells] mute_weight_multiplier

已经沉默了一段时间的主机的乘数(multiplier)。它需要是一个负的浮点数,默认值是 -10.0

mute_child

[cells] mute_weight_value

沉默主机的权重值。它的值需要是负的浮点数,默认值是 1000.0

ram_by_instance_type

[cells] ram_weight_multiplier

权重 RAM 的乘数。它的值需要是一个浮点数,默认值是 1.0,并在所有 cell 上的实例中有效。如果它的值为负数,具有较少 RAM 的 cell 具有高优先级。

weight_offset

[cells] offset_weight_multiplier

权重 cell 的乘数(浮点值)。允许实例通过把它的权重偏移(weight offset)设置为999999999999999(最高权重具有优先级)来指定一个优先的 cell。它的默认值是 1.0

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. 撤离一个实例

  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. 撤离所有实例

  1. 使用以下命令在一个特定主机上撤离所有实例:

    # 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

3.6.3. 配置共享存储

如果您使用共享存储,以下操作会为 Compute 服务把实例目录导出到两个节点,并保证这些节点可以被访问。/etc/nova/nova.conf 文件中的 state_pathinstances_path 参数指定了目录的路径。以下操作使用默认值 - /var/lib/nova/instances。只有具有 root 访问权限的用户才可以设置共享存储。

  1. 在控制器主机上:

    1. 确保 Compute 服务的用户(这个用户必须在控制器和节点中都是相同的)对 /var/lib/nova/instances 目录有读和写的访问权限。例如:

      drwxr-xr-x.  9 nova nova 4096 Nov  5 20:37 instances
    2. 把以下行添加到 /etc/exports 文件,使用两个 compute 节点的 IP 地址替换其中的 node1_IP 和 node2_IP:

      /var/lib/nova/instances (rw,sync,fsid=0,no_root_squash)
      /var/lib/nova/instances (rw,sync,fsid=0,no_root_squash)
    3. /var/lib/nova/instances 目录导出到 compute 节点。

      # exportfs -avr
    4. 重启 NFS 服务器:

      # systemctl restart nfs-server
  2. 在每个 compute 节点上:

    1. 确定 /var/lib/nova/instances 目录在本地存在。
    2. 把以下行添加到 /etc/fstab 文件:

      :/var/lib/nova/instances /var/lib/nova/instances nfs4 defaults 0 0
    3. 挂载控制器的实例目录(所有设备在 /etc/fstab 中列出):

      # mount -a -v
    4. 确认 qemu 可以访问目录的镜像:

      # ls -ld /var/lib/nova/instances
      drwxr-xr-x. 9 nova nova 4096 Nov  5 20:37 /var/lib/nova/instances
    5. 确定节点可以看到实例目录:

      drwxr-xr-x. 9 nova nova 4096 Nov  5 20:37 /var/lib/nova/instances
注意

您可以运行以下命令查看所有挂载的设备:

# df -k
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.