Open Source Software

Minio란? (Object Storage)

Somaz 2024. 8. 26. 10:45
728x90
반응형

Overview

Minio에 대해서 알아본다.

출처 : https://min.io/product/enterprisearchitecture

 

 


Minio란?

Minio는 확장 가능하고 안전하며 배포가 용이하도록 설계된 고성능 분산 객체 스토리지 시스템이다. 사진, 비디오, 로그 파일, 백업, 컨테이너 이미지 등 구조화되지 않은 데이터를 저장하는 데 자주 사용된다.

Minio는 Amazon S3 클라우드 스토리지 서비스와 호환되므로 온프레미스 또는 프라이빗 클라우드 환경에서 실행할 수 있는 S3 호환 스토리지 솔루션을 찾는 기업과 개발자에게 인기가 많다.

 

Minio 주요기능

 

  • Scalability
    • Minio는 여러 노드를 연결하여 확장하여 페타바이트 규모의 데이터를 효율적으로 관리할 수 있다.
    • 모든 노드에 데이터를 분산시켜 내결함성과 성능을 향상시킨다.

 

  • High Availability and Durability
    • Minio는 erasure coding 및 bitrot protection을 지원하여 하드웨어 오류 및 데이터 손상으로부터 데이터를 보호한다.
    • 분산 특성으로 인해 인프라의 일부가 중단되더라도 지속적인 접근이 가능하다.

 

  • Performance
    • Minio는 지연 시간 없이 많은 수의 동시 요청을 처리할 수 있는 기능을 갖춘 고성능 환경을 지원하도록 설계되었으므로 웹 및 클라우드 서비스와 같은 트래픽이 많은 애플리케이션에 적합하다.

 

  • S3 Compatibility
    • Amazon S3 API와 완벽하게 호환되는 Minio는 Amazon S3용으로 설계된 기존 도구 및 라이브러리와 원활하게 통합될 수 있다.
    • 이러한 호환성을 통해 사용자는 애플리케이션 코드를 변경하지 않고도 Amazon의 클라우드로 마이그레이션할 수 있다.

 

  • Security
    • Minio는 미사용 암호화(AES-256 사용) 및 전송 중 암호화(TLS) 지원, Minio에 내장된 ID 서버를 통한 ID 및 액세스 관리, OpenID Connect 또는 LDAP/AD를 사용하는 외부 ID 공급자와의 통합 등 강력한 보안 기능을 제공한다.

 

  • Multi-tenancy
    • Minio는 다중 테넌트를 지원하므로 여러 사용자 또는 팀이 엄격한 격리 및 제어를 통해 운영된다.

 

  • Deployment
    • Minio는 Kubernetes를 포함한 다양한 플랫폼에 배포하여 자동화된 관리, 확장 및 복구를 통한 기본 경험을 제공할 수 있다. 또한 가상 머신, 베어메탈 및 컨테이너화된 환경에서의 배포도 지원한다.

 

 

Minio 설치

helm repo add minio https://charts.min.io/

helm repo list
NAME    URL                   
minio   https://charts.min.io/

# Standard
helm install my-minio minio/minio --namespace minio --create-namespace --set accessKey=rootuser,secretKey=rootpass123

# Toy Setup
helm install --set resources.requests.memory=512Mi --set replicas=1 --set persistence.enabled=false --set mode=standalone --set rootUser=rootuser,rootPassword=rootpass123 --generate-name minio/minio --namespace minio --create-namespace

 

 

Toy Setup으로 설치해주었다.

helm install --set resources.requests.memory=512Mi --set replicas=1 --set persistence.enabled=false --set mode=standalone --set rootUser=rootuser,rootPassword=rootpass123 --generate-name minio/minio --namespace minio --create-namespace
NAME: minio-1724308499
LAST DEPLOYED: Thu Aug 22 06:34:59 2024
NAMESPACE: minio
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
MinIO can be accessed via port 9000 on the following DNS name from within your cluster:
minio-1724308499.minio.svc.cluster.local

To access MinIO from localhost, run the below commands:

  1. export POD_NAME=$(kubectl get pods --namespace minio -l "release=minio-1724308499" -o jsonpath="{.items[0].metadata.name}")

  2. kubectl port-forward $POD_NAME 9000 --namespace minio

Read more about port forwarding here: <http://kubernetes.io/docs/user-guide/kubectl/kubectl_port-forward/>

You can now access MinIO server on . Follow the below steps to connect to MinIO server with mc client:

  1. Download the MinIO mc client - <https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart>

  2. export MC_HOST_minio-1724308499-local=http://$(kubectl get secret --namespace minio minio-1724308499 -o jsonpath="{.data.rootUser}" | base64 --decode):$(kubectl get secret --namespace minio minio-1724308499 -o jsonpath="{.data.rootPassword}" | base64 --decode)@localhost:9000

  3. mc ls minio-1724308499-local

 

 

설치 확인한다.

k get po,svc,deploy -n minio
NAME                                    READY   STATUS             RESTARTS      AGE
pod/minio-1724308499-68b6695d9c-j2wnj   1/1     Running            0             3m7s
pod/my-minio-post-job-2546w             0/1     CrashLoopBackOff   3 (37s ago)   5m35s

NAME                               TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
service/minio-1724308499           ClusterIP   10.233.6.155   <none>        9000/TCP   3m8s
service/minio-1724308499-console   ClusterIP   10.233.30.81   <none>        9001/TCP   3m8s

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/minio-1724308499   1/1     1            1           3m7s

 

 

Service Type을 nodeport로 변경한다.

k get svc -n minio
NAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
minio-1724308499           ClusterIP   10.233.6.155   <none>        9000/TCP   7m28s
minio-1724308499-console   ClusterIP   10.233.30.81   <none>        9001/TCP   7m28s

kubectl patch svc minio-1724308499-console -n minio --type='json' -p='[{"op": "replace", "path": "/spec/type", "value": "NodePort"}]'

k get svc -n minio
NAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
minio-1724308499           ClusterIP   10.233.6.155   <none>        9000/TCP         8m5s
minio-1724308499-console   NodePort    10.233.30.81   <none>        9001:30211/TCP   8m5s

 

 

Console 접근한다.

 

 

아까 설정한 ID/PW 로 로그인 해준다. (`rootUser=rootuser,rootPassword=rootpass123`)

 

 

 

Minio 활용

링크 참고해서, Minio Clinet 다운로드 후에 Bucket 생성해본다.

# MAC install
brew install minio/stable/mc

# etc 링크 참고

 

 

minio와 연결하려면 아래와 같이 설정해야 한다.

ex)
mc alias set <ALIAS> <YOUR-MINIO-ENDPOINT> <ACCESS-KEY> <SECRET-KEY>

mc alias set myminio <http://10.0.71.51:30211> rootuser rootpass123
mc: <ERROR> Unable to initialize new alias from the provided credentials. S3 API Requests must be made to API port.

 

 

에러가 발생한다. 왜그럴까?

k logs -n minio minio-1724308499-68b6695d9c-j2wnj | less

Formatting 1st pool, 1 set(s), 1 drives per set.
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-2024 MinIO, Inc.
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Version: RELEASE.2024-04-18T19-09-19Z (go1.21.9 linux/amd64)

API:    
WebUI:     

Docs: <https://min.io/docs/minio/linux/index.html>
Status:         1 Online, 0 Offline. 
STARTUP WARNINGS:
- The standard parity is set to 0. This can lead to data loss.

 You are running an older version of MinIO released 4 months before the latest release 
 Update: Run `mc admin update ALIAS`

 

 

minio 로그를 보면 알 수 있다. API Endpoint도 Nodeport로 열어줘야 한다.

kubectl patch svc minio-1724308499 -n minio --type='json' -p='[{"op": "replace", "path": "/spec/type", "value": "NodePort"}]'

k get svc -n minio
NAME                       TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
minio-1724308499           NodePort   10.233.6.155   <none>        9000:31067/TCP   23m
minio-1724308499-console   NodePort   10.233.30.81   <none>        9001:30211/TCP   23m

 

 

다시 연결해본다. 성공적으로 연결되었다. console은 web 역할만 해줄뿐이고 mc 명령어로 endpoint 연결할때는

`minio-1724308499` 해당 리소스와 연결해줘야 한다.

mc alias set myminio <http://10.0.71.51:31067> rootuser rootpass123
mc: Configuration written to `/Users/somaz/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/Users/somaz/.mc/share`.
mc: Initialized share uploads `/Users/somaz/.mc/share/uploads.json` file.
mc: Initialized share downloads `/Users/somaz/.mc/share/downloads.json` file.
Added `myminio` successfully.

 

 

아래와 같이 connection을 확인해줄 수 있다.

mc admin info myminio
●  10.0.71.51:31067
   Uptime: 24 minutes 
   Version: 2024-04-18T19:09:19Z
   Network: 1/1 OK 
   Drives: 1/1 OK 
   Pool: 1

┌──────┬───────────────────────┬─────────────────────┬──────────────┐
│ Pool │ Drives Usage          │ Erasure stripe size │ Erasure sets │
│ 1st  │ 38.8% (total: 46 GiB) │ 1                   │ 1            │
└──────┴───────────────────────┴─────────────────────┴──────────────┘

1 drive online, 0 drives offline, EC:0

 

 

문법은 해당 링크에서 확인 가능하다.

# Bucket 생성
mc mb myminio/somaz-bucket
Bucket created successfully `myminio/somaz-bucket`.

# Bucket 생성 확인
mc ls myminio
[2024-08-22 16:01:27 KST]     0B somaz-bucket/

# 파일 업로드
mc cp test.txt myminio/somaz-bucket
/Users/somaz/test.txt:                     13 B / 13 B

# 파일 업로드 확인
mc ls myminio/somaz-bucket
[2024-08-22 16:03:19 KST]    13B STANDARD test.txt

# Local 파일 삭제 후 somaz-bucket 파일 가져오기
rm -rf test.txt 

mc cp myminio/somaz-bucket/test.txt .
...10.0.71.51:31067/somaz-bucket/test.txt: 13 B / 13 B

cat test.txt
test!! somaz

 

 

아래와 같이 Console에서도 확인 가능하다.

 


Reference

https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-operator-helm.html

https://github.com/minio/minio/blob/master/helm/minio/README.md

https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart

728x90
반응형

'Open Source Software' 카테고리의 다른 글

Habor Robot Account(하버 로봇 계정)란?  (0) 2024.08.21
Cephadm-ansible이란?  (3) 2024.02.29
Rook-Ceph란?  (0) 2024.02.20
Redis(Remote Dictionary Server)란?  (0) 2022.09.26
Ceph 노드 제거 및 추가 방법(mon/mgr/osd)  (0) 2022.09.21