s3fs挂载minio为本地目录

Linux下使用s3fs挂载minio为本地目录

参考: https://www.cnblogs.com/technicianafei/p/17387166.html

Linux安装s3fs,挂载minio存储桶本地目录


安装s3fs

s3fs项目地址: https://code.google.com/archive/p/s3fs/issues/127

# 安装epel源
yum install -y epel-release 

# Cneots7安装s3fs
yum install s3fs-fuse -y

# 创建挂载点
mkdir /minio-nfs

# 创建minio密码文件
echo "<账号>:<密码>" > ${HOME}/.passwd-s3fs
# 或AK
echo "<ACCESS_KEY_ID>:<SECRET_ACCESS_KEY>" > ${HOME}/.passwd-s3fs

# 设置minio密码文件权限为600
chmod 600  ${HOME}/.passwd-s3fs


前台运行s3fs----用于debug

# 挂载minio对象存储为本地目录
## 存储桶名称为:one
## 挂载点路径为:/mnt/minio
## -o passwd_file 指定密码文件
## -o url minio服务url及api端口为:http://192.168.222.123:9000
## -o allow_other:允许其他Linux用户访问挂载点
## -o no_check_certificate:不检查证书
## -o use_path_request_style:启用不支持的类s3 api的兼容性(必须配置,否则挂载minio存储桶失败)
## -o umask=000:挂载目录的权限,000表现不限制任何权限
## -o dbglevel=info 日志级别info
## -o curldbg:运行时显示更多curl输出,挂载成功后会占用当前shell前端
## -f 前台运行,调试时使用
s3fs <myBucketName> <挂载点> -o passwd_file=/root/.passwd-s3fs -o url=http://192.168.222.123:9000 -o allow_other -o no_check_certificate -o use_path_request_style -o umask=000 -o dbglevel=info -o curldbg -f

后台运行

# 后台运行,去掉-f
s3fs one /minio-nfs -o passwd_file=~/.passwd-s3fs -o url=http://192.168.50.130:9000 -o allow_other -o no_check_certificate -o use_path_request_style -o umask=000 -o dbglevel=info -o curldbg

# 取消挂载
umount <minio挂载点>

配置开机自动挂载


方法1: 使用supervisor实现开机自动挂载

配置内容如下:

# cat /etc/supervisord.d/app.ini

[supervusird]
# 禁止后台运行
nodaemon=true
# 程序的名称
[program:s3fs-minio]
# 执行的命令
command=/usr/bin/s3fs one /minio-nfs -o passwd_file=/root/.passwd-s3fs -o url=http://192.168.50.130:9000 -o allow_other -o no_check_certificate -o use_path_request_style -o umask=000 -o dbglevel=info -o curldbg -f

# 查看挂载清空
df -Th


方法2: 服务单元实现开机自动挂载minio为本地目录—失败

  • 创建s3fs挂载minio的变量文件
# 创建配置目录
mkdir -p /etc/s3fs

# 创建变量文件
vim /etc/s3fs/minio.env

变量文件内容如下:

# 要挂载的存储桶名称
myBucketName=one 
# 本地挂载点路径
Mount_Point="/minio-nfs"
# minio密码文件路径
PASSWD_FILE="/root/.passwd-s3fs"
# minio接口
MINIO_URL=http://192.168.50.130:9000
# 挂载参数--默认即可
S3FS_parameter="-o allow_other -o no_check_certificate -o use_path_request_style -o umask=000 -o dbglevel=info -o curldbg"
  • 创建s3fs挂载minio为本地目录的服务单元文件
# 编辑s3fs挂载minio为本地目录的服务单元文件
vim /etc/systemd/system

服务单元内容如下:

[Unit]
Description=Mount MinIO Bucket via s3fs
# 确保网络就绪
After=network-online.target  
Requires=network-online.target

[Service]
Type=simple
# 变量文件
EnvironmentFile=-/etc/s3fs/minio.env
# 创建挂载点目录(若不存在)
ExecStartPre=/bin/mkdir -p $Mount_Point
ExecStart=/usr/bin/s3fs $myBucketName $Mount_Point -o passwd_file=$PASSWD_FILE -o url=$MINIO_URL $S3FS_parameter
# 强制卸载挂载点
ExecStop=/usr/bin/fusermount -uz /minio-nfs
# 挂载失败时自动重试
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target
  • 重载服务,启动服务
# 重载服务
systemctl daemon-reload
# 设置开机自启并现在启动
systemctl enable --now s3fs-mount.service

# 查看服务状态
systemctl status s3fs-mount.service

debug
# 查看服务日志
journalctl -u s3fs-mount.service

# 手动调试(输出详细日志)‌
s3fs -d -d -f -o curldbg <bucket-name> /mnt/minio

Windows挂载minio到本地

Windows 挂载minio 到本地磁盘_51CTO博客_挂载磁盘

<think>好的,我现在要回答用户关于在Kubernetes中挂载MinIO CSI的问题。首先,我需要确认用户的需求是什么。他们可能希望在Kubernetes集群中使用CSI(容器存储接口)驱动程序来挂载MinIO存储桶,这样Pod可以像使用本地存储一样访问MinIO中的对象。 首先,我需要回顾一下MinIO是什么。MinIO是一个高性能的对象存储服务,兼容Amazon S3 API。通常用于存储非结构化数据,如图片、文档、日志文件等。而CSI是Kubernetes中用于管理外部存储的标准接口,允许用户在不同的存储后端之间进行抽象,使得Pod可以动态地挂载这些存储。 接下来,用户提到的MinIO CSI可能指的是一个CSI驱动程序,用于将MinIO存储桶作为卷挂载到Kubernetes Pod中。不过,我需要确认是否存在官方的MinIO CSI驱动,或者是否有社区维护的驱动。根据我的知识,MinIO官方可能没有直接提供CSI驱动,但可能有一些第三方实现,或者用户可以使用其他方式(比如通过s3fs等工具)将S3兼容存储挂载为文件系统。 例如,有一个项目叫csi-s3,它是一个CSI驱动程序,可以将任何S3兼容的对象存储挂载到Kubernetes中。由于MinIO兼容S3,所以可以使用csi-s3驱动来挂载MinIO存储桶作为卷。此外,还有其他的方法,比如使用FlexVolume插件或者使用Kubernetes的Secret来存储MinIO的凭证,然后通过环境变量或卷挂载的方式让Pod访问MinIO。 接下来,我需要分步骤介绍如何在Kubernetes中配置和使用CSI驱动来挂载MinIO存储桶。大致步骤可能包括: 1. 部署CSI驱动程序:例如,部署csi-s3驱动到Kubernetes集群中。 2. 创建Secret:存储MinIO的访问密钥和密钥,以便CSI驱动可以认证到MinIO服务。 3. 创建StorageClass:定义存储类型,指定MinIO的端点、存储桶名称等信息。 4. 创建PersistentVolumeClaim(PVC):请求存储资源,Kubernetes会根据StorageClass动态创建PV。 5. 在Pod中挂载PVC:将PVC挂载到Pod的路径,使Pod可以访问MinIO存储桶中的文件。 同时,需要注意CSI驱动的兼容性,是否支持当前的Kubernetes版本,以及MinIO的版本是否与CSI驱动兼容。此外,还需要考虑挂载后的性能问题,因为对象存储和文件系统的访问模式不同,可能会影响应用的性能。 另外,可能存在的一些常见问题,比如权限配置错误、网络连接问题(MinIO服务是否可以从Kubernetes集群访问)、CSI驱动配置参数是否正确等。需要指导用户如何调试这些问题,例如检查CSI驱动的日志,确认PVC是否绑定成功,以及Pod的事件日志。 最后,是否需要提供具体的yaml配置示例,比如Secret、StorageClass、PVC和Pod的配置,这会有助于用户实际操作。但需要确保示例中的参数正确,如MinIO的端点(endpoint)、区域(region)、存储桶名称、accessKey和secretKey的引用方式等。 总结来说,回答的结构应该是先介绍MinIO CSI的概念,然后详细步骤说明如何部署和配置,包括必要的代码示例,注意事项以及常见问题的解决方法。</think> Kubernetes 中挂载 MinIO 存储桶可通过 **CSI (Container Storage Interface)** 驱动程序实现,例如使用第三方驱动(如 `csi-s3`)。以下是详细步骤和示例: --- ### **1. 部署 CSI 驱动程序** 以 `csi-s3` 为例(需确保兼容你的 Kubernetes 版本): ```bash # 克隆仓库(以官方或社区维护版本为准) git clone https://github.com/ctrox/csi-s3 cd csi-s3 # 部署驱动 kubectl apply -f deploy/kubernetes/setup.yaml ``` -- ### **2. 创建 Secret 存储 MinIO 凭证** 创建 Secret 包含 MinIO 的访问密钥(`access-key` 和 `secret-key`): ```yaml # minio-secret.yaml apiVersion: v1 kind: Secret metadata: name: minio-s3-credentials type: Opaque stringData: accessKeyID: "YOUR_MINIO_ACCESS_KEY" secretAccessKey: "YOUR_MINIO_SECRET_KEY" ``` 应用配置: `kubectl apply -f minio-secret.yaml` --- ### **3. 创建 StorageClass** 定义存储类,指定 MinIO 端点、存储桶等信息: ```yaml # minio-storageclass.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: minio-s3-storage provisioner: ch.ctrox.csi.s3-driver reclaimPolicy: Retain # 删除 PVC 时保留存储桶数据 parameters: mounter: rclone # 或选择其他挂载工具(如 s3fs) csi.storage.k8s.io/node-publish-secret-name: minio-s3-credentials csi.storage.k8s.io/node-publish-secret-namespace: default csi.storage.k8s.io/provisioner-secret-name: minio-credentials csi.storage.k8s.io/provisioner-secret-namespace: default # MinIO 配置参数 bucket: my-bucket # 存储桶名称 endpoint: http://minio.example.com:9000 # MinIO 服务地址 region: us-east-1 # MinIO 默认区域(即使忽略也需占位) s3ForcePathStyle: "true" # MinIO 需要路径风格 ``` 应用配置: `kubectl apply -f minio-storageclass.yaml` -- ### **4. 创建 PersistentVolumeClaim (PVC)** 申请动态存储资源: ```yaml # minio-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: minio-s3-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi # 此值对对象存储无实际意义,但需占位 storageClassName: minio-s3-storage ``` 应用配置: `kubectl apply -f minio-pvc.yaml` --- ### **5. 在 Pod 中挂载 PVC** 将 PVC 挂载到容器路径: ```yaml # app-pod.yaml apiVersion: v1 kind: Pod metadata: name: s3-app spec: containers: - name: app image: nginx volumeMounts: - name: minio-s3-volume mountPath: /data volumes: - name: minio-s3-volume persistentVolumeClaim: claimName: minio-s3-pvc ``` 应用配置: `kubectl apply -f app-pod.yaml` --- ### **验证与调试** - **检查 PVC 状态**: `kubectl get pvc` 应显示 `Bound`。 - **查看 Pod 日志**: 若挂载失败,检查 CSI 驱动的日志: `kubectl logs -l app=csi-s3 -c csi-s3` - **访问 MinIO 存储桶**: 进入 Pod 并检查 `/data` 目录是否包含存储桶中的文件: `kubectl exec -it s3-app -- ls /data` --- ### **注意事项** 1. **性能限制**:对象存储(如 MinIO)的延迟高于块存储,适合大规模非结构化数据,不建议高频 IO 场景。 2. **兼容性**:确保 CSI 驱动版本支持你的 Kubernetes 和 MinIO 版本。 3. **安全配置**:建议通过 HTTPS 访问 MinIO 端点,并在 Secret 中使用加密管理敏感信息。 4. **存储桶预创建**:部分驱动要求存储桶已存在,需提前通过 MinIO 控制台或 `mc mb` 命令创建。 --- 通过以上步骤,即可在 Kubernetes 中将 MinIO 存储桶作为持久化卷使用,实现应用与对象存储的无缝集成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值