允许使用 virtiofs 将本地 scaphandre 目录映射到实例

https://blueprints.launchpad.net/nova/+spec/virtiofs-scaphandre

Scaphandre 是一种工具,可用于测量计算和 VM 的功耗,精确到进程级别。(https://github.com/hubblo-org/scaphandre)

如果您想了解更多信息,BBC 团队提出了一种有趣的用例,用于创建环境仪表板:https://superuser.openstack.org/articles/environmental-reporting-dashboards-for-openstack-from-bbc-rd/

问题描述

目前,由于 scaphandre 需要计算节点上可供正在运行的 VM 访问的目录,因此无法获取每个 VM 的功耗。该目录包含 scaphandre 实例(客户代理)在 VM 上运行以正确报告 VM 及其相关进程功耗所需的数据。

Scaphandre 提出的解决方案是在 VM 中使用 virtiofs 挂载该目录。但是,用户无法执行此操作,因为它需要修改 VM XML 定义文件。Nova 完全管理此文件,因此只有 nova 才能更改它。

用例

  • 作为用户,我想了解我的计算节点的功耗,并深入到 VM 和 VM 进程的单独功耗。

  • 作为管理员,我想允许这种用法,但要确保用户只能挂载配置的必需目录。我还不想泄露云设计见解。

提议的变更

为了简化规范,该特性将被命名为 virtiofs-scaphandre

虽然此特性是为了支持 scaphandre 而实现的,但其他工具可能需要此功能。因此,实现将尽可能通用。

此更改部分依赖于 https://specs.openstack.org/openstack/nova-specs/specs/2023.2/approved/libvirt-virtiofs-attach-manila-shares.html 规范来构建包含 virtiofs 设置的 VM XML 文件(主要是 驱动程序部分)。

这意味着相同的要求和限制。

  • QEMU >=5.0 和 libvirt >= 6.2

  • 关联的实例使用文件支持的内存或巨页

  • 由于生命周期附加和分离功能仅在 libvirt 中“最近”实现,因此将不支持迁移实例。

变更描述

  • 添加计算配置选项 share_local_fs,该选项指定计算源目录与 VM 目标 mount_tags 之间的映射。

share_local_fs = { "/var/lib/libvirt/scaphandre": "scaphandre" }
  • 如果计算节点上存在上述配置选项,则添加计算特性 COMPUTE_SHARE_LOCAL_FS,指定 virtiofs-scaphandre 特性在此计算节点上可用。

  • 用户可以将 hw:power_metrics 作为额外的规格或 hw_power_metrics 镜像属性添加,从而会发生两件事

    1. Nova 将把实例调度到具有 share_local_fs 的主机。

    2. Nova 将在实例 XML 文件中添加 virtiofs 设置,如以下示例所示。

<filesystem type='mount' accessmode='passthrough'>
    <driver type='virtiofs'/>
    <source dir='/var/lib/libvirt/scaphandre/<DOMAIN_NAME>'/>
    <target dir='mount_tag'/>
    <readonly />
</filesystem>

注意

<DOMAIN_NAME> 是 virsh listOS-EXT-SRV-ATTR:instance_name 报告的名称。这是 scaphandre 用于获取 VM 名称和 openstack 之间的通用名称。

可以使用 instance_name_template 定义实例名称。https://docs.openstack.org/nova/latest/configuration/config.html#DEFAULT.instance_name_template

示例

  • “OS-EXT-SRV-ATTR:instance_name”: “instance-00000034

  • /usr/bin/qemu-system-x86_64 -name guest=instance-00000034

  • 因此,用户可以使用以下命令行在 VM 上挂载计算源目录。

user@instance $ mount -t virtiofs mount_tag /var/scaphandre

注意

用户可以在实例元数据中查看 mount_tag。可以基于此机制构建挂载自动化。

备选方案

不适用

REST API 影响

不适用

数据模型影响

引入 hw_powermetrics 镜像属性作为新的属性对象。

扩展 flavor 额外规格验证以检查 hw:power_metrics

安全影响

计算节点的 filesystem 将以只读方式共享。这是为了防止 VM 用户对主机进行任何修改。

通知影响

不适用

其他最终用户影响

Scaphandre 的安装和 配置留给 openstack 管理员。

性能影响

不适用

其他部署者影响

开发人员影响

升级影响

不适用

实现

负责人

主要负责人

uggla (rene.ribaud)

功能联络人

功能联络人

uggla

工作项

  • 新的配置选项。

  • 添加新的特性。

  • 更改以共享计算节点 filesystem(如果镜像属性或 flavor 额外规格请求)。

依赖项

测试

  • 功能 API 测试

  • 集成 Tempest 测试

文档影响

将提供详细的管理员和用户文档。

参考资料

历史

修订

发布名称

描述

Antelope

引入

Bobcat

重新提出