MinIO
是基于GNU AGPL v3开源的高性能对象存储,与Amazon S3云存储服务API兼容。
介绍
MinIO 是 Kubernetes 的原生产品,是唯一可用于公有云、私有云、Kubernetes 发行版和边缘的对象存储套件。
使用场景
一般作为高性能基础设施的场景,包括`
- 机器学习
- 分析
- 应用数据负载
- 测试环境
- 支持基于
Policy-Based Access Control (PBAC)
认证
特点
- 高可用,N/2硬盘在线数据就是安全的
- Minio使用
纠删码(erasure code)
和 校验和(checksum)
来保护数据免受硬件故障
纠删码
是一种恢复丢失和损坏数据的数学算法,Minio采用 Reed-Solomon code
将对象拆分成 N/2 数据和 N/2 奇偶校验块
- 示例` 如果有 12 块盘,一个对象会被分成 6 个数据块、6 个奇偶校验块,丢失任意 6 块盘(不管是数据块还是奇偶校验块)时仍可以从剩下的盘中将数据进行恢复
- 一致性
所有读写操作都严格遵守
read-after-write` 一致性模型
安装部署
支持多种安装部署方式,参考` https://hub.docker.com/r/minio/minio
Docker
mkdir -p /data/minio
docker run -d \
--name minio \
--restart=always \
-p 9000:9000 \
-p 9001:9001 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /data/minio:/data \
minio/minio:RELEASE.2022-05-08T23-50-31Z.hotfix.d33e6d144 \
server /data --console-address ":9001"
说明`
- 默认用户名:密码
admin/minioadmin`,示例通过环境变量指定
- API Port:
9000
- Web Console Port:
9001
- 安装完成后,通过
http://<ip>:9001
访问
/identity/account/new-account
添加 Access Key
和 Secret Key
Minio Operator
参考
kubectl krew update
kubectl krew install minio
kubectl minio init
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-disk-0
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /data/minio/0
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node6
kubectl minio tenant create minio-tenant-1 \
--servers 1 \
--volumes 4 \
--capacity 40Gi \
--storage-class local-storage \
--namespace minio-tenant-1
客户端 mc 安装
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help
mc 客户端使用
# 查看 minio 服务端配置
mc config host ls
# 添加 minio 服务端配置
mc config host add minio http://minio.xiexianbin.cn xxx --api s3v4
# 查看 minio bucket
mc ls minio
# 创建 bucket
mc mb minio/backup
# 上传本地目录(文件不加r)
mc cp -r ingress minio/backup/
# 下载远程目录(文件不加r)
mc cp -r minio/backup .
# 将一个本地文件夹镜像到 minio (类似rsync)
mc mirror localdir/ minio/backup/
# 持续监听本地文件夹镜像到 minio(类似rsync)
mc mirror -w localdir/ minio/backup/
# 持续从 minio 存储桶中查找所有 jpg 图像,并复制到 minio "play/bucket" 存储桶
mc find minio/backup --name "*.jpg" --watch --exec "mc cp {} play/bucket"
# 删除目录
mc rm minio/backup/ingress --recursive --force
# 删除文件
mc rm minio/backup/xxx.yaml
# 删除所有未完整上传的对象
mc rm --incomplete --recursive --force minio/backup
# 删除 7 天前的对象
mc rm --force --older-than=7 minio/backup
# 将 MySQL 数据库 dump 文件输出到 minio
mysqldump -u root -p ******* db | mc pipe minio/backup/backup.sql
# MongoDB 备份
mongodump -h mongo-server1 -p 27017 -d blog-data --archive | mc pipe minio/backup/mongo-blog-data-`date +%Y-%m-%d`.archive
客户端
上传文件的 Content-Type
text/html
HTML格式,浏览器直接打开
text/plain
纯文本格式
text/xml
XML格式
text/x-log
log格式
image/gif
gif图片格式
image/jpeg
jpg图片格式
image/png
png图片格式
application/json
JSON数据格式
application/xml
XML数据格式
application/xhtml+xml
XHTML格式
application/atom+xml
Atom XML聚合格式
application/pdf
pdf格式
application/msword
Word文档格式
application/octet-stream
二进制数据流下载
Python SDK
pip3 install minio