云原生存储高可用容器编排【免费下载链接】longhornCloud-Native distributed storage built on and for Kubernetes项目地址https://gitcode.com/gh_mirrors/lo/longhorn点击查看免费下载导读本文围绕 Longhorn 的 BackingImage 增强特性展开聚焦三项核心能力通过副本数HA避免 BackingImage 数据丢失、通过nodeSelector与diskSelector将 BackingImage 精准调度到指定节点与磁盘、以及通过驱逐Eviction机制在节点或磁盘下线前主动迁移 BackingImage。读者读完本文后将掌握如何在 Longhorn 中为 BackingImage 配置副本数量与调度约束、如何结合 Kubernetes 标签实施节点/磁盘定向存储、以及如何在节点排空drain前安全触发驱逐以保障数据可用性。该特性源自 Longhorn 社区增强提案 enhancements/20240426-backing-image-enhancement.md对应的功能设计目标源自 longhorn/longhorn#2856 与 longhorn/longhorn#6526此处仅作为背景说明不展开外部链接。特性总览BackingImage 是 Longhorn 中用于预置磁盘镜像如虚拟机镜像、操作系统镜像的机制Volume 创建时可直接以该镜像为模板无需重复下载。原实现中 BackingImage 仅有一个副本副本所在节点宕机或节点被排空时唯一的 BackingImage 副本会丢失用户需要重新准备镜像。本增强特性在 Longhorn 中引入三项能力高可用HA通过numOfCopies/minNumberOfCopies维护集群内 BackingImage 副本数量副本数不足时自动补足副本多余且长期未被使用时自动清理。节点/磁盘选择器nodeSelector / diskSelector将 BackingImage 副本精准调度到具备指定标签tag的节点与磁盘与 Volume Replica 的调度保持一致提升空间利用率。驱逐处理Eviction用户对节点或磁盘手动设置驱逐请求后Longhorn 将 BackingImage 副本迁移到其他节点或磁盘。以下各节分别深入这三项能力的设计、CRD 变化、控制器实现与测试方案。高可用HA维护 BackingImage 副本数设计目标用户可设置全局的高可用因子对所有 BackingImage 生效也可为单个 BackingImage 单独指定副本数。Longhorn 在集群内持续维护 BackingImage 的副本数量。当副本数超过因子、且多余副本一段时间内未被使用时Longhorn 自动删除多余的副本。CRD 变更在 BackingImage CRD 中新增minNumberOfCopies字段。从当前仓库的 CRD 定义deploy/longhorn.yaml可以看到 BackingImage 的spec结构# deploy/longhorn.yaml 中 BackingImage CRD 的 spec 片段 spec: properties: checksum: type: string dataEngine: default: v1 enum: - v1 - v2 diskFileSpecMap: additionalProperties: properties: dataEngine: enum: [v1, v2] evictionRequested: type: boolean diskSelector: items: {type: string} type: array minNumberOfCopies: type: integer nodeSelector: items: {type: string} type: array sourceType: enum: [download, upload, export-from-volume, restore, clone]可见minNumberOfCopies与nodeSelector、diskSelector、evictionRequested均已在 CRD 中落地disks字段被标注为 Deprecated已由diskFileSpecMap取代。BackingImage Controller 的副本维护逻辑当第一个 BackingImage 副本就绪后控制器开始维护集群中的副本数量。若副本数低于设定值控制器挑选一个合法的节点与磁盘每次增加一个副本直至副本数达到或超过设定值。若副本数高于设定值且多余副本一段时间内未被使用受Backing Image Cleanup Wait Interval控制Longhorn 删除这些未使用的副本。该清理逻辑在原提案中已有实现参考对应 longhorn-manager v1.6.1 的 node_controller.go#L1152 的backingImageCleanupWaitInterval设置项。相关全局设置在 Helm Chart 的 values.yaml 中BackingImage 相关的 StorageClass 设置如下backingImage: # -- 在 Longhorn StorageClass 中使用 backing image enable: false # -- 用于创建和恢复 Volume 的 backing image 名称 name: ~ # -- backing image 的数据源类型如 download dataSourceType: ~ # -- 数据源参数JSON 字符串形式的 map # 示例: {url:https://backing-image-example.s3-region.amazonaws.com/test-backing-image} dataSourceParameters: ~ # -- backing image 的预期 SHA-512 checksum expectedChecksum: ~清理间隔设置位于 values.yaml# -- 当磁盘上没有 replica 使用 backing image 文件时Longhorn 等待多少分钟后清理该文件 backingImageCleanupWaitInterval: ~ # -- 当所有镜像磁盘文件状态变为 failed 或 unknown 时Longhorn 等待多少秒后重新下载 backingImageRecoveryWaitInterval: ~nodeSelector 与 diskSelector定向调度 BackingImage设计目标用户创建 BackingImage 时可通过nodeSelector和diskSelector指定目标节点与磁盘。BackingImage 副本只放置在带有对应标签tag的节点和磁盘上。当节点或磁盘被禁用调度时BackingImage 副本无法被放置在该节点或磁盘上。Replica 无法被调度到无法存储对应 BackingImage 的节点和磁盘上。与 Volume Replica 调度的一致性原实现中Longhorn 将 BackingImage 副本随机放置在节点和磁盘上当某个 Replica 需要该 BackingImage 时Longhorn 必须把 BackingImage 复制到 Replica 所在的磁盘。引入选择器后只要 Replica 与 BackingImage 使用相同的nodeSelector和diskSelectorBackingImage 与 Replica 将存储在相同的节点和磁盘集合中从而避免跨磁盘复制显著提升空间利用效率。调度逻辑BackingImage Controller 选择节点/磁盘时遵循diskSelector与nodeSelector设置。Replica Scheduler 在评估节点候选与磁盘候选时会额外检查该节点/磁盘是否可用于 Replica 所使用的 BackingImage。若 BackingImage 无法存储在该节点或磁盘上则 Replica 也不会被调度到该节点。驱逐处理Eviction主动迁移 BackingImage设计目标当用户对节点或磁盘设置驱逐请求evictionRequested true时Longhorn 将 BackingImage 副本迁移到其他节点或磁盘。该能力仅在用户手动设置驱逐请求时生效节点 cordon 或 drain 时 Longhorn 不会自动驱逐 BackingImage与 Replica 的自动驱逐行为不同。原因是自动驱逐需要为 BackingImageManager 配置 PodDisruptionBudgetPDB会增加流程复杂度并引入卡住风险。因此用户应在 drain 节点前先手动设置驱逐请求。CRD 变更BackingImage Spec 由原来的Disks map[string]string扩展为Disks map[string]*BackingImageDiskFileSpec其中新增EvictionRequested字段// 变更前 type BackingImageSpec struct { Disks map[string]string json:disks Checksum string json:checksum SourceType BackingImageDataSourceType json:sourceType SourceParameters map[string]string json:sourceParameters } // 变更后 type BackingImageSpec struct { Disks map[string]*BackingImageDiskFileSpec json:disks Checksum string json:checksum SourceType BackingImageDataSourceType json:sourceType SourceParameters map[string]string json:sourceParameters } type BackingImageDiskFileSpec struct { EvictionRequested bool json:evictionRequested }在 deploy/longhorn.yaml 中diskFileSpecMap的 schema 已体现evictionRequested布尔字段节点 CRD 中同样包含节点级evictionRequesteddeploy/longhorn.yaml以及磁盘级evictionRequesteddeploy/longhorn.yaml。控制器实现Node Controller当节点或磁盘被设置为evictionRequested true时Node Controller 会将该节点上所有 BackingImage 副本的EvictionRequested更新为 true。BackingImage Controller核心方法为replenishBackingImageCopies()与cleanupEvictionRequestedBackingImageCopies()replenishBackingImageCopies()若nonFailedCopies MinNumberOfCopies检查是否需要为驱逐补充副本当NonEvictingCount MinNumberOfCopies时补充一个副本。若nonFailedCopies MinNumberOfCopies补充一个副本以满足MinNumberOfCopies要求。cleanupEvictionRequestedBackingImageCopies()若没有非驱逐的健康副本则不删除被驱逐的副本避免唯一副本被删除。否则删除被驱逐的副本。测试方案原提案给出了 5 组测试用例以下结合预期行为整理为可复现的验证清单HA 副本数维护创建minNumberOfCopies 2的 BackingImage → 创建后立即同步文件到另一个节点/磁盘 → 将Backing Image Cleanup Wait Interval更新为 1 分钟 → 将minNumberOfCopies更新为 1 → 多余的 BackingImage 副本被清理。nodeSelector/diskSelector 定向放置为 node1 设置nodeTag: [node1], diskTag: [disk1]→ 创建minNumberOfCopies 2、nodeSelector [node1]、diskSelector [disk1]的 BackingImage → 第一个副本落在 node1/disk1 → 第二个副本始终不出现日志显示unable to get a ready node disk。与 Replica 选择器不一致负向测试node1/disk1 设置nodeTag: [node1], diskTag: [disk1]node2/disk2 设置nodeTag: [node2], diskTag: [disk2]→ 创建minNumberOfCopies 1、nodeSelector [node1]、diskSelector [disk1]的 BackingImage → 创建numberOfReplicas 1、nodeSelector [node2]、diskSelector [disk2]的 Volume 并附加到 node2 → Volume 的Scheduled条件为false因为 Replica 无法被调度。驱逐 - 1创建只有 1 个副本的 BackingImage → 驱逐副本所在节点 → 先在另一个节点创建副本 → 被驱逐的副本被删除。驱逐 - 2设置minNumberOfCopies 1→ 创建 2 个副本的 BackingImage → 驱逐其中一个副本所在节点 → 被驱逐的副本被删除不补充新副本。驱逐 - 3负向测试设置nodeTag: [node1], diskTag: [disk1]→ 创建minNumberOfCopies 1、nodeSelector [node1]、diskSelector [disk1]的 BackingImage副本在 node1→ 驱逐 node1 → 由于它是唯一副本且受选择器限制无法复制到其他节点该副本不会被删除。升级策略原提案指出本特性的升级策略为None无需额外的数据迁移或版本升级步骤特性随 Longhorn Manager 升级自动生效。新增字段minNumberOfCopies、nodeSelector、diskSelector、diskFileSpecMap均由控制器以默认值/空值兼容旧对象不破坏既有 BackingImage。实践要点与注意事项驱逐与节点维护的配合Longhorn 不会在节点 cordon/drain 时自动驱逐 BackingImage因此节点维护前需先在 Longhorn UI 或 API 中对目标节点/磁盘设置evictionRequested等待 BackingImage 迁移完成后再执行 drain。选择器与副本数的相互约束当选择器限制可放置节点/磁盘集合小于副本数需求时如测试用例 2Longhorn 无法补足副本日志会出现unable to get a ready node disk此时需要放宽选择器或扩充符合条件的节点/磁盘集合。唯一副本保护驱逐逻辑保证不会删除最后一个健康的非驱逐副本测试用例 6避免因驱逐导致 BackingImage 数据彻底丢失。副本清理时机副本清理依赖backingImageCleanupWaitInterval且仅清理未被 Replica 使用的多余副本避免影响运行中的 Volume。延伸阅读增强提案原文enhancements/20240426-backing-image-enhancement.md相关增强提案V2 数据引擎下的 BackingImage 支持见 enhancements/20241203-v2-backing-image-support.md磁盘/节点驱逐机制的更早期设计见 enhancements/20200727-add-replica-eviction-support-for-disks-and-nodes.mdCRD 定义deploy/longhorn.yaml 与 chart/templates/crds.yamlHelm Chart 设置chart/values.yaml含backingImageCleanupWaitInterval、backingImageRecoveryWaitInterval等全局参数说明本文基于当前仓库中的增强提案文档、CRD 定义与 Helm Chart 配置编写提案中引用的 longhorn-manager v1.6.1 node_controller.go 行号属于提案撰写时的外部参考本仓库为纯文档/部署清单仓库不含 Go 源码实现相关控制器行为以提案描述与 Longhorn 官方行为为准。赞分享云原生存储高可用容器编排【免费下载链接】longhornCloud-Native distributed storage built on and for Kubernetes项目地址https://gitcode.com/gh_mirrors/lo/longhorn点击查看免费下载相关推荐Longhorn 副本驱逐Replica Eviction机制深度解析磁盘与节点级驱逐的设计、实现与运维实战Longhorn 副本驱逐Replica Eviction机制深度解析磁盘与节点级驱逐的设计、实现与运维实战 本篇技术指南围绕 Longhorn 增强提案云原生存储高可用容器编排Longhorn 磁盘级副本软反亲和Disk Anti-Affinity单节点多磁盘场景下的副本分散调度指南Longhorn 磁盘级副本软反亲和Disk Anti Affinity单节点多磁盘场景下的副本分散调度指南 导读 Longhorn 允许每个节点挂载多块云原生存储高可用容器编排如何构建智能票务自动化系统深度解析大麦抢票框架的技术哲学如何构建智能票务自动化系统深度解析大麦抢票框架的技术哲学 在当今数字化票务生态中效率已成为决定成败的关键因素。大麦智能票务自动化系统正是基于这一理念构建的技云原生存储高可用容器编排上一篇Citra模拟器终极指南5分钟在电脑畅玩任天堂3DS游戏下一篇Quasar CLI 工程quasar/app-viteTypeScript 支持完整指南从 JS 迁移、配置到类型增强创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
一文搞懂网站推广优帮云:备案不再一头雾水的实战指南 一文搞懂网站推广优帮云:备案不再一头雾水的实战指南 备案流程一头雾水?别急,今天咱们就掰开揉碎了, 一文搞懂 【网站推广优帮云】在域名与服务器运维中的真实角色。很多设计师转前端的朋友,刚接触独立站或企业官网时,最头疼的不是写代码,而是那个看… · 2026/9/27 9:35:16
建筑效果图素材网站被黑挂马?3步性能优化保平安 建筑效果图素材网站被黑挂马?3步性能优化保平安 网站突然打不开,浏览器弹窗提示“不安全”,或者打开后全是博彩广告,你第一反应是不是懵了?这种“网站被黑挂马”的突发状况,很多做建筑效果图素材站的老板都经历过。别慌,这通常不是玄学,而是服务器配… · 2026/9/27 9:34:57
淘客网站如何做推广源码下载 淘客网站推广难?这份保姆级建站教程救急指南 上周凌晨三点,服务器监控突然报警,网站页面被挂满了赌博广告和挖矿脚本。那一刻,我手心全是汗,脑子里一片空白。这就是很多站长遇到的噩梦: 网站被黑挂马不知道怎么办… · 2026/9/27 9:34:51
嵌入式驱动开发核心解析:从裸机寄存器到Linux设备树 都说嵌入式是个坑,可每年还是有一堆人往里头跳。我这几年一直在跟嵌入式驱动打交道,面试过不少应届生,也带过几个新人,发现大家对"驱动开发到底忙啥"这件事,普遍没搞清楚。有的是被网上那些"驱动开发月… · 2026/9/27 11:17:54
开网站程序别瞎写,这套保姆级建站教程让排名飙升 开网站程序别瞎写,这套保姆级建站教程让排名飙升 网站做好了没人访问,这是最让人头疼的事。代码写得再漂亮,搜索引擎看不见就是白搭。很多设计师转前端的朋友,技术底子不错,但一碰 SEO 就晕。别急,这篇保姆级建站教程专为你定制。… · 2026/9/27 11:17:54
2026最新乌克兰网站设计避坑指南:备案与选型全解析 2026最新乌克兰网站设计避坑指南:备案与选型全解析 做跨境建站,最怕的不是代码报错,而是政策合规的一头雾水。很多做乌克兰市场的站长,还没写完第一行HTML,就被复杂的备案流程和服务器合规搞得焦头烂额,完全不知道该怎么下手。这种“备案流程一… · 2026/9/27 11:17:48
网站代码是多少一文搞懂 网站代码是多少一文搞懂 域名服务器搞不懂?别慌,新手建站最头疼的就是这俩。今天用大白话,带你一文搞懂,从代码到底层逻辑,全讲透。… · 2026/9/27 11:17:41
ARM+FPGA交期52周?从选型到供应链的实战应对策略 做硬件的朋友应该都遇到过这种时刻:选型时看中一颗进口ARMFPGA,性能合适、外设齐全、功耗可控,价格也卡在预算线内,高高兴兴把方案定了,画板、调板、联调一路顺风顺水。等到了量产下单那一步,采购悠悠来一句… · 2026/9/27 11:17:29
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01