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 集群中的核心组件交互关系:
1.4 数据写入流程(简化)
理解数据写入路径有助于定位性能瓶颈和故障点:
- Pod 发起写请求 → 通过 CSI 驱动写入块设备(
/dev/longhorn/<vol-name>)。 - Engine 接收 I/O → 将数据切分为 4MB 的块(chunk),计算校验和。
- 并行分发 → Engine 将写请求同时发送到所有健康的 Replica。
- Replica 落盘 → 每个 Replica 将数据写入本地文件系统(ext4/xfs),并返回确认。
- 多数派确认 → 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 自动重新调度 |