1. Longhorn 概述:核心概念与架构

Longhorn 是 Rancher 社区开源、现由 CNCF 托管的云原生分布式块存储系统,专为 Kubernetes 设计。它利用每个工作节点上的本地磁盘构建一个统一的、高可用的持久化存储池,并通过 CSI(Container Storage Interface)驱动为 Pod 提供动态卷供应。在变更门禁流水线中,Longhorn 承担着“存储底座”的角色——任何涉及卷配置、快照策略、备份目标或副本数调整的变更,都必须经过自动化门禁验证才能生效。

课程定位:本章为后续所有流水线集成与故障排查章节奠定基础。理解 Longhorn 的核心组件与数据流,是编写可靠门禁规则的前提。

1.1 核心特性一览

特性 说明 在变更门禁中的关注点
高可用(HA) 卷的每个数据块在多个节点上维护副本(默认 3 副本),单节点或单副本故障时自动切换,业务无感。 门禁需校验副本数 ≥ 2,确保变更期间不降级为单点。
增量快照 基于 CoW(Copy-on-Write)的秒级快照,仅记录数据变化块,支持链式快照树。 门禁需限制快照保留数量,防止快照链过长导致性能衰减。
备份与恢复 支持将快照或卷备份到 NFS、S3 兼容存储(MinIO、AWS S3 等),支持全量/增量备份。 门禁需验证备份目标可达性及备份频率是否符合 SLA。
动态卷供应 通过 StorageClass 自动创建 Longhorn 卷,支持卷扩容、卷克隆。 门禁需校验 StorageClass 参数(如 dataLocality、replicaCount)是否合规。
灾备与迁移 支持跨集群备份恢复、卷迁移(DR volume)。 门禁需在灾备切换场景中验证数据一致性。

1.2 架构组件详解

Longhorn 采用微服务 + 控制器模式,核心组件分为三层:控制面(Manager)、数据面(Engine & Replica)和插件层(CSI Driver、Backup Target)。

关键原则:Engine 是“前端”,负责处理 I/O 请求并分发到多个 Replica;Replica 是“后端”,负责实际数据落盘。Manager 负责编排和健康检查。

1.2.1 Engine(引擎)

  • 角色:每个卷对应一个 Engine 实例,运行在卷挂载节点上。
  • 职责:接收来自 CSI 驱动的块设备读写请求;将写操作同步复制到所有健康的 Replica;处理快照创建、回滚、备份等控制指令。
  • 高可用机制:当 Engine 所在节点故障时,Manager 会在另一健康节点上重建 Engine,并重新挂载卷。

1.2.2 Replica(副本)

  • 角色:每个卷的每个副本对应一个 Replica 实例,运行在任意工作节点上。
  • 职责:以文件形式存储卷数据块(默认路径 /var/lib/longhorn/replicas/);定期向 Engine 报告健康状态;参与重建(rebuilding)流程。
  • 数据一致性:Engine 采用 Raft 类协议确保写入多数副本后才返回成功,保证强一致性。

1.2.3 Manager(管理面)

  • 角色:以 DaemonSet 形式运行在每个节点上,是 Longhorn 的控制中枢。
  • 职责:监听 Kubernetes 资源(Volume、StorageClass、Node 等);调度 Engine 和 Replica 实例;处理卷的创建、删除、扩容、快照、备份等 API 请求;维护集群状态(如节点磁盘使用率、副本分布)。
  • 高可用:Manager 本身无状态,通过 Kubernetes 的 leader election 实现高可用。

1.3 架构关系图

下图展示了 Longhorn 在 Kubernetes 集群中的核心组件交互关系:

Longhorn 核心架构组件交互图 Kubernetes 集群 Longhorn Manager DaemonSet / Leader Election CSI Driver 卷挂载 / 动态供应 Engine I/O 分发 / 快照控制 Replica 组 Replica 1 (节点A) Replica 2 (节点B) Replica 3 (节点C) 数据块文件 Backup Target NFS / S3 (MinIO) 说明 • 写操作同步到多数副本 • 快照/备份由 Engine 触发 • Manager 监控所有组件

1.4 数据写入流程(简化)

理解数据写入路径有助于定位性能瓶颈和故障点:

  1. Pod 发起写请求 → 通过 CSI 驱动写入块设备(/dev/longhorn/<vol-name>)。
  2. Engine 接收 I/O → 将数据切分为 4MB 的块(chunk),计算校验和。
  3. 并行分发 → Engine 将写请求同时发送到所有健康的 Replica。
  4. Replica 落盘 → 每个 Replica 将数据写入本地文件系统(ext4/xfs),并返回确认。
  5. 多数派确认 → Engine 收到多数副本(如 3 副本中 2 个)的确认后,向 Pod 返回写成功。
门禁关注点:如果集群中只有 2 个节点,且副本数设置为 3,则卷将无法达到多数派,导致 I/O 挂起。门禁规则应强制要求 replicaCount ≤ 可用节点数。

1.5 组件对比总结

组件 部署方式 有无状态 故障影响范围 恢复方式
Manager DaemonSet 无状态 控制面不可用(卷 I/O 不受影响) K8s 自动重新调度
Engine 每个卷一个实例 有状态(内存中 I/O 队列) 单个卷 I/O 中断 Manager 重建 Engine
Replica 每个副本一个实例 有状态(磁盘数据) 副本数减少,可能降级 自动重建(从其他副本同步)
CSI Driver DaemonSet 无状态 节点上卷挂载失败 K8s 自动重新调度