Provisioning, MinIO

Jeonghak Cho·2025년 3월 3일

Provisioning

목록 보기
8/44
post-thumbnail

MinIO 개요

MinIO는 고성능의 오픈 소스 객체 스토리지 솔루션으로, Amazon S3와 호환되는 API를 제공한다. 이는 퍼블릭 및 프라이빗 클라우드, 베어메탈 인프라, 오케스트레이션된 환경, 엣지 인프라 등 다양한 환경에 배포할 수 있도록 설계되었다.

  • 데이터 저장 및 관리: MinIO는 대규모 데이터 세트를 효율적으로 저장하고 관리할 수 있는 객체 스토리지로, AI, 머신 러닝, 분석 워크로드 등 클라우드 네이티브 애플리케이션에 적합
  • S3 호환 API 제공: Amazon S3와 호환되는 API를 제공하여 기존 S3 기반 애플리케이션과의 통합이 용이

MinIO는 빅데이터(Big Data), 쿠버네티스(Kubernetes), AI/ML 환경에서 많이 활용된다. MinIO의 핵심 장점인 고성능 오브젝트 스토리지, S3 호환성, 쿠버네티스 네이티브 설계 덕분에 다양한 워크로드에서 사용된다.

빅데이터(Big Data)에서 MinIO 활용

빅데이터 환경에서는 대량의 데이터를 저장하고 빠르게 처리할 수 있는 오브젝트 스토리지가 필요하다. MinIO는 Apache Spark, Trino(Presto), Apache Hive 같은 분석 엔진과 연동되어 빅데이터 분석을 지원한다.

Apache Spark + MinIO: 데이터 레이크 구축

  • Spark는 빅데이터를 처리하는 대표적인 엔진으로, MinIO를 S3 호환 데이터 레이크로 사용
  • Spark에서 MinIO에 저장된 데이터를 직접 읽고 쓰는 것이 가능
  • 활용 예시: 로그 분석, IoT 데이터 수집 및 처리

Trino(Presto) + MinIO: 대규모 SQL 분석

  • Trino(Presto)는 대규모 분산 SQL 엔진으로, MinIO에서 데이터를 가져와 SQL로 분석 가능
  • 활용 예시: 대규모 데이터 웨어하우스 구축 (예: AWS S3 기반 데이터 웨어하우스를 MinIO로 대체)
  • Flink는 실시간 데이터 스트리밍 처리에 강점을 가진 엔진
  • Kafka와 연동하여 실시간 로그, 센서 데이터 등을 MinIO에 저장 후 분석
  • 활용 예시: 실시간 금융 거래 분석, IoT 센서 데이터 처리

쿠버네티스(Kubernetes)에서 MinIO 활용

MinIO는 쿠버네티스 네이티브 오브젝트 스토리지로, 쿠버네티스 환경에서 다양한 스토리지 솔루션을 제공할 수 있다.

Kubernetes Persistent Storage

  • 쿠버네티스 클러스터 내에서 PVC(Persistent Volume Claim)와 연동하여 MinIO를 백엔드 스토리지로 활용
  • 활용 예시: Kubernetes 기반 애플리케이션의 데이터 저장소 (예: 로그, 백업 데이터 저장)

하이브리드 클라우드 오브젝트 스토리지

  • 쿠버네티스 클러스터에서 로컬 MinIO와 AWS S3 또는 Google Cloud Storage와 연동하여 데이터 동기화
  • 활용 예시: 온프레미스-클라우드 하이브리드 데이터 저장소 구축

Kubeflow + MinIO: 머신러닝 파이프라인 스토리지

  • Kubeflow는 Kubernetes 기반의 머신러닝 오케스트레이션 플랫폼
  • Kubeflow의 모델, 데이터셋 등을 MinIO에 저장하여 관리
  • 활용 예시: AI 모델 학습 데이터 및 결과물 저장

AI/ML(인공지능/머신러닝)에서 MinIO 활용

AI/ML에서는 대량의 이미지, 비디오, 오디오, 텍스트 데이터를 저장하고 빠르게 접근할 수 있는 스토리지가 필요합니다. MinIO는 AI/ML 모델 학습을 위한 데이터 레이크 역할을 수행할 수 있다.

TensorFlow/PyTorch 모델 학습 데이터 저장소

  • AI 모델 학습을 위해 대규모 데이터셋(예: ImageNet, COCO Dataset 등)을 MinIO에 저장
  • GPU 서버에서 MinIO에 저장된 데이터를 불러와 학습 수행
  • 활용 예시: 이미지 분류, 객체 탐지 모델 학습

MLOps 워크플로우에서 MinIO 활용

  • 머신러닝 개발 및 배포 과정에서 모델 아티팩트(학습된 모델 파일)를 MinIO에 저장
  • Kubeflow, MLflow, Seldon 등과 연동하여 MLOps 파이프라인 구성
  • 활용 예시: AI 모델 버전 관리 및 배포

자율주행 데이터 스토리지

  • 자율주행 차량이 수집하는 대량의 카메라/라이다 데이터를 MinIO에 저장 후 AI 모델 학습
  • AWS S3 대비 온프레미스에서도 유사한 오브젝트 스토리지 환경 제공
  • 활용 예시: 자율주행 AI 모델 개발

설치

로컬 직접 설치

바이너리 파일 하나 내려받고, 파일 권한 부여한 후 실행하면 된다.

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 생성

로컬 환경을 만들려면 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

Deploy, Svc 생성

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

http://192.168.56.102:30454

아이디와 패스워드는 yml에서 minio, minio123으로 임시 설정했다.
버킷하나 만들고 파일을 올려 정상 작동하는 지 확인한다.

0개의 댓글