
MinIO는 고성능의 오픈 소스 객체 스토리지 솔루션으로, Amazon S3와 호환되는 API를 제공한다. 이는 퍼블릭 및 프라이빗 클라우드, 베어메탈 인프라, 오케스트레이션된 환경, 엣지 인프라 등 다양한 환경에 배포할 수 있도록 설계되었다.
MinIO는 빅데이터(Big Data), 쿠버네티스(Kubernetes), AI/ML 환경에서 많이 활용된다. MinIO의 핵심 장점인 고성능 오브젝트 스토리지, S3 호환성, 쿠버네티스 네이티브 설계 덕분에 다양한 워크로드에서 사용된다.
빅데이터 환경에서는 대량의 데이터를 저장하고 빠르게 처리할 수 있는 오브젝트 스토리지가 필요하다. MinIO는 Apache Spark, Trino(Presto), Apache Hive 같은 분석 엔진과 연동되어 빅데이터 분석을 지원한다.
MinIO는 쿠버네티스 네이티브 오브젝트 스토리지로, 쿠버네티스 환경에서 다양한 스토리지 솔루션을 제공할 수 있다.
AI/ML에서는 대량의 이미지, 비디오, 오디오, 텍스트 데이터를 저장하고 빠르게 접근할 수 있는 스토리지가 필요합니다. MinIO는 AI/ML 모델 학습을 위한 데이터 레이크 역할을 수행할 수 있다.
바이너리 파일 하나 내려받고, 파일 권한 부여한 후 실행하면 된다.
vagrant@slave2:~$ wget https://dl.min.io/server/minio/release/linux-amd64/minio
--2025-03-03 05:12:37-- https://dl.min.io/server/minio/release/linux-amd64/minio
Resolving dl.min.io (dl.min.io)... 178.128.69.202, 138.68.11.125
Connecting to dl.min.io (dl.min.io)|178.128.69.202|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 117276824 (112M) [application/octet-stream]
Saving to: ‘minio’
minio 100%[======================================================>] 111.84M 259KB/s in 2m 41s
2025-03-03 05:15:19 (711 KB/s) - ‘minio’ saved [117276824/117276824]
vagrant@slave2:~$ chmod +x minio
vagrant@slave2:~$ ./minio server --address 0.0.0.0:8888 /tmp
INFO: Formatting 1st pool, 1 set(s), 1 drives per set.
INFO: WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.
MinIO Object Storage Server
Copyright: 2015-2025 MinIO, Inc.
License: GNU AGPLv3 - https://www.gnu.org/licenses/agpl-3.0.html
Version: RELEASE.2025-02-28T09-55-16Z (go1.23.6 linux/amd64)
API: http://0.0.0.0:8888
RootUser: minioadmin
RootPass: minioadmin
WebUI: http://192.168.56.102:35701 http://192.168.140.64:35701 http://10.0.2.15:35701 http://172.17.0.1:35701 http://127.0.0.1:35701
RootUser: minioadmin
RootPass: minioadmin
CLI: https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart
$ mc alias set 'myminio' 'http://0.0.0.0:8888' 'minioadmin' 'minioadmin'
Docs: https://docs.min.io
WARN: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables
로컬 환경을 만들려면 SC, PV, PVC 를 먼저 구성해야 한다. 각 local-storage, mypv1, mypvc로 명명하였다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv1
labels:
type: local
spec:
storageClassName: local-storage
persistentVolumeReclaimPolicy: Delete
capacity:
storage: 500Mi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data1"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
apiVersion: apps/v1
kind: Deployment
metadata:
name: minio
spec:
selector:
matchLabels:
app: minio
strategy:
type: Recreate
replicas: 1
template:
metadata:
labels:
app: minio
spec:
volumes:
- name: data
persistentVolumeClaim:
claimName: mypvc
containers:
- name: minio
image: minio/minio:latest
args:
- "server"
- "--address=:9000"
- "--console-address=:9001"
- "/data"
env:
- name: MINIO_ACCESS_KEY
value: "minio"
- name: MINIO_SECRET_KEY
value: "minio123"
ports:
- name: service
containerPort: 9000
- name: console
containerPort: 9001
volumeMounts:
- name: data
mountPath: /mnt
---
apiVersion: v1
kind: Service
metadata:
name: minio
spec:
selector:
app: minio
ports:
- name: service
port: 9000
targetPort: 9000
protocol: TCP
- name: console
port: 9001
targetPort: 9001
protocol: TCP
type: NodePort
vagrant@slave1:~/minio$ k apply -f minio.yml
deployment.apps/minio created
service/minio created
9001이 웹콘솔 포트이다. 노드 포트가 30454이므로 노드 아이피와 함께 사용하면 브라우저에 콘솔이 뜬다.
vagrant@slave1:~/minio$ k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 15d
minio NodePort 10.101.219.23 <none> 9000:32713/TCP,9001:30454/TCP 5m58s
아이디와 패스워드는 yml에서 minio, minio123으로 임시 설정했다.
버킷하나 만들고 파일을 올려 정상 작동하는 지 확인한다.
