news 2026/10/3 12:34:59

【云原生】Oracle Linux 9.6 离线(Air-Gapped)环境下安装 Longhorn 及其底层依赖(iSCSI/NFS)完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【云原生】Oracle Linux 9.6 离线(Air-Gapped)环境下安装 Longhorn 及其底层依赖(iSCSI/NFS)完全指南

【云原生】Oracle Linux 9.6 离线(Air-Gapped)环境安装 Longhorn 及其底层依赖(iSCSI/NFS)避坑与实战指南

前言:在企业级生产环境中,Kubernetes 集群通常部署在完全隔离的离线(Air-Gapped)网络环境中。分布式云原生存储Longhorn作为 CNCF 的毕业项目,因其轻量和易用性备受青睐。但由于 Longhorn 强依赖于宿主机的iSCSI和NFS客户端,在离线环境下安装往往会因为“依赖地狱”导致部署失败。

本文将基于Oracle Linux 9.6(RHEL 9 系)系统,手把手教你如何安全、合规地离线下载所有开源免费的组件包,并分享如何精准避开引发系统崩溃的依赖冲突冲突陷阱,完成 Longhorn 存储系统的整套部署。


🛠️ 环境准备与组件说明

本次涉及的所有组件均为完全开源且商用免费的项目,无任何版权或授权限制:

  • Oracle Linux 9.6:基于 RHEL 1:1 编译的企业级系统,源码与补丁完全免费。
  • Longhorn:CNCF 毕业级开源存储项目(Apache 2.0 协议)。
  • iscsi-initiator-utils:Linux 原生 iSCSI 客户端。
  • nfs-utils:Linux 原生 NFS 客户端。

第一阶段:离线安装宿主机依赖(iSCSI & NFS)

Longhorn 的工作原理需要宿主机支持 iSCSI 协议(用于块设备挂载)和 NFS 协议(用于系统备份与部分组件调度)。我们必须在所有Worker 节点(建议 Master 也安装)上部署这些依赖。

1.1 在「有网环境」下载 RPM 及其完整依赖

找一台系统版本相同(Oracle Linux 9 / Rocky Linux 9 / RHEL 9)的联网电脑,利用dnf的本地下载功能分析并打包所有依赖:

# 创建临时目录mkdir-p/tmp/longhorn-deps&&cd/tmp/longhorn-deps# 仅下载不安装,自动解析并下载所有交叉依赖包sudodnf download--resolve--alldeps-yiscsi-initiator-utils nfs-utils# 打包文件夹tar-czvflonghorn-deps.tar.gz /tmp/longhorn-deps

1.2 🔴【核心避坑】离线本地安装与冲突解决

🔥 常见错误陷阱

在离线机器上,如果我们直接运行sudo dnf localinstall -y *.rpm --disablerepo=*,大概率会触发以下极其危险的报错:

Error: Problem: The operation would result in removing the following protected packages: systemd, systemd-udev
  • 原因分析:这是因为 DNF 试图用联网机下载的更新版本的底层系统包(如systemd-libs或pam)去覆盖离线机。这会触发系统的核心自我保护锁。千万不要听从提示添加--allowerasing,否则会导致系统核心组件被卸载、系统直接崩溃无法开机!
✅ 安全解决方案:绝对安全的「精准挑包强装法」

由于 Oracle Linux 9.6 自身已经自带了绝大部分底层基础库,我们不需要让 DNF 做全局复杂的依赖计算。直接使用rpm命令将最核心的 3 个存储业务包强制“塞”进系统,既高效又绝对安全,完全不会动到系统原有的核心引导。

在解压后的.rpm目录下执行:

# 1. 强制安装 iSCSI 核心包(这两个包互相有依赖,必须一起安装)sudorpm-ivhiscsi-initiator-utils-*.rpm iscsi-initiator-utils-iscsiuio-*.rpm--nodeps--force# 2. 强制安装 NFS 核心包sudorpm-ivhnfs-utils-*.rpm--nodeps--force

(注:过程中如果出现warning: ... NOKEY警告,是因为离线环境没有官方公钥证书,完全不影响正常使用。)


1.3 启动服务与状态完美验证

安装完成后,必须手动激活iscsid服务,并验证两项依赖是否完全就绪:

# 启动并设置开机自启sudosystemctlenable--nowiscsid.service
🛠️ 验证一:检查 iSCSI 服务状态

运行命令sudo systemctl status iscsid.service,当看到绿色高亮的active (running)以及Ready to process requests时,说明 iSCSI 完全成功:

● iscsid.service - Open-iSCSI Loaded: loaded (/usr/lib/systemd/system/iscsid.service; enabled; preset: disabled) Active: active (running) since Fri 2026-10-02 11:21:01 CST; 8s ago Status: "Ready to process requests" Main PID: 1127648 (iscsid) CGroup: /system.slice/iscsid.service └─1127648 /usr/sbin/iscsid -f
🛠️ 验证二:检查 NFS 客户端

运行命令showmount --version,系统应当能正确识别并输出版本号:

showmount for 2.5.4

至此,宿主机层面的底层存储环境已全部完美打通!


第二阶段:离线同步 Longhorn 镜像

接下来我们需要处理 Longhorn 自身的容器镜像。我们需要在联网机拉取后,导入到内部的私有镜像仓库(如 Harbor)。

2.1 获取 Longhorn 镜像列表

  1. 前往 Longhorn 官方 GitHub Releases 下载目标版本的longhorn.yaml(例如 v1.x.x)。
  2. 使用以下命令提取文件中所有用到的镜像:
    grep-oE"image: .*"longhorn.yaml|awk'{print $2}'|sort-u>images.txt

2.2 在「有网环境」批量拉取并打包

编写一个简单的 Shell 脚本download.sh:

#!/bin/bashIMAGES_FILE="images.txt"OUTPUT_TAR="longhorn-images.tar"echo"开始下载 Longhorn 镜像..."whileIFS=read-rimage;doecho"Pulling:$image"dockerpull"$image"done<"$IMAGES_FILE"echo"正在打包镜像为 tar 包..."dockersave-o"$OUTPUT_TAR"$(cat"$IMAGES_FILE")echo"打包完成:$OUTPUT_TAR"

2.3 在「离线环境」推送至私有仓库

将打包好的longhorn-images.tar传到离线环境的私有镜像仓库节点,执行导入与推送脚本push.sh(记得修改为你自己的私有仓库地址):

#!/bin/bashPRIVATE_REGISTRY="://yourdomain.com"# 替换为你的私有仓库地址IMAGES_FILE="images.txt"echo"正在加载本地镜像..."dockerload-ilonghorn-images.tarecho"开始推送镜像至私有仓库..."whileIFS=read-rimage;do# 提取镜像名和标签,例如 longhornio/longhorn-manager:v1.5.1 -> longhorn-manager:v1.5.1IMAGE_NAME=$(echo"$image"|awk-F'/''{print $NF}')NEW_IMAGE="${PRIVATE_REGISTRY}/${IMAGE_NAME}"echo"Tagging$image->$NEW_IMAGE"dockertag"$image""$NEW_IMAGE"dockerpush"$NEW_IMAGE"done<"$IMAGES_FILE"

第三阶段:修改配置并最终部署 Longhorn

配置与镜像全部就绪后,我们只需要将官方清单中的镜像地址替换为内部私有仓库的地址。

3.1 替换 YAML 中的镜像地址

如果使用单文件部署,直接利用sed批量替换:

# 将默认的 longhornio/ 替换为你的内部私有仓库路径sed-i's|image: longhornio/|image: ://yourdomain.com/|g'longhorn.yaml

3.2 如果使用 Helm 部署(推荐)

若使用 Helm,可以直接下载官方的 Chart 压缩包,解压后修改values.yaml中的registryUrl:

image:longhorn:manager:repository:://yourdomain.com/longhorn-managerengine:repository:://yourdomain.com/longhorn-engine

3.3 执行部署与检查

# YAML 部署kubectl apply-flonghorn.yaml# 检查部署状态kubectl-nlonghorn-system get pod-w

当所有组件的 Pod 状态均变为Running,并且longhorn-ui可以正常打开时,即宣告离线安装圆满成功!


💡 总结与排错心得

  1. 多节点批量处理:如果集群节点较多,建议将第一阶段的 RPM 包精准安装命令通过分发工具(如 Ansible)在所有 Worker 节点批量执行。
  2. 安全第一:离线环境面对依赖冲突,切勿盲目使用dnf --allowerasing。优先选择用rpm --nodeps --force隔离基础系统组件,只针对业务包进行精准覆盖,是保证生产环境系统稳定的关键。

如果你在 Oracle Linux 9.6 离线安装过程中遇到了其他奇葩的错误提示,欢迎在评论区留言,我们一起交流闭坑!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 12:34:20

从HDC看开发者新范式:AI、鸿蒙与云计算的端云协同

如果你最近关注开发者圈&#xff0c;大概率会看到不少关于华为开发者大会&#xff08;HDC&#xff09;的消息。我个人读完整体信号后的判断是&#xff1a;别急着把它当成一场新品发布会来追&#xff0c;真正值得琢磨的&#xff0c;是这次大会把AI、鸿蒙生态、云计算三件事放在同…

作者头像 李华
网站建设 2026/10/3 12:34:03

工业级配电开关控制设备核心参数体系与选型逻辑深度解析

1. 工业级配电开关控制设备的核心参数体系拆解工业级配电开关控制设备&#xff0c;说白了就是那些在工厂车间、变电站、大型商业综合体配电房里天天干活、一年到头不能停的开关电器。它跟家里墙上那个五孔插座旁边的空气开关完全不是一个量级的东西。家用开关可能几年都不跳一次…

作者头像 李华
网站建设 2026/10/3 12:33:52

ARMxy模块化工业控制器:替代PLC+网关+工控机的储能与自动化方案

1. 从一台设备要干三台活说起&#xff1a;ARMxy 模块化工业控制器的核心逻辑第一次接触 ARMxy 这类模块化工业控制器是在一个储能柜项目上。当时柜内空间已经非常紧张&#xff0c;电芯、BMU、高压箱、消防、空调全塞在一起&#xff0c;甲方还要求把本地控制、协议转换、数据上云…

作者头像 李华