在 Linux 上挂载 MinIO——用 NetDrive 在 Ubuntu 上使用自托管 S3 存储

阅读时间 7 分钟 provider-guide minio linux
Kai
KaiJunior Engineer
使用 NetDrive 的 Ubuntu 实验版本,将自托管的 MinIO 存储桶挂载为 Linux 挂载点——涵盖端点设置、路径样式访问和验证步骤。

一个构建团队在一排 Ubuntu 服务器上运行着自己的 MinIO 集群,而不是花钱购买托管对象存储——Docker 分层缓存、每晚的测试固件,以及几 TB 从不需要离开办公网络的构建产物。CI 运行器早已用普通的 shell 命令读写本地路径,仅仅为了访问三排机架之外的一个存储桶,就要围绕 MinIO 的 SDK 重写这一切,感觉像是在解决一个根本不需要解决的问题。NetDrive 的 Linux 版本转而将该存储桶挂载为一个普通路径,这样现有脚本无需改动即可继续工作。

NetDrive drive manager showing Google Drive, S3 and pCloud mounted as drive lettersMounted clouds appearing as native drives in Windows File Explorer

在 Ubuntu 上挂载 MinIO

NetDrive 让 Google Drive、OneDrive、S3、SFTP、WebDAV 等在 Windows 和 macOS 上显示为本地驱动器 — 无需同步,无需完整下载。

  • S3 兼容连接——适用于任何自托管的 MinIO 端点
  • 可在 Ubuntu 16.04 及更高版本上运行
  • 现有 shell 脚本通过普通挂载点读写
WindowsmacOS
下载适用于 Linux 的 NetDrive →

免费试用。提供终身与订阅方案。

为什么挂载点胜过针对 MinIO API 编写脚本

直接与 MinIO 通信意味着要引入 mc 客户端或 S3 SDK,处理访问密钥轮换,并为不同任务所用的各种语言编写重试逻辑。这些都不算难,但这是把基础设施工作硬塞进一个本质上只是”读这个文件、写那个文件”的任务里。挂载存储桶彻底去掉了这一层——tarcprsync,以及任何已经知道如何操作本地路径的工具,都能以同样的方式操作挂载点。

自 3.15.450 版本(2021-11-08)起,NetDrive 就已将 MinIO 视为受良好支持的 S3 兼容连接,同一版本还在 Amazon S3 之外加入了通用的 S3 兼容支持。而在 Linux 上,这种连接类型依托的是 NetDrive 的实验性 Ubuntu 版本,而非经过更充分测试的 Windows 和 macOS 版本——这一点值得事先了解,因为 Linux 在 NetDrive 自己的对比页面上就标注着”实验性”。

NetDrive 将自托管对象存储桶挂载为本地 Linux 挂载点

开始之前需要准备什么

  • MinIO 端点 URL——如果是本地网络上的一台机器,类似 http://minio.internal:9000 这样的地址;如果集群位于反向代理之后,则使用 HTTPS URL。MinIO 的 API 默认监听 9000 端口;Web 控制台运行在另一个端口上,NetDrive 并不与之通信。
  • Access Key 和 Secret Key——一个限定作用域到 NetDrive 所需存储桶的服务账户,可从 MinIO 控制台的 Identity → Service Accounts 创建,或通过 mc admin user svcacct add 创建。长期运行的场景应避免使用根凭据。
  • 存储桶名称——NetDrive 以存储桶为单位建立连接,因此需要多个存储桶的服务器,每个都要单独建立一个 NetDrive 连接。
  • Ubuntu 16.04 或更高版本,并且机器防火墙上需放行通向 MinIO 端点所用端口的出站访问。

在 Ubuntu 上安装 NetDrive

NetDrive for Linux 并未收录在 Ubuntu 的默认软件源中,因此安装流程走的是 GitHub 而非 apt:

  1. 前往 github.com/NetDrive/installer,下载与你的 Ubuntu 版本匹配的发行版。
  2. 安装前先查看该发行版的发布说明——需要先加载一个驱动组件,否则连接无法挂载。
  3. 安装该软件包,然后启动一次 NetDrive 以加载驱动。根据机器的配置方式,此步骤可能会提示输入 sudo

分步操作:连接一个 MinIO 存储桶

  1. 打开 NetDrive 的 Drive Manager,点击 + Add Drive
  2. 从提供商列表中选择 Amazon S3——MinIO 使用的是 S3 API,因此这是 NetDrive 用于连接 MinIO 及其他 S3 兼容存储的入口。

NetDrive Drive Manager 显示多个云连接,包括 S3 兼容存储

  1. 输入之前创建的服务账户的 Access Key ID 和 Secret Access Key
  2. 将 Region 设置为任意非空值,例如 us-east-1——MinIO 会忽略这个字段,但它不能留空。
  3. 输入 Endpoint——即 MinIO 的 API URL,例如 http://minio.internal:9000
  4. 输入要挂载的 Bucket 名称。
  5. 启用 Path style(有时标注为 Force path style)。自托管的 MinIO 通常没有为虚拟主机风格的存储桶 URL 配置 DNS 记录,因此路径样式寻址——即存储桶以路径段的形式出现——是开箱即用的设置。
  6. 设置一个挂载点,例如 /mnt/minio-artifacts,然后点击 Connect

在 CI 任务依赖挂载点之前先验证它

在让无人值守的任务指向挂载点之前,先确认挂载确实生效了:

# Confirm the mount is listed
mount | grep minio-artifacts

# Or just list it
ls /mnt/minio-artifacts

确认某个已连接驱动器在设置后成功挂载

如果目录显示为空,或挂载始终没有出现,先检查机器防火墙是否放行了通向 MinIO 端点所用端口的出站流量,再去怀疑访问密钥是否有误——在被严格锁定的构建服务器上,端口被阻塞比凭据错误更常见。

排查连接失败问题时检查网络端口是否可达

在 Linux 版本上需要留意的事项

  • 发布节奏独立。 为 Windows 或 macOS 发布的修复,不会自动在同一周内落地到 Linux 版本。
  • 没有 apt 集成。 更新来自 GitHub 发行版,而非包管理器,因此跟踪新版本需要手动操作。
  • Windows 和 macOS 得到了更深入的测试。 CI 运行器或从 MinIO 读取数据的夜间任务,是 Linux 版本一个合理的应用场景;在将其置于无人值守的生产流水线之前,请充分测试。

小结

在 Ubuntu 上挂载自托管的 MinIO 存储桶,能让构建服务器获得与 NetDrive 在 Windows 和 macOS 上相同的驱动器式访问方式,而无需围绕 S3 SDK 重写代码。关于同一提供商在测试更充分的平台上的使用方法,参见 在 Windows 上挂载 MinIO在 macOS 上挂载 MinIO;关于更广泛的 Linux 使用场景,参见 Ubuntu Linux 上的 NetDrive;关于围绕 S3 兼容存储构建的 CI 场景,参见 DevOps:使用 NetDrive 管理 S3 测试固件

— Kai, NetDrive