Overview
Minio에 대해서 알아본다.
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://github.com/minio/minio/blob/master/helm/minio/README.md
https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart
'Open Source Software' 카테고리의 다른 글
Vaultwarden(Bitwarden)이란? (2) | 2024.11.08 |
---|---|
Harbor란? (4) | 2024.10.08 |
Habor Robot Account(하버 로봇 계정)란? (0) | 2024.08.21 |
Cephadm-ansible이란? (3) | 2024.02.29 |
Rook-Ceph란? (0) | 2024.02.20 |