CinderCaracalPTGSummary
简介
Cinder 2024.1 (Caracal) 周期第八次虚拟 PTG 于 2023 年 10 月 24 日星期二至 2023 年 10 月 27 日星期五举行,每天 4 小时 (1300-1700 UTC)。此页面将提供 PTG 期间讨论的所有主题的摘要。
本文档旨在提供每个会话的摘要。有关更多信息,请参阅 cinder 2024.1 Caracal PTG etherpad
会议已录制,因此要获取任何讨论的全部详细信息,您可以观看/收听录制内容。每个日期的录制链接位于各自日期标题下。
星期二 10月24日
录像
Bobcat 回顾
我们将讨论分为以下子部分
- 哪些方面做得好?
- 不同公司的积极贡献
- 我们在夏季实习中获得了 2 名 Outreachy 实习生,他们在 api-ref 示例测试中做出了很大的贡献
- 发布按时进行
- 哪些方面做得不好?
- CI 失败率影响生产力
- Sofia 离开团队确实影响了评审带宽
- 我们应该开始做什么?
- 我们应该继续做什么?
- 赞助 Outreachy 实习生
- 已接受提案,至少有一名申请人
- 赞助 Outreachy 实习生
- 我们应该停止做什么?
- 缺乏围绕 cinder 会议中请求评审部分的结构
- 补丁太多会劝退评审员
- 作者应在补丁复杂时添加说明,并询问是否有任何疑问
- 作者应尝试仅添加基于里程碑的相关补丁,而不是添加所有可能的补丁
- 作者应积极参与评审,因为核心团队优先处理积极参与评审的贡献者的补丁
- #action: whoami-rajat 在 cinder 会议中跟进此事
- 缺乏围绕 cinder 会议中请求评审部分的结构
Gate 问题
延续 2023.2 Bobcat 中期会议的讨论,我们仍然看到 gate 问题,包括 OOM 和超时。查看一个示例 gate 作业失败,我们确定了以下几点
- 如果可能,增加 VM 的系统内存,8GB 对 tempest 测试来说不够
- 增加交换空间(使其与 RAM 的一比一映射大小相同)
- 更改 cinder 以使用文件锁进行协调,以消除 etcd
- 减少进程数
- 我们看到多个服务运行多个实例的模式
- neutron-server: 5
- nova-conductor: 6
- nova-scheduler: 2
- swift: 每个服务 3 个
- 我们看到多个服务运行多个实例的模式
- 为了查看最终运行多少个 VM,将并发性降低到 2 以进行测试
- #action: rosmaita 提出一些直接任务的补丁,例如增加交换空间
备份/恢复性能
有人报告了针对 S3 和 swift 后端的错误,抱怨它们速度非常慢。Launchpad: https://bugs.launchpad.net/cinder/+bug/1918119
一般的讨论围绕以下几点
- 如果备份/恢复存在问题,请报告错误,这有助于团队了解所有潜在的改进
- 使用流而不是块
- 我们没有任何备份或恢复进度状态
- 我们可以研究一些关于获取有关长期运行的操作及其当前状态的数据
- #action: zaitcev 调查我们现在拥有的内容并提出一个关于可观察性的规范,特别是对于恢复 ~ 我们已经有 %% 通知,但没有当前 %%
还提到了几个与备份相关的规范
- 加密备份
- 引入新的备份状态字段
- 多个 cinder 备份后端
星期三 10月25日
录像
Cinder 多租户支持
用例:操作员希望基于每个租户对存储阵列进行分区和隔离。
Manila 具有 DHSS(驱动程序处理服务器共享)支持,允许其后端创建虚拟存储实例。
目前对于 cinder,他们需要手动创建所有虚拟存储实例,并将其映射到 cinder.conf 中的后端。
他们可以使用私有卷类型将特定卷类型与项目以及带有“volume_backend_name”额外规范的后端关联起来。
结论
- 该用例是 NetApp 特定的,因为虚拟存储实例的创建发生在存储端,而 manila 的工作流程包括创建虚拟实例(共享服务器)的步骤
- Manila 架构允许使用 neutron 进行网络分区,这与 cinder 暴露 LUN 的方式完全不同
- 该用例不适用于 Cinder,因为
- Cinder 根本不与 neutron 交互
- 即使我们添加了支持,其他驱动程序也无法利用它
NetApp LUN 空间分配
Netapp 团队希望能够在 NetApp 后端为其卷配置一个 space_allocation 属性。
空间分配使 ONTAP 能够在主机删除文件时自动回收空间。
当前提案是通过卷类型额外规范配置它,并使用该类型的卷将启用空间分配。
另一个情况是,我们需要能够通知 nova LUN 是稀疏的。
如果 LUN 是稀疏的并且 nova 来宾支持 TRIM/DISCARD,则来宾会将 TRIM/DISCARD 命令发送到存储阵列以回收存储空间。
默认情况下,NetApp 后端启用稀疏配置,但禁用空间分配。
同意的设计
- 在卷类型额外规范中添加 space_allocation 属性
- 在返回连接信息时,报告与 space_allocation 相同的 discard 值
- 默认情况下,如果操作员在 cinder.conf 中设置了它,将报告 report_discard_supported 并带有“discard”参数
- #action: NetApp 团队添加对 space_allocation 的支持并报告 discard。
注意:如果我们在后端更改配置,则需要重新映射 LUN(分离然后附加)才能反映 space_allocation/discard 值
Operator Hour
没有操作员出现在 operator hour 中。
操作员未出现似乎不是 cinder 问题
Manila 也遇到了操作员未出现的问题。
- #action: 询问 opendev 团队有关其他项目 operator hour 中操作员出席情况的统计数据。
块设备驱动程序
块设备驱动程序允许创建本地块设备并使其可用于 nova 实例。
它支持提供设备路径以及通过 iSCSI 导出设备。
它具有有限的功能,人们没有使用它,因此它已被从 cinder 驱动程序树中删除
将其带回的用例是复制数据库,它不限于 etcd。
我们可以修改 LVM 驱动程序以进行本地附加。
使用 nova ephemeral 的问题
- 不可配置:我们只能使用 ceph 或 lvm
- 部署的计算节点可能没有可用的本地存储
- 我们没有专门用于 etcd 的块设备,我们将只分配总的临时存储空间的一部分给 etcd
使用此配置的一些约束是
- cinder-volume 服务需要部署在托管实例的计算节点中
- 一个本地连接器,返回一个路径 -- 我们已经有一个
- 没有卷迁移和数据持久性(这不是优先级)
- 我们将有一些带有 cinder+LVM 和一些没有的 k8s 控制器
- 在每个计算节点上扩展 cinder volume 并将其扩展到 500 个可能会给调度程序带来负载,如果它每 60 秒报告一次(默认)
结论
- LVM 与本地存储应该是一个不错的选择
- 如果延迟问题仍然存在,块设备驱动程序可能是未来的选择(目前我们没有性能声明块设备驱动程序比 LVM 本地更好)
- #action: eharney 去处理这件事
与 nova 的跨项目
星期三:1600-1700 UTC
在某些操作失败期间不正确的附件清理
一些与 cinder 附件交互的 nova 操作,在失败场景中没有进行正确的清理。
- 实时迁移
- 驱逐
- 冷迁移
不正确的清理会导致部署中的不一致性,需要手动解决,自从 CVE-2023-2088 之后,由于附件删除仅在服务用户使用服务令牌请求时才有效,因此解决起来变得更加困难。
解决方案
- 在计算 init_host 时,我们可以识别附件并记录未清理的每个附件
- 我们有一个 cinder API,它返回给定计算主机的所有附件。
- /attachments?all_tenants=1&attach_host=?
- 我们需要管理员 + 服务令牌才能获取它
- #action: nova 团队可以报告一个错误并决定谁想处理它
修复 Wallaby 中退化的 RBD retype
Cinder 有 2 条迁移路径
- 通用:cinder 执行迁移
- 优化:后端驱动程序执行迁移
Wallaby 中的一个更改导致操作对以前未使用的驱动程序使用优化路径。
这向我们介绍了一个优化迁移路径中的新错误。
我们有两种方法可以修复该问题
- 短期修复:还原禁止对未使用优化的驱动程序使用优化路径的更改
- 长期修复:修复优化的迁移路径以调用 nova API 并使用 nova 更新迁移的卷信息
这还需要一定程度的测试
- Tempest 补丁以测试回归
- devstack-plugin-ceph 补丁以启用单独 Ceph 池的配置
- cinder 补丁以添加一个 cinder-tempest-ceph-multibackend 作业
- #action: 需要有人处理它
Cinder、Nova 和 Glance 中的镜像元数据
- 在 glance 中,镜像元数据不受限制,但 cinder 和 nova 在模式验证中将其限制为 255 个字符。这是因为 glance 没有针对镜像属性的模式验证。
- 目前它是一个文本字段(64k)在 nova、cinder、glance 等 DB 中,导致读取时产生大量的 IO,这并不理想。
- #action: (rosmaita) 将其带到邮件列表中,以确定该字段的正确值应该是什么(基于它的使用方式)
Gate 问题
gate 作业显示 gate 作业中运行了 6 个 conductor 实例。根据配置,worker 设置为两个。
[conductor]
workers = 2
conductor 进程不应该导致 gate 失败,但可能会消耗内存导致其他进程饥饿。
建议的解决方案
- 增加交换空间。建议:8 GB
- 可以通过缓存优化 keystone 和 neutron DB 查询
- 14 个 qemu 进程可能是由于更高的 tempest 并发性造成的,但根据当前并发性(6),它不应该达到 14 个实例,因此需要检查是否存在清理问题
- 请求用于 gate 作业的更高 RAM 系统(16GB)
另一个需要关注的 gate 问题是 nova gate 作业中 LVM 调用卡住。grenade 可以作为一个例子。
- 建议将 lvm 调用移动到 privsep
- 切换 gate 作业以使用 ceph
- 我们不会测试 iscsi 代码路径(os-brick 连接器)
- 检查 devstack 中是否过滤了 lvm 配置设备
- Melanie 检查了它并修复了相关问题
- #action: cinder 团队查看 nova 遇到的关于 LVM 的 gate 失败
星期四 10月26日
录像
新的配额系统
- 提供了一个关于接受的配额系统设计的演示文稿。
- 计数器和计数听起来非常令人困惑
- DynamicQuotaDriver、StoredQuotaDriver 是很好的例子
- 另一个建议是 strictQuotaDriver
- 我们应该使用配额同步并定期执行它吗?
- 是的,我们需要它,就像我们今天一样:自动或使用 cinder-manage
- 自动:对于可以容忍在同步进行时阻塞所有操作的部署
- 手动:对于无法承受暂停操作的部署
- 是的,我们需要它,就像我们今天一样:自动或使用 cinder-manage
- PostgreSQL 支持已从 devstack 中删除,时间为 2019 年
- #action: Rajat 去处理实现
强制卷取消管理
- 假设我们可以调用取消管理或删除来移除后端已删除资源的数据库条目。
- 目前它们调用驱动程序,这不是预期的行为。
- 存在一种担忧,如果我们使用强制取消管理,操作员可能会始终将其与取消管理命令一起使用,而没有首先尝试正常方式。
- 我们应该在 API 本身中执行强制取消管理,并且根本不要调用卷服务(也不要调用驱动程序)。
- c-vol 中的 volume_delete/unmanage 路径需要初始化驱动程序。
- 新标志 = 仅在 API 中执行此操作,不要触及卷服务。
- 我们不允许取消管理加密卷,因为我们无法(重新)管理它们,但我们将允许使用新标志取消管理加密卷。
- #行动:Eric 将撰写关于此的规范。
加密重新类型化
目前,将卷从加密类型重新类型化为非加密类型无法按预期工作。
- 加密卷会因 LUKS 标头而损失一定空间。
- 当前解决方案是使目标卷大 1 GB 以考虑标头。
- 首次实施目标:向 resize/migrate 添加增加大小的选项,以允许 unenc->enc 迁移。
- 我们将引入一个新标志,以便用户知道他们希望选择加入此功能,即为加密卷提供额外的 1 GB 空间。
- Gorka 认为这不“云原生”,因为它暴露了实现细节,而云应该隐藏这些细节。
- 我们可以将其作为初始实现,稍后通过“用户可见”与“实际”大小实现来改进它。
- 我们为此有一个 tempest 测试。
- #行动:重新提出规范,并且应该只关注迁移。
- #行动:在下一次 cinder 会议中提出此问题,如果有人愿意参与,新的贡献者应该能够实现此功能。
OSC + SDK 工作
cinderclient 和 SDK 之间存在差距。
- 该工作正在使用以下主题进行跟踪:
- OSC:https://review.opendev.org/q/topic:cinderclient-sdk-migration
- SDK:https://review.opendev.org/q/topic:cinder-sdk-gap
- 演示文稿:https://docs.google.com/presentation/d/1c2yAhnLkTrOp0H_v2fgLkfvFzOOWDae1Ekdf3Lsx648/edit#slide=id.p
- 跟踪文档:https://docs.google.com/document/d/1XUFsOnVBxo6sCvF9tSwPFfwMd0COEbeUF7yndRL92i4/edit
- Pete 发现了一个备份恢复与 cinderclient 操作不同的案例。
- #行动:Rajat 将跟进所有计划参与其中的人。
与 Manila 的跨项目合作
Etherpads
- https://etherpad.opendev.org/p/caracal-ptg-manila-planning
- https://etherpad.opendev.org/p/caracal-ptg-manila
改进通用驱动程序中的扩展卷操作
蓝图:https://blueprints.launchpad.net/manila/+spec/enhance-extend-volume-workflow
目前,manila 中的通用驱动程序会创建一个卷并将其用作共享。当计划扩展它时,它会分离卷,扩展然后重新连接它。
- Cinder 微版本 3.42 支持扩展正在使用的卷。
- manila 代码没有固定特定的 API 微版本,因此它将回退到 3.0 微版本。
- #行动:Rajat 如果有时间可以处理它,但如果有人自愿就更好了。
Cinder 中的多租户支持
这是先前 PTG 主题的延续,用于解答一些疑问。
- Manila 是否在其工作流程中创建了虚拟存储实例?
- 是的,本质上,在 DHSS=True 时,Manila 将管理存储虚拟机。
- DHSS=False 更类似于 cinder 使用后端配置和设置的方式。
- 与 neutron 的交互方式如何?
- 对于 Manila,在 DHSS=True 时,操作员可以定义网络,Manila 在创建共享服务器(存储 VM)时将在其中分配端口/IP。
Manila 中的 SRBAC 工作
已完成第一阶段。需要开始第二阶段。
Manila 客户端与 OSC SDK 的对等工作
已完成与 OSC 的对等。SDK 中仍然缺少支持,但目前不计划添加它,因为 Manila 已经具有广泛使用的 manilaclient 中的 SDK。
- Manila SDK 跟踪器
- Manila OSC 跟踪器
10 月 27 日星期五
录像
停滞的评审
- 通过优化数据库查询来加快 cinder-backup 启动时间
- https://review.opendev.org/c/openstack/cinder/+/657543
- 需要有人接管并解决评审意见。
- 处理清理不完整备份期间丢失的卷
- https://review.opendev.org/c/openstack/cinder/+/886584
- 只是一些异常处理,使系统更健壮。
- Ceph:添加仅保留每个备份的最后 n 个快照的选项
- 主题:https://review.opendev.org/q/topic:ceph_keep_snapshots
- 不在主存储上保留无限数量的 RBD 快照可以节省大量的(昂贵的)空间。
- 使卷 Glance 元数据批量更新幂等
- https://review.opendev.org/c/openstack/cinder/+/764045
- 修复在创建卷失败的情况下创建卷的场景。
- 在重新安排创建卷操作并且已经创建了元数据时。
- 在某些工作流程中,signature_verified 键被添加了两次。
- #行动:评审上述补丁。
SQLAlchemy 2.0
- 我们需要使更改生效,以声明 Cinder 对 sqlalchemy 2.0 的支持。
- 这是必要的,因为 UC 当前的约束将 sqlalchemy 限制在 < 2.0,我们需要解除它。
- 评审中有 10 个补丁。
- 主题:https://review.opendev.org/q/topic:sqlalchemy-20+project:openstack/cinder+is:open
- 前 5 个补丁对于完成 sqlalchemy 2.0 的工作至关重要。
- 需要优先处理,因为 Cinder 和 Manila 是仅剩的两个项目。
- #行动:优先评审前 5 个补丁。
Nova Cinder 跨项目(第 2 部分)
NFS 加密
这个想法是支持 NFS 驱动程序的加密。
- Nova 规范:https://review.opendev.org/c/openstack/nova-specs/+/883516
- Sofia 已经开始了这项工作,但不再在 Cinder 中工作。
- Nova 的担忧是关于升级场景,因此需要规范。
- 规范是在 nova 会议期间提出的,因为提出了仍然缺失在规范中的升级问题。
- 在升级期间,如果 attach/BFV 请求发送到旧的计算节点,应该在那种情况下怎么做?
- 我们需要处理 2 种情况:
- BFV:我们可以有一个特性,调度程序可以使用该特性来仅在支持该特性的计算节点上调度实例。
- 将卷附加到现有实例
- 像现在一样,失败附加
- 需要在附加卷之前从 cinder 获取传输协议。
- 也许我们可以使用当前的行为,并且仅当所有计算节点都升级后才标记为功能完成。
关于基于 NFS 的卷驱动程序中在线扩展方法的反馈
此功能支持附加 NFS 卷的扩展功能。
- Cinder-Spec:https://review.opendev.org/c/openstack/cinder-specs/+/896014
- Nova-Spec:https://review.opendev.org/c/openstack/nova-specs/+/895648
- 需要 tempest 测试,涵盖各种顺序的扩展+快照操作的组合。
- 目前需要评审,并且第一个依赖项是 Cinder。
- #行动:Cinder 团队评审更改。
无法对附加到已停止实例的 NFS 卷进行快照
- 目前,当 NFS 卷附加并且 VM 已停止时,快照 NFS 卷存在问题。
- 这是因为格式信息未在附件记录中正确更新,导致 VM 无法启动。
- 错误:https://bugs.launchpad.net/cinder/+bug/1989514
- 补丁:https://review.opendev.org/c/openstack/cinder/+/857528
- #行动:Cinder 团队评审补丁。