rootwrap 守护进程模式

https://blueprints.launchpad.net/nova/+spec/nova-rootwrap-daemon-mode

Nova 是一个严重依赖在计算和网络节点上执行需要 Linux 系统 root 权限的操作的项目。目前,这是通过 oslo.rootwrap 实现的,它必须使用 sudo 运行。Sudo 和 rootwrap 都会产生显著的性能开销。这个蓝图是解决 rootwrap 部分开销的一系列蓝图之一,使用 rootwrap 的一种新模式——守护进程模式。Neutron 已经采用了这种方法。

问题描述

[2] 中所示,rootwrap 为 Neutron 带来了巨大的性能开销。对 Nova 的影响不如 Neutron 显著,因为大部分工作是通过 libvirt 的 API 完成的,但仍然存在。开销的详细信息在 [1] 中介绍。

用例

这将消除在启动大量节点时 nova-network、nova-compute 中的瓶颈。

项目优先级

提议的变更

这个蓝图建议采用 oslo.rootwrap 中的功能,该功能允许运行 rootwrap 守护进程。该守护进程将像普通的 rootwrap 一样工作,但将通过经过身份验证的 UNIX 域套接字而不是命令行接受要运行的命令,并将持续在后台运行。

请注意,这不是通过某些消息队列的常规 RPC。它使用 UNIX 套接字,因此没有可用的远程连接。它还使用通过 stdout(管道)与父进程共享密钥的摘要身份验证,因此其他进程将无法访问守护进程。rootwrap 守护进程的更多详细信息在 [1] 中介绍。

use_rootwrap_daemon 配置选项应被添加,这将使 utils.execute 使用守护进程而不是普通的 rootwrap。

备选方案

Neutron 中讨论的替代方法在 [3] 中。

数据模型影响

REST API 影响

安全影响

此更改需要一个额外的端点才能以 root 身份运行——nova-rootwrap-daemon。它应该被添加到 sudoers 文件中。

使用客户端+守护进程而不是普通 rootwrap 的所有安全问题在 [1] 中介绍。

通知影响

其他最终用户影响

性能影响

此更改为在 nova-computenova-network 中需要以 root 权限运行的磁盘和网络操作带来性能提升。当前 rootwrap 守护进程的状态显示,与普通的 sudo rootwrap 调用相比,速度提高了 10 倍以上。Nova 的总加速效果会不那么显著,但应该可以察觉到。

查看 check-tempest-dsvm-full CI 任务 ([4]) 中 rootwrap 守护进程模式开启和关闭时的数字,我们看到

守护进程关闭 - 平均 0.08981064764 秒 守护进程开启 - 平均 0.02984345922 秒

其他部署者影响

此更改引入了新的配置变量 use_rootwrap_daemon,该变量切换新的行为。请注意,默认情况下 use_rootwrap_daemon 将被关闭,因此要获得加速效果,必须将其打开。启用后,nova-rootwrap-daemon 用于运行需要 root 权限的命令。

此更改还引入了新的二进制文件 nova-rootwrap-daemon,该文件应与 nova-rootwrap 一起部署,并添加到 sudoers 中。

开发人员影响

实现

负责人

主要负责人

Davanum Srinivas <davanum@gmail.com>

工作项

这里唯一的任务是实现新的配置变量,并使用它以守护进程模式运行 rootwrap。

依赖项

  • oslo.rootwrap 中的 rootwrap-daemon-mode 蓝图 [1]

测试

此更改不会更改 API,因此不需要额外的集成测试。如果 tempest 对 use_rootwrap_daemon 开启感到满意,则该功能有效。我们可以为一些作业(例如 nova-network 作业)打开此标志。

文档影响

参考资料