跳到主要内容

MinIO

[TOC]

MinIO

By:weimenghua
Date:2022.10.2
Description:MinIO 文件存储

参考资料

minio 官网
minio 文档

MinIO 简介

MinIO 是根据 GNU Affero 通用公共许可证 v3.0发布的高性能对象存储。它与 Amazon S3云存储服务兼容。使用 MinIO 构建用于机器学习,分析和应用程序数据工作负载的高性能基础架构。
其设计的主要目标是作为私有云对象存储的标准方案。主要用于存储海量的图片,视频,文档等。非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大5T 不等。

MinIO 特点

  • 高性能:作为高性能对象存储,在标准硬件条件下它能达到55GB/s 的读、35GG/s 的写速率
  • 可扩容:不同 MinIO 集群可以组成联邦,并形成一个全局的命名空间,并跨越多个数据中心
  • 云原生:容器化、基于 K8S 的编排、多租户支持
  • Amazon S3兼容:Minio 使用 Amazon S3 v2 / v4 API。可以使用 Minio SDK,Minio Client,AWS SDK 和 AWS CLI 访问 Minio 服务器。
  • 可对接后端存储: 除了 Minio 自己的文件系统,还支持 DAS、 JBODs、NAS、Google 云存储和 Azure Blob 存储。
  • SDK 支持: 基于 Minio 轻量的特点,它得到类似 Java、Python 或 Go 等语言的 sdk 支持
  • Lambda 计算: Minio 服务器通过其兼容 AWS SNS / SQS 的事件通知服务触发 Lambda 功能。支持的目标是消息队列,如 Kafka,NATS,AMQP,MQTT,Webhooks 以及 Elasticsearch,Redis,Postgres 和 MySQL 等数据库。
  • 有操作页面
  • 功能简单: 这一设计原则让 MinIO 不容易出错、更快启动
  • 支持纠删码:MinIO 使用纠删码、Checksum 来防止硬件错误和静默数据污染。在最高冗余度配置下,即使丢失1/2的磁盘也能恢复数据

MinIO 部署

# 创建本地存储目录(防止容器删除数据丢失)
mkdir -p /your_dir

# https://docker.aityp.com/r/quay.io/minio/minio
# 启动 MinIO 容器(账号:admin,密码:Admin123456,# 密码满足8位以上且包含大小写/数字)
docker run -d \
--name minio-server \
-p 9000:9000 \
-p 9001:9001 \
-v /your_dir:/data \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=Admin123456" \
--restart=always \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io/minio/minio:RELEASE.2025-07-23T15-54-02Z \
server /data \
--console-address ":9001"

访问地址
http://127.0.0.1:9001

MinIO 使用

配置 MinIO(创建桶 + 公开访问)

  1. 创建存储桶(Bucket)
    登录 MinIO 控制台后,点击左侧「Buckets」→「Create Bucket」
    填写 Bucket 名称(如:nextjs-assets),其他默认,点击「Create Bucket」

  2. 设置公开访问(前端能直接访问文件)
    进入刚创建的桶(nextjs-assets)→ 右上角「Settings」→「Access Policy」
    选择「Public」(公开读)→ 点击「Save」
    此时桶内文件可通过 URL 直接访问:http://<服务器IP>:9000/nextjs-assets/文件名.jpg

  3. 生成 Access Key(供 Next.js 调用)
    点击控制台左侧「Access Keys」→「Create access key」
    点击「Create」,会生成 Access Key 和 Secret Key

注意:社区版 MinIO 阉割很多功能,可能没有上述入口,需要通过命令行方式操作

# Linux 安装 mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/

# 验证
mc --version

# 格式:mc alias set <别名> <MinIO地址> <root账号> <root密码>
mc alias set myminio http://127.0.0.1:9000 admin Admin123456

# 测试连接
mc ls myminio

直接用 Root 账号(最快,仅开发用) 如果只是开发测试,不用创建新 Access Key,直接用启动时的 Root 账号: Access Key:admin(启动时的 MINIO_ROOT_USER) Secret Key:Admin123456(启动时的 MINIO_ROOT_PASSWORD)

把 .env.local 里的密钥换成刚创建的:

MINIO_ENDPOINT=http://<服务器IP>:9000
MINIO_ACCESS_KEY=admin
MINIO_SECRET_KEY=Admin123456
MINIO_BUCKET=nextjs-assets
MINIO_USE_SSL=false

mc anonymous set public local/demo/*

  • mc: 这是MinIO Client(mc)工具的命令行前缀,用于执行与MinIO对象存储系统相关的操作。
  • anonymous: 这是指定的身份标识,表示匿名用户。
  • set public: 这是命令的一部分,用于设置指定对象的访问权限为公共访问。
  • local/demo/: 这是要设置为公共访问权限的对象的路径或通配符。在这个示例中,local/demo/是一个路径通配符,它匹配指定桶(Bucket)下的所有对象。
kubectl --insecure-skip-tls-verify exec -it minio-6c57b775f6-b8v9x -n my-space -- /bin/sh

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv mc /usr/local/bin/mc

获取 endpoint
kubectl get services -n my-space

关键字 Environment,获取 access-key、secret-key
kubectl describe pod minio-6c57b775f6-b8v9x -n my-space

将 Minio 作为一个新主机添加到 mc 的配置
mc config host add <alias> <endpoint> <access-key> <secret-key>
mc config host add my-minio http://10.43.244.206:9000 minioadmin minioadmin

删除新主机
mc config host remove <minio-alias>
mc config host remove my-minio

查看 MinIO 服务器上的存储桶(buckets)
mc ls <minio-alias>
mc ls my-minio

创建一个新的存储桶(bucket)
mc mb <minio-alias>/<bucket-name>
mc mb my-minio/my-bucket

删除存储桶(bucket)
mc rb <minio-alias>/<bucket-name> --force
mc rb my-minio/my-bucket --force

上传文件
mc cp <file-path> <minio-alias>/<bucket-name>/<object-name>
mc cp example.txt my-minio/my-bucket/example.txt

复制文件,源和目标可以是本地文件系统或桶
mc cp <source> <destination>
mc cp my-minio/my-bucket/example.txt my-minio/my-bucket/example_cp.txt

查看桶里的文件
mc ls <minio-alias>/<bucket-name>
mc ls my-minio/my-bucket

列出指定前缀的文件
mc ls <minio-alias>/<bucket-name>/<prefix> --recursive
mc ls my-minio/my-bucket/exam --recursive

下载文件
mc cp <minio-alias>/<bucket-name>/<object-name> <local-file-path>
mc cp my-minio/my-bucket/example.txt myminio/example2.txt

知识碎片

桶(Bucket)是OBS中存储对象的容器。对象存储提供了基于桶和对象的扁平化存储方式,桶中的所有对象都处于同一逻辑层级,去除了文件系统中的多层级树形目录结构。