体验下来遇到的问题:
1. 使用Linux挂载minio的bucket时,wsl1安装s3fs有问题,至少使用wsl2或者完全的虚拟机、或者其他带有内核的机器,否者会因为找不到内核,报modprobe fuse first。
bash-5.1# s3fs -o passwd_file=/data/test/passwd -o use_path_request_style -o no_check_certificate -o endpoint=us-east-1 -o url=https://xxx.xxx.xxx.xx:9000/ -o bucket=uploads /data/test/fuse
fuse: device not found, try 'modprobe fuse' first
2. minio使用docker安装不能使用,需要暴露多个端口,否则只有9000端口暴露出来,docker内部的动态端口出不来导致界面服务没法使用。
建议:
直接使用linux启动二进制文件的方式使用minio
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
export MINIO_ROOT_USER=admin # 填一个你喜欢的字符串,不要跟人杠特殊字符
export MINIO_ROOT_PASSWORD=****** # 填一个你喜欢的密码
# ":xxxx" 作为一个对外提供控制台服务的port
./minio server --console-address ":xxxx" /mnt/data
3. 使用minio的桶挂载到k8s的容器,踩了一个大坑
# 上面的略
spec:
containers:
- name: ${your container's name}
image: ${your images}
resources:
limits:
memory: "1028Mi"
cpu: "500m"
securityContext:
privileged: true # 给你的容器增加权限
volumeMounts:
- name: mnt_dir
mountPath: /var/s3fs:shared
- name: ${another container's name}
image: ${another images}
volumeMounts:
- name: mntdatas3fs
mountPath: /var/s3fs:shared
volumes:
- name: mnt_dir
hostPath: # emptyDir 也是可行的
path: /mnt/s3data # 这是node上的path
这个大坑就是,同一个pod里想要共享目录的话,通过挂载卷的形式实现即可,问题是,我的需求是希望一个容器读写,另一个容器只读,因此我在 ${another container's name} 的容器里设置挂载目录为readonly时,如下:
# 上面的略
spec:
containers:
- name: ${your container's name}
image: ${your images}
resources:
limits:
memory: "1028Mi"
cpu: "500m"
securityContext:
privileged: true # 给你的容器增加权限
volumeMounts:
- name: mnt_dir
mountPath: /var/s3fs:shared
- name: ${another container's name}
image: ${another images}
volumeMounts:
- name: mntdatas3fs
mountPath: /var/s3fs
readOnly: true
volumes:
- name: mnt_dir
hostPath: # emptyDir 也是可行的
path: /mnt/s3data # 这是node上的path
在${another container's name} 的容器就无法读取目录的内容。
此坑源于对挂载的不熟悉,对权限的不了解,对k8s共享卷的不知道,谨以为戒!程序员当修身养性,面对技术应“心如静水”,戒骄戒躁,深入研究之。