Provisioning, MinIO / standalone

Jeonghak Cho·2025년 6월 8일

Provisioning

목록 보기
38/44

📗 프로비저닝 - MinIO (standalone)

개발·테스트 목적이면 standalone으로 충분하다. 운영환경에서 고가용성 및 노드 장애 허용이 필요하면 반드시 distributed 모드를 써야 한다. MinIO는 4개 이상의 노드/디스크가 있어야 분산 모드로 작동하며, 내부적으로 erasure coding을 통해 redundancy를 제공한다.

구성 모드최소 노드 수디스크 수권장 메모리
Standalone114 GB
Distributed Mode4≥ 4/node≥ 8 GB/node

서비스 차이

서비스 이름용도기본 포트
minioS3 API 서버 (데이터 I/O)9000
minio-console웹 콘솔 (관리 UI)9001

🏳️‍🌈 [궁금한점]

  • MinIO Standalone 모드 설치와 Distributed Mode 설치 차이

🔗[목차]

1️⃣ MinIO Standalone 준비

MinIO 차트 다운로드

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

helm pull oci://registry-1.docker.io/bitnamicharts/minio --untar

운영 환경에서는 CSI를 사용해야 한다.

StorageClass 정의, 생성

k apply -f mysc.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
reclaimPolicy: Delete  
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

디렉토리 생성 (slave1)

sudo mkdir /tmp/data1
sudo chown -R 1000:1000 /tmp/data1

PV 정의

StorageClass 지정하는 것에 유의한다.

  • pv 생성, poc-minio-dev.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv1
  labels:
    type: local
spec:
  persistentVolumeReclaimPolicy: Delete  
  storageClassName: local-storage
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/tmp/data1"
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [slave1]} 

PV 생성

k apply -f poc-minio-dev.yaml

persistentvolume/my-pv1 created

k get pv

NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                             STORAGECLASS    REASON   AGE
my-pv1   2Gi        RWO            Delete           Available                                     local-storage            3s

2️⃣ 설정

사용자 Values 파일 생성 (standalone)

cp values.yaml dev-values.yaml
  • dev-values.yaml 파일 편집
  • 아래 내용 남기고 삭제
mode: standalone

resources:
  requests:
    memory: 512Mi
    cpu: 250m
  limits:
    memory: 1Gi
    cpu: 500m

persistence:
  enabled: true
  storageClass: "local-storage"  # 필요한 경우 수정
  size: 2Gi
  accessModes:
    - ReadWriteOnce

auth:
  rootUser: minioadmin
  rootPassword: minioadmin
  
service:
  type: NodePort 
    
console:
  service:
    type: NodePort 

3️⃣ 설치

MinIO 설치 (Standalone)

## 개발
helm install my-minio . -n my-dev -f dev-values.yaml --create-namespace
NAME: my-minio
LAST DEPLOYED: Thu Jun  5 20:14:12 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: minio
CHART VERSION: 17.0.2
APP VERSION: 2025.5.24

Did you know there are enterprise versions of the Bitnami catalog? For enhanced secure software supply chain features, unlimited pulls from Docker, LTS support, or application customization, see Bitnami Premium or Tanzu Application Catalog. See https://www.arrow.com/globalecs/na/vendors/bitnami for more information.

** Please be patient while the chart is being deployed **

Minio(R) can be accessed via port 9000 on the following DNS name from within your cluster:

   my-minio.default.svc.cluster.local

To get your credentials run:

   export ROOT_USER=$(kubectl get secret --namespace default my-minio -o jsonpath="{.data.root-user}" | base64 -d)
   export ROOT_PASSWORD=$(kubectl get secret --namespace default my-minio -o jsonpath="{.data.root-password}" | base64 -d)

To connect to your Minio(R) server using a client:

- Run a Minio(R) Client pod and append the desired command (e.g. 'admin info'):

   kubectl run --namespace default my-minio-client \
     --rm --tty -i --restart='Never' \
     --env MINIO_SERVER_ROOT_USER=$ROOT_USER \
     --env MINIO_SERVER_ROOT_PASSWORD=$ROOT_PASSWORD \
     --env MINIO_SERVER_HOST=my-minio \
     --image docker.io/bitnami/minio-client:2025.5.21-debian-12-r1 -- admin info minio

To access the Minio(R) Console:

- Get the Minio(R) Console URL:

   echo "Minio(R) Console URL: http://127.0.0.1:9090"
   kubectl port-forward --namespace default svc/my-minio-console 9090:9090

WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
  - console.resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

패스워드 확인

  • 시크릿 조회
    kubectl get secret my-minio -o yaml
apiVersion: v1
data:
  root-password: bWluaW9hZG1pbg==
  root-user: bWluaW9hZG1pbg==
kind: Secret
metadata:
  annotations:
    meta.helm.sh/release-name: my-minio
    meta.helm.sh/release-namespace: default
  creationTimestamp: "2025-06-05T11:14:10Z"
  labels:
    app.kubernetes.io/component: minio
    app.kubernetes.io/instance: my-minio
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: minio
    app.kubernetes.io/part-of: minio
    app.kubernetes.io/version: 2025.5.24
    helm.sh/chart: minio-17.0.2
  name: my-minio
  namespace: default
  resourceVersion: "568757"
  uid: abb09c8a-4371-42b4-8f59-c7ab6f975678
type: Opaque
echo "bWluaW9hZG1pbg==" | base64 -d
minioadmin
  • 또는 명령어 사용
kubectl get secret my-minio -o jsonpath="{.data.root-user}" | base64 -d
kubectl get secret my-minio -o jsonpath="{.data.root-password}" | base64 -d

POD 확인

k get po -n my-dev

NAME                                READY   STATUS    RESTARTS   AGE
my-minio-5cf49bdf9b-w2r9t           1/1     Running   0          3m
my-minio-console-5d68c86f54-fn6mn   1/1     Running   0          3m

4️⃣ 검증

MinIO 클라이언트 설치

curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
  • 버전 확인
mc --version

mc version RELEASE.2025-05-21T01-59-54Z (commit-id=f71ad84bcf0fd4369691952af5d925347837dcec)
Runtime: go1.24.3 linux/amd64
Copyright (c) 2015-2025 MinIO, Inc.
License GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>

서비스 포트 확인

k get svc -n my-dev

NAME               TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
my-minio           NodePort   10.99.231.20   <none>        9000:32464/TCP   3m24s
my-minio-console   NodePort   10.99.14.58    <none>        9090:31326/TCP   3m24s

MinIO 서버 등록

mc alias set local http://192.168.56.10:32464 minioadmin minioadmin

Added `local` successfully.

버킷 생성

mc mb local/mybucket

Bucket created successfully `local/mybucket`.

mc ls local

[2025-06-06 16:53:28 KST]     0B mybucket/

콘솔 접속

참고

자주 쓰는 명령어

# helm 삭제 후 재 생성
helm delete my-minio -n my-dev
helm install my-minio . -n my-dev -f dev-values.yaml --create-namespace


# persistentVolumeReclaimPolicy: Retain 일 경우  - Released 상태의 pv Available로 변경 
rm -rf /tmp/data1/*
kubectl patch pv my-pv1 -p '{"spec":{"claimRef": null}}'

# persistentVolumeReclaimPolicy: Retain 일 경우 - PV 생성
k apply -f poc-minio-dev.yaml

0개의 댓글