2. Longhorn 基础:架构、核心组件与数据/控制平面
Longhorn 是 Rancher 社区开源、现由 CNCF 托管的轻量级分布式块存储系统,专为 Kubernetes 设计。它利用每个工作节点上的本地磁盘构建一个统一的、高可用的持久化存储池,并通过 CSI(Container Storage Interface)驱动无缝接入 Kubernetes 的存储生态。理解 Longhorn 的架构和核心组件,是后续在多集群环境中集成 Istio 的基础。
2.1 整体架构概览
Longhorn 采用微服务架构,将存储控制逻辑与数据路径分离,形成清晰的控制平面与数据平面。其核心思想是:每个卷(Volume)都是一个分布式系统,由多个独立的微服务组件协同工作。
2.2 核心组件详解
Longhorn 的核心组件包括 Engine、Replica 和 Manager,它们分别承担数据读写、数据存储和系统管理的职责。此外,Instance Manager 作为 Engine 和 Replica 的运行时容器,负责管理它们的生命周期。
2.2.1 Longhorn Manager
Manager 是 Longhorn 的控制中枢,以 Kubernetes Deployment 形式运行。它通过监听 Kubernetes API 中的 CRD(Custom Resource Definition)资源来驱动整个系统的状态变化。
- API Server: 提供 RESTful API,供 Longhorn UI 和 kubectl 插件调用。
- 卷控制器: 负责卷的创建、删除、挂载、快照、备份等生命周期管理。
- 调度器: 根据节点资源、磁盘容量、故障域等策略,决定 Replica 的放置位置。
- 故障检测器: 监控 Engine 和 Replica 的健康状态,触发自动修复流程。
2.2.2 Longhorn Engine
Engine 是数据平面的核心,以 Instance Manager Pod 内的一个进程形式运行。每个卷都有一个对应的 Engine 实例,它负责将来自 Pod 的 iSCSI 请求转换为对多个 Replica 的读写操作。
- iSCSI Target: 对外暴露 iSCSI 块设备,供 Pod 中的 initiator 连接。
- 副本同步: 采用同步复制模式,将每次写入操作同时发送到所有健康的 Replica,确保数据一致性。
- 故障切换: 当某个 Replica 不可用时,Engine 自动将其标记为故障,并继续使用其他健康 Replica 提供服务。
- 数据重建: 当故障 Replica 恢复或新 Replica 加入时,Engine 自动触发增量重建,将缺失的数据同步过去。
2.2.3 Longhorn Replica
Replica 是实际存储数据的组件,每个 Replica 对应一个本地磁盘上的目录或块设备。一个卷通常配置 2-3 个 Replica,分布在不同的节点上以实现高可用。
- 本地存储: 将数据以文件形式存储在宿主机的指定磁盘路径下。
- 快照: 支持创建卷的快照,用于数据恢复或备份。
- 备份: 支持将快照备份到远程对象存储(如 S3、NFS)。
- 校验和: 定期对存储的数据进行校验和检查,确保数据完整性。
2.2.4 Instance Manager
Instance Manager 是 Engine 和 Replica 的运行时容器,以 DaemonSet 形式在每个节点上运行。它负责启动、监控和停止 Engine/Replica 进程,并提供资源隔离和健康检查。
2.3 核心组件对比
| 组件 | 部署形态 | 核心职责 | 关键特性 |
|---|---|---|---|
| Longhorn Manager | Deployment | 控制平面:API、调度、监控 | CRD 驱动、自动故障检测 |
| Longhorn Engine | Instance Manager 进程 | 数据平面:iSCSI 目标、副本同步 | 同步复制、自动故障切换 |
| Longhorn Replica | Instance Manager 进程 | 数据平面:本地存储、快照 | 增量重建、校验和检查 |
| Instance Manager | DaemonSet | 运行时容器:进程管理、资源隔离 | 健康检查、生命周期管理 |
| CSI Driver | DaemonSet | Kubernetes 存储接口 | 卷挂载/卸载、快照、扩容 |
2.4 数据平面与控制平面的交互
Longhorn 的控制平面和数据平面通过 Kubernetes API 和内部 gRPC 通信进行协作。典型的卷挂载流程如下:
- 用户请求: 用户通过 StorageClass 创建 PVC,Kubernetes 调度器将 Pod 调度到某个节点。
- CSI Driver 调用: CSI Driver 收到挂载请求,调用 Longhorn Manager 的 API。
- Manager 调度: Manager 根据调度策略,在目标节点上创建 Engine,并在其他节点上创建 Replica。
- Engine 启动: Instance Manager 在目标节点上启动 Engine 进程,Engine 连接到所有 Replica。
- 数据路径建立: Engine 对外暴露 iSCSI 目标,CSI Driver 将 iSCSI 设备挂载到 Pod 中。
- 数据读写: Pod 通过块设备进行读写,Engine 将请求同步复制到所有 Replica。
2.5 数据一致性模型
Longhorn 采用 同步复制 + 多数派写入 的模型来保证数据一致性。具体规则如下:
- 写入策略: 每次写入操作必须被所有健康的 Replica 确认后,Engine 才会向 Pod 返回写入成功。
- 读取策略: 读取操作直接从 Engine 的内存缓存或任意一个健康 Replica 读取,保证读取到最新数据。
- 故障处理: 当 Replica 数量少于配置的副本数时,Engine 仍然可以继续提供服务,但会触发自动重建流程。
- 重建机制: 新加入的 Replica 会从 Engine 或其他健康 Replica 进行增量同步,只同步缺失的数据块。
2.6 本章小结
Longhorn 通过将控制平面(Manager)与数据平面(Engine/Replica)分离,实现了高可用、可扩展的分布式块存储。核心组件各司其职:Manager 负责调度和监控,Engine 负责数据读写和同步,Replica 负责数据持久化。理解这些基础概念,是后续在多集群环境中部署 Longhorn 并与 Istio 集成的前提。