Longhorn v1.12.1 发行说明
Longhorn v1.12.1 引入了 V2 Data Engine 快速 Volume 克隆和存储分片(Storage Sharding,实验性功能),并包含了一些重要的改进和 Bug 修复,旨在增强系统质量、弹性、稳定性和安全性。
我们欢迎您的反馈和贡献,以帮助我们持续改进 Longhorn。
有关 Longhorn 版本的术语和上下文,请参阅 Releases。
重大变更
废弃旧版 V2 Linked Clone Volumes
在 v1.12.0 或更早版本中创建的 V2 linked-clone Volume 自 v1.12.1 起被标记为旧版(Legacy)且已废弃。在 Issue #12552 中引入的新 Linked-clone 架构与旧版设计不兼容。
升级到 v1.12.1 后,旧版 linked-clone Volume 除卸载(Detachment)和删除外,无法进行其他操作。
若要替换,请从支持旧版 Volume 的相同源 Volume 创建新的 linked-clone Volume。只要旧版 Volume 存在,其源 Volume 就保证仍然存在,因此您可以直接创建替换用的 linked clone;无需进行数据复制。
更多信息,请参阅 Issue #12552。
功能亮点
快速 Volume 克隆 (Fast Volume Cloning)
Longhorn v1.12.1 增强了 V2 Data Engine 的快速 Volume 克隆功能。linked-clone Volume 与其源共享数据块,而不是复制数据。在新的架构中,源 Replica 可以与多个 linked-clone Volume 共享其数据块,并且可以并行创建多个克隆 Replica。
Linked-clone Volume 现在支持常规 Volume 可用的绝大多数操作,包括 Snapshot、扩容(Expansion)、Replica 重建,以及用作嵌套 linked clone 的源。
更多信息,请参阅 Issue #12552 和 CSI Volume Clone。
注意: V2 快速克隆目前不支持 Volume 备份和恢复。该改进正在 Issue #13714 中跟进。
存储分片 (Storage Sharding,实验性)
Longhorn v1.12.1 引入了存储分片功能,作为基于 V2 Data Engine 构建的实验性数据保护和存储布局功能。分片不再在每个 Replica 上存储 Volume 的完整副本,而是使用纠删码(Erasure Coding)将写入的数据编码为数据块和校验块,并分布在多个 Node 上。这允许 Volume 增长超过单个磁盘或 Node 的容量,同时使用更少的磁盘空间来实现相同级别的容错。
由于此功能处于实验阶段,仅供评估和测试使用,不建议在生产环境中使用。
更多信息,请参阅 Issue #1061 和 Sharding with Erasure Coding。
重要改进和修复
此版本包含几项重要改进和关键的稳定性修复。
内部网络策略 (Internal Network Policies)
Longhorn v1.12.1 默认对内部组件端点和 RPC 启用 Ingress NetworkPolicy 资源,通过限制对 Longhorn 内部服务(包括用于 Engine 控制的 instance-manager gRPC 端点)的访问来提高安全性。这些策略仅在集群中存在 NetworkPolicy 提供者时生效。
Longhorn 已通过以下 Kubernetes 发行版和 CNI 插件组合验证了内部网络策略。请参阅 CNI Plugin Compatibility 表以了解经过验证的组合。最低要求的 Kubernetes 版本为 v1.25。
更多信息和故障排除指南,请参阅 Internal Network Policies 和 Issue #13438。
Instance Manager gRPC mTLS 覆盖范围
在之前的版本中,当配置了 longhorn-grpc-tls Secret 时,instance-manager gRPC 端点的双向 TLS (mTLS) 仅覆盖实例服务和代理服务。其他服务(包括磁盘服务和 SPDK 服务)仍接受明文连接。
Longhorn v1.12.1 将 mTLS 扩展到所有剩余的 instance-manager gRPC 服务,因此在配置 longhorn-grpc-tls Secret 时,每个 gRPC 端口现在都需要有效的客户端证书。
更多信息,请参阅 Issue #7787。
使用 Kubernetes CPU Manager 进行 CPU 核心分配
Longhorn v1.12.1 能够通过 Kubernetes CPU Manager,利用 data-engine-number-of-cpu-cores 设置,为每个 V2 Instance Manager Pod 中运行的 SPDK target daemon 分配专属 CPU 核心。
该设置仅在所有 Worker Node 上的 kubelet CPU Manager 策略设置为 static 时才能应用;否则,更新将被拒绝。当值为正数时,它具有优先权,且 data-engine-cpu-mask 将被忽略。
更多信息,请参阅 Issue #13248。
主机 CPU 隔离 (Host CPU Isolation)
data-engine-cpu-isolation-enabled 设置现在还会配置主机网络接收数据包控制(Receive Packet Steering, RPS),以使 RX softirq 处理避开 SPDK target daemon 使用的 CPU 核心,此外还包括硬件 IRQ 和未绑定的内核工作队列线程(kernel workqueue workers)。如果不进行此配置,内核可能会将进入的网络数据包分配给 SPDK reactor 核心,产生的 softirq 工作会与 reactor 的忙轮询循环(busy-poll loop)竞争,从而在网络负载下降低 Volume I/O 性能。
更多信息,请参阅 Issue #13483 和 Issue #13502。
V2 Data Engine SPDK iobuf 池大小配置
Longhorn v1.12.1 允许调整 V2 Data Engine 使用的 SPDK iobuf 缓冲池。data-engine-iobuf-large-pool-size 和 data-engine-iobuf-small-pool-size 设置分别配置大缓冲池和 8 KiB 小缓冲池。在小 I/O 大小的高队列深度工作负载下,增加小缓冲池可以缓解缓冲区耗尽。由于 iobuf 池只能在 SPDK target 启动时调整大小,更改其中任何一项设置都会重新创建没有运行实例的 V2 Instance Manager Pod。
更多信息,请参阅 Issue #13322 和 Issue #13674。
加密 Volume 大小修正
Longhorn 为加密 Volume 使用的 LUKS2 元数据保留了额外的 16 MiB 原始容量,从而允许映射设备暴露工作负载请求的全部容量。此前,元数据是从可用容量中扣除的,因此请求的 1 GiB 加密 Volume 仅暴露了 1008 MiB。这种差异可能会导致诸如在同等大小的非加密和加密 Volume 之间进行块级复制等操作失败。
- V1 Data Engine:此修正已在 Longhorn v1.12.0 中引入。使用 v1.11.x 或更早版本创建的现有加密 V1 Volume 在将其 Engine 镜像升级到 v1.12 或更高版本时,会自动获得额外容量。加密的可迁移 V1 Volume 在升级到相应版本(>= v1.12.0)之前无法进行热迁移。
- V2 Data Engine:Longhorn v1.12.1 将此修正应用于新创建的加密 V2 Volume。
注意: 在 v1.12.1 之前创建的加密 V2 Volume,以及从这些 Volume 的备份中恢复的 Volume,不会获得额外的 16 MiB 原始容量,并继续暴露比请求少 16 MiB 的容量。现有数据将得到保留。
更多信息,请参阅 Issue #9205 和 Issue #13163。
安装
[!IMPORTANT]
在安装 Longhorn v1.12.1 之前,请确保您的集群运行的是 Kubernetes v1.25 或更高版本。
您可以使用各种工具安装 Longhorn,包括 Rancher、Kubectl 和 Helm。有关安装方法和要求的更多信息,请参阅 Longhorn 文档中的 快速安装。
升级
[!IMPORTANT]
在升级到 Longhorn v1.12.1 之前,请确保您的集群运行的是 Kubernetes v1.25 或更高版本。
Longhorn 仅允许从受支持的版本进行升级。有关升级路径和程序的更多信息,请参阅 Longhorn 文档中的 升级。
发布后已知问题
有关此版本发布后确定的问题信息,请参阅 Release-Known-Issues。
此版本中解决的问题
亮点
- [BACKPORT][v1.12.1][UI][FEATURE] V2 Data Engine 快速克隆 13672 - @shuo-wu @roger-ryao
- [BACKPORT][v1.12.1][FEATURE] V2 Data Engine 分片 - 实验性 13176 - @c3y1huang @chriscchien
- [BACKPORT][v1.12.1][FEATURE] V2 Data Engine 快速克隆 13174 - @shuo-wu @roger-ryao
功能
- [BACKPORT][v1.12.1][FEATURE] 支持 Kubernetes CPU Manager 进行 Longhorn V2 instance-manager SPDK CPU 分配 13320 - @yangchiu @mantissahz @Copilot
改进
- [BACKPORT][v1.12.1][IMPROVEMENT] 允许配置 SPDK iobuf 小池大小 13675 - @yangchiu @hookak
- [BACKPORT][v1.12.1][IMPROVEMENT] go-common-libs: 当命令执行超时时杀死子进程 13621 - @hookak
- [BACKPORT][v1.12.1][IMPROVEMENT] 始终为内部通信设置 NetworkPolicy 13439 - @COLDTURNIP @roger-ryao
- [BACKPORT][v1.12.1][IMPROVEMENT] 使主机 RPS 避开 SPDK reactor 核心 13502 - @bachmanity1 @roger-ryao
- [BACKPORT][v1.12.1][IMPROVEMENT] updateBackupCompressionMethod 即使在方法未更改时也可能写入 Volume 13480 - @yangchiu
- [BACKPORT][v1.12.1][IMPROVEMENT] 添加指标以收集有关 V2 data engine 使用情况的信息 13262 - @derekbit @chriscchien
- [BACKPORT][v1.12.1][IMPROVEMENT] 提高 Volume 挂载失败的错误透明度 13431 - @derekbit @chriscchien
- [BACKPORT][v1.12.1][IMPROVEMENT] 允许配置 SPDK iobuf 大池大小 13415 - @chriscchien @bachmanity1
- [BACKPORT][v1.12.1][IMPROVEMENT] 迁移期间删除 Replica 时 V2 Volume 写入 I/O 停顿(~10s) 13310 - @hookak @chriscchien
- [BACKPORT][v1.12.1][IMPROVEMENT] 为 instance manager 中剩余的 gRPC 服务支持 mTLS 加密通信 13299 - @COLDTURNIP @yangchiu
- [BACKPORT][v1.12.1][IMPROVEMENT] 添加指标以收集有关 LONGHORN_DISTRO 的信息 13253 - @derekbit @chriscchien
Bug 修复
- [BACKPORT][v1.12.1][BUG] 主机操作系统 nvmf-autoconnect 将内核发起程序(kernel initiators)连接到 v2 replica 子系统,导致 Volume 挂载/卸载停顿数分钟 13660 - @hookak @chriscchien
- [BACKPORT][v1.12.1][BUG] Longhorn Helm Chart NetworkPolicies 未能适配新的 RKE2 “rke2-traefik” Ingress 控制器 13665 - @COLDTURNIP @roger-ryao
- [BACKPORT][v1.12.1][BUG] Longhorn 在克隆期间可能会尝试将 Volume 挂载到没有有效 IM Pod 的 Node 上 13640 - @yangchiu @shuo-wu
- [BACKPORT][v1.12.1][BUG] 测试用例
test_volume_scheduling_failure在 v2 Volume 上失败 13656 - @yangchiu @c3y1huang - [BACKPORT][v1.12.1][BUG] 由于备份状态中的 Replica 地址为空,
Backup Listing With More Than 1000 Backups在 v2 Volume 上失败 13612 - @COLDTURNIP @chriscchien - [BACKPORT][v1.12.1][BUG] GUI 中网页链接错误 13539 - @yangchiu @sushant-suse
- [BACKPORT][v1.12.1][BUG] 加密 V2 Volume 大小比声称的大小短 16MB 13175 - @mantissahz @roger-ryao
- [BACKPORT][v1.12.1][BUG] CSI Pod 不遵守反亲和性(anti-affinity)预设更新 13548 - @chriscchien @carterli0407-cell
- [BACKPORT][v1.12.1][BUG] 无法添加带有 virtio-scsi BDF 路径的 v2 块磁盘 13475 - @chriscchien @carterli0407-cell
- [BACKPORT][v1.12.1][BUG] V2 加密 Volume 在扩容操作后一直在 Attaching 和 Detaching 状态之间切换 13562 - @mantissahz @roger-ryao
- [BACKPORT][v1.12.1][BUG] GCS 备份目标:大型 Volume 的备份在最终的 .cfg PUT 时失败,显示 SignatureDoesNotMatch(v1.12.0 中 #12676 的残留问题) 13574 - @derekbit @chriscchien
- [BACKPORT][v1.12.1][BUG] 如果之前的备份已损坏,则无法从全量备份中恢复 Volume 13538 - @yangchiu @derekbit
- [BACKPORT][v1.12.1][BUG] 测试用例
Recurring Job Pod Should Not Crash失败 13568 - @yangchiu @c3y1huang - [BACKPORT][v1.12.1][BUG] Longhorn 1.12.0: OCI S3 存储桶不支持 AWS 分块编码 13478 - @derekbit @mantissahz @roger-ryao
- [BACKPORT][v1.12.1][BUG] longhorn-uninstall 任务中的错误日志 13549 - @yangchiu @c3y1huang
- [BACKPORT][v1.12.1][BUG] V2 Data Engine: UBLK 在 Linux 内核 6.17.0 上失败并显示 EINVAL 13274 - @chriscchien @carterli0407-cell
- [BACKPORT][v1.12.1][BUG] 在 Harvester 中启用 LH V2 后内核工作队列锁定和 RKE2 服务不稳定 13495 - @derekbit @chriscchien
- [BACKPORT][v1.12.1][BUG] V2 扩容可能报告成功,而 Engine 仍保持旧大小 13380 - @davidcheng0922 @chriscchien
- [BACKPORT][v1.12.1][BUG] 在内核 >= 6.12 上从未检测到 FilesystemReadOnly —— ext4 报告 emergency_ro 而非 ro;只读自动重新挂载静默失效 13482 - @yangchiu
- [BACKPORT][v1.12.1][BUG] csi.ReplicaCount Helm 值在现有的 csi- Deployment 上静默失效(仅在首次创建时应用) 13465 - @roger-ryao
- [BACKPORT][v1.12.1][BUG] v2 Volume 在自动重新挂载后可能再次崩溃 13337 - @shuo-wu @roger-ryao
- [BACKPORT][v1.12.1][BUG] 启用存储网络时无法挂载 V2 Volume 13490 - @c3y1huang
- [BACKPORT][v1.12.1][BUG] v2 Volume 重复的 Replica 复用失败 13336 - @shuo-wu @chriscchien
- [BACKPORT][v1.12.1][BUG] V2 加密 Volume 恢复失败 13365 - @mantissahz @roger-ryao
- [BACKPORT][v1.12.1][BUG] V2 备份/Snapshot 可能会留下 NVMe/TCP 前端或 dm 设备残留,导致挂载 Volume 上的 Pod 出现 EIO 13332 - @davidcheng0922 @chriscchien
- [BACKPORT][v1.12.1][BUG] (chart) 使用 Gateway API 时 ArgoCD OutOfSync 13446 - @yangchiu
- [BACKPORT][v1.12.1][BUG] 如果目标 Node 仍处于就绪转换中,迁移 Engine 可能会意外被删除 13367 - @COLDTURNIP @yangchiu
- [BACKPORT][v1.12.1][BUG] 定期 Trim 任务因死锁失败 13425 - @c3y1huang @roger-ryao
- [BACKPORT][v1.12.1][BUG] Volume 扩容卡住 13368 - @shuo-wu @chriscchien
- [BACKPORT][v1.12.1][BUG] iscsid 重启后 PVC 调整大小失败 13412 - @yangchiu @shuo-wu
- [BACKPORT][v1.12.1][BUG] 扩容 Volume 失败 13384 - @chriscchien
- [BACKPORT][v1.12.1][BUG] 测试用例
test_rwx_delete_share_manager_pod失败,因为在共享管理器 Pod 被删除并重启后无法找到导出的 Volume 13226 - @davidcheng0922 @roger-ryao - [BACKPORT][v1.12.1][BUG] 系统备份 RecurringJob 保留策略修剪了最新的 CR —— 按 Status.CreatedAt 排序(Error/竞态 CR 为零) 13209 - @roger-ryao
- [BACKPORT][v1.12.1][BUG] CSI 组件在升级期间可能有 0 个运行中的 Replica 13348 - @yangchiu @carterli0407-cell
- [BACKPORT][v1.12.1][BUG] Node 更新强制完整重建 13357 - @mantissahz
- [BACKPORT][v1.12.1][BUG] 为 v2 Volume 创建备份可能会失败 13191 - @mantissahz
- [BACKPORT][v1.12.1][BUG] 将备份上传到 S3 存储(NetApp 设备)时失败 13297 - @mantissahz
- [BACKPORT][v1.12.1][BUG] chart/values.yaml 中缺少 SPDK 中断模式值 13269 - @yangchiu
弹性
- [BACKPORT][v1.12.1][BUG] 瞬时 SPDK lvol 元数据故障可能导致健康的 v2 replica 永久故障 13542 - @roger-ryao
其他
- [BACKPORT][v1.12.1][DOC] NetworkPolicy 设置指南 13622 - @COLDTURNIP @roger-ryao
- [BACKPORT][v1.12.1][DOC] Chart values.yaml 仍将 Data Engine V2 称为实验性功能 13615 - @sushant-suse
- [BACKPORT][v1.12.1][DOC] 更新最低 Kubernetes 版本要求至 v1.34。 13577 - @derekbit @roger-ryao
- [BACKPORT][v1.12.1][BUG] 启用存储网络后 v2 Volume 卡在
attaching状态,因为EngineFrontend目标使用的是 Engine Pod IP 而非StorageIP13353 - @yangchiu @c3y1huang
贡献者
- @COLDTURNIP
- @bachmanity1
- @c3y1huang
- @carterli0407-cell
- @chriscchien
- @davidcheng0922
- @derekbit
- @hookak
- @innobead
- @mantissahz
- @roger-ryao
- @shuo-wu
- @sushant-suse
- @yangchiu
- @rebeccazzzz
- @forbesguthrie
- @asettle
原文发布地址: longhorn/longhorn v1.12.1