对象存储minio的部署与基本使用
minio官网:MinIO | S3 Compatible Storage for AI
minio官方文档:MinIO Object Storage for Kubernetes — MinIO Object Storage for Kubernetes
一、minio介绍
MinIO 是一个高性能的对象存储系统,兼容 Amazon S3 API。它是一个开源项目,设计用于存储大量非结构化数据,如图片、视频、日志文件、备份等。MinIO 以其简单易用、高性能和可扩展性而闻名,适用于各种规模的企业和应用。
- 高性能:MinIO 采用 Go 语言编写,具有极高的性能,能够处理大量的并发请求。
- S3 兼容:MinIO 完全兼容 Amazon S3 API,这意味着你可以使用现有的 S3 工具和库来与 MinIO 进行交互。
- 分布式架构:MinIO 支持分布式部署,可以轻松地横向扩展以处理 PB 级的数据。
- 纠删码:MinIO 使用纠删码(Erasure Coding)来提供高可用性和数据冗余,确保数据的可靠性和完整性。
- 安全性:支持 TLS 加密、身份验证和授权机制,确保数据的安全传输和存储。
- 多租户支持:支持多租户环境,可以为不同的用户或团队提供隔离的存储空间。
二、部署minio
使用docker
MinIO Object Storage for Container — MinIO Object Storage for Container
docker run -d \
-p 9000:9000 \
-p 9001:9001 \
--name minio \
-v /data/minio/data:/data \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=minio123" \
quay.io/minio/minio server /data \
--console-address ":9001"
使用二进制部署
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /mnt/data --address ":9000" --console-address ":9001"
kubernetes-minio集群
官方提供了 Helm Operator Charts 和 Helm Tenant Charts 两个Chart包。用于管理MinIO Operator与Tenants(租户)。
MinIO Operator 是一个 Kubernetes 自定义资源定义(CRD)和控制器,用于在 Kubernetes 集群中管理和部署 MinIO 集群。它提供了一种声明式的方式来配置和管理 MinIO 集群,简化了集群的部署、扩展和维护。通过提供了一个统一的接口来创建、配置和管理多个 MinIO 集群实例。
MinIO Tenants 是 MinIO Operator 中的一个 CRD(Custom Resource Definition),用于定义和管理独立的 MinIO 租户。每个 Tenant 表示一个独立的 MinIO 集群实例,具有自己的存储卷、网络配置和服务端点。
kubernetes-minio单点
mc
(MinIO Client)是 MinIO 提供的一个命令行工具,用于与任何兼容 Amazon S3 API 的对象存储服务进行交互。mc
是一个非常强大且灵活的工具,可以用来管理多个存储系统,包括 MinIO 服务器、Amazon S3、Google Cloud Storage 等。下面的job资源使用mc创建了一个bucket和账号
apiVersion: v1
kind: Namespace
metadata:
name: velero
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: velero
name: minio
labels:
app: minio
spec:
strategy:
type: Recreate
selector:
matchLabels:
app: minio
template:
metadata:
labels:
app: minio
spec:
volumes:
- name: storage
emptyDir: {}
- name: config
emptyDir: {}
containers:
- name: minio
image: minio/minio:latest
imagePullPolicy: IfNotPresent
args:
- server
- /storage
- --config-dir=/config
- --console-address=:9001
env:
- name: MINIO_ACCESS_KEY
value: "minio"
- name: MINIO_SECRET_KEY
value: "minio123"
ports:
- containerPort: 9000
- containerPort: 9001
volumeMounts:
- name: storage
mountPath: "/storage"
- name: config
mountPath: "/config"
---
apiVersion: v1
kind: Service
metadata:
namespace: velero
name: minio
labels:
app: minio
spec:
type: NodePort
ports:
- name: api
port: 9000
targetPort: 9000
- name: console
port: 9001
targetPort: 9001
selector:
app: minio
---
apiVersion: batch/v1
kind: Job
metadata:
namespace: velero
name: minio-setup
labels:
app: minio
spec:
template:
metadata:
name: minio-setup
spec:
restartPolicy: OnFailure
volumes:
- name: config
emptyDir: {}
containers:
- name: mc
image: minio/mc:latest
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- "mc --config-dir=/config config host add velero http://minio:9000 minio minio123 && mc --config-dir=/config mb -p velero/velero"
volumeMounts:
- name: config
mountPath: "/config"
三、MinIO Console
http://127.0.0.1:9001
用户名是minio,密码是minio123

四、客户端
minio/mc
mc
(MinIO Client)是 MinIO 提供的一个命令行工具,用于与任何兼容 Amazon S3 API 的对象存储服务进行交互。mc
是一个非常强大且灵活的工具,可以用来管理多个存储系统,包括 MinIO 服务器、Amazon S3、Google Cloud Storage 等。
- 多云支持:
mc
支持多种对象存储服务,如 MinIO、Amazon S3、Google Cloud Storage、阿里云 OSS 等。- 可以同时管理多个不同提供商的存储服务。
- 文件和目录操作:
- 上传、下载、删除文件和目录。
- 创建和删除存储桶。
- 列出存储桶中的对象。
- 复制和移动对象。
- 权限管理:
- 设置存储桶和对象的访问控制列表(ACL)。
- 管理 IAM 用户和策略。
- 数据迁移:
- 在不同的存储系统之间复制数据。
- 支持增量同步,只传输更改的数据。
- 镜像:
- 将一个存储桶的内容镜像到另一个存储桶。
- 支持双向同步。
- 监控和日志:
- 查看存储桶的使用情况。
- 生成详细的日志报告。
- 加密:
- 支持客户端加密和服务器端加密。
- 版本控制:
- 启用和管理对象的版本控制。
基本用法
#docker client
docker run --rm -it --entrypoint bash minio/mc
#首先,你需要为你的存储服务配置别名
mc alias set myminio http://192.168.66.128:9000 minio minio123
#列出存储桶
mc ls myminio
#创建存储桶
mc mb myminio/mybucket
#将本地文件上传到存储桶
mc cp 123.txt myminio/mybucket/123.txt
#从存储桶下载文件
mc cp myminio/mybucket/123.txt 123.txt
#删除存储桶中的文件
mc rm myminio/mybucket/123.txt 123.txt
#将一个存储桶的内容镜像到另一个存储桶
mc mb myminio/mybucket-mirror
mc mirror myminio/mybucket myminio/mybucket-mirror
#查看存储桶的使用情况
mc du myminio/mybucket
#设置存储桶为公开访问
mc policy set public myminio/newbucket
s3cmd
s3cmd
是一个开源的命令行工具,用于与 Amazon S3 和其他兼容 S3 API 的对象存储服务进行交互。它允许用户通过简单的命令行界面来管理存储桶、上传和下载文件、同步目录、设置访问控制等。s3cmd
支持多种操作,并且可以方便地集成到脚本中,适用于自动化任务。
基本用法
#docker client
docker run --rm -it --entrypoint sh d3fk/s3cmd:stable
#配置 s3cmd
s3cmd --configure
New settings:
Access Key: minio
Secret Key: minio123
Default Region: US
S3 Endpoint: 192.168.66.128:9000
DNS-style bucket+hostname:port template for accessing a bucket: 192.168.66.128:9000
Encryption password:
Path to GPG program: None
Use HTTPS protocol: False
HTTP Proxy server name:
HTTP Proxy server port: 0
#列出存储桶
/s3 # s3cmd ls
2024-09-20 06:52 s3://backup
2024-09-20 07:11 s3://mybucket
2024-09-20 07:16 s3://mybucket-mirror
#创建存储桶
/s3 # s3cmd mb s3://mybucket2
Bucket 's3://mybucket2/' created
/s3 # s3cmd ls
2024-09-20 06:52 s3://backup
2024-09-20 07:11 s3://mybucket
2024-09-20 07:16 s3://mybucket-mirror
2024-09-20 07:48 s3://mybucket2
#上传文件
/s3 # s3cmd put date.txt s3://mybucket2/
WARNING: Module python-magic is not available. Guessing MIME types based on file extensions.
upload: 'date.txt' -> 's3://mybucket2/date.txt' [1 of 1]
29 of 29 100% in 0s 4.55 KB/s done
/s3 # s3cmd ls s3://mybucket2
2024-09-20 07:48 29 s3://mybucket2/date.txt
#下载文件
/s3 # s3cmd get s3://mybucket2/date.txt local-date.txt
#同步目录
s3cmd sync /local/directory/ s3://my-bucket/remote-directory/
#删除文件
s3cmd del s3://mybucket/date.txt
#删除存储桶(里面有文件是删不掉的)
s3cmd rb s3://mybucket2
#设置存储桶为公开访问
s3cmd setacl s3://mybucket2 --acl-public
rclone
rclone
是一个开源的命令行工具,用于管理云存储服务。它支持多种云存储提供商,如 Amazon S3、Google Drive、Dropbox、Microsoft OneDrive 等,并且可以用来同步文件和目录、传输数据、管理存储桶等。rclone
的设计目标是提供一个简单易用、功能强大的工具,适用于个人用户和企业用户。
支持的存储协议非常多,你所知道的几乎都支持,非常适合存储迁移使用
基本用法
#docker client
docker run --rm -it --entrypoint sh rclone/rclone:1.68
#配置远程存储,交互式命令配置项太多,不如直接创建配置文件,参考:https://rclone.org/s3/#minio
# cat /config/rclone/rclone.conf
[myminio]
type = s3
provider = Minio
env_auth = false
access_key_id = minio
secret_access_key = minio123
region = us-east-1
endpoint = http://192.168.66.128:9000
location_constraint =
server_side_encryption =
#列出远程存储中的内容
# rclone ls myminio:
29 mybucket/123.txt
29 mybucket-mirror/123.txt
29 mybucket2/date.txt
#上传文件
/data # rclone copy date.txt myminio:mybucket/
/data # rclone ls myminio:mybucket/
29 123.txt
29 date.txt
#下载文件
rclone copy myminio:mybucket/date.txt .
#创建一个新的远程存储桶或文件夹
rclone mkdir myminio:mybucket4
#查看远程存储的使用情况
rclone about myminio:
Failed to about: S3 root doesn't support about