对象存储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 ChartsHelm 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

minio/mc - Docker Image | Docker Hub

mc(MinIO Client)是 MinIO 提供的一个命令行工具,用于与任何兼容 Amazon S3 API 的对象存储服务进行交互。mc 是一个非常强大且灵活的工具,可以用来管理多个存储系统,包括 MinIO 服务器、Amazon S3、Google Cloud Storage 等。

  1. 多云支持
    • mc 支持多种对象存储服务,如 MinIO、Amazon S3、Google Cloud Storage、阿里云 OSS 等。
    • 可以同时管理多个不同提供商的存储服务。
  2. 文件和目录操作
    • 上传、下载、删除文件和目录。
    • 创建和删除存储桶。
    • 列出存储桶中的对象。
    • 复制和移动对象。
  3. 权限管理
    • 设置存储桶和对象的访问控制列表(ACL)。
    • 管理 IAM 用户和策略。
  4. 数据迁移
    • 在不同的存储系统之间复制数据。
    • 支持增量同步,只传输更改的数据。
  5. 镜像
    • 将一个存储桶的内容镜像到另一个存储桶。
    • 支持双向同步。
  6. 监控和日志
    • 查看存储桶的使用情况。
    • 生成详细的日志报告。
  7. 加密
    • 支持客户端加密和服务器端加密。
  8. 版本控制
    • 启用和管理对象的版本控制。

基本用法

#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

d3fk/s3cmd - Docker Image | Docker Hub

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/rclone - Docker Image | Docker Hub

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

五、监控告警

Monitoring and Alerts — MinIO Object Storage for Kubernetes