【Release】Longhorn v1.12.1 正式发布!

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 #12552CSI Volume Clone

注意: V2 快速克隆目前不支持 Volume 备份和恢复。该改进正在 Issue #13714 中跟进。

存储分片 (Storage Sharding,实验性)

Longhorn v1.12.1 引入了存储分片功能,作为基于 V2 Data Engine 构建的实验性数据保护和存储布局功能。分片不再在每个 Replica 上存储 Volume 的完整副本,而是使用纠删码(Erasure Coding)将写入的数据编码为数据块和校验块,并分布在多个 Node 上。这允许 Volume 增长超过单个磁盘或 Node 的容量,同时使用更少的磁盘空间来实现相同级别的容错。

由于此功能处于实验阶段,仅供评估和测试使用,不建议在生产环境中使用。

更多信息,请参阅 Issue #1061Sharding 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 PoliciesIssue #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 #13483Issue #13502

V2 Data Engine SPDK iobuf 池大小配置

Longhorn v1.12.1 允许调整 V2 Data Engine 使用的 SPDK iobuf 缓冲池。data-engine-iobuf-large-pool-sizedata-engine-iobuf-small-pool-size 设置分别配置大缓冲池和 8 KiB 小缓冲池。在小 I/O 大小的高队列深度工作负载下,增加小缓冲池可以缓解缓冲区耗尽。由于 iobuf 池只能在 SPDK target 启动时调整大小,更改其中任何一项设置都会重新创建没有运行实例的 V2 Instance Manager Pod。

更多信息,请参阅 Issue #13322Issue #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 #9205Issue #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 而非 StorageIP 13353 - @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