Data Engineering/s3 minio

EP07 [ MinIO S3 + Cilium 기초 과정 ] MinIO 기본 설치 및 관리 #4 | MinIO 버킷 관리 실습 - CLI와 웹 콘솔 마스터하기

ygtoken 2025. 3. 28. 14:06
728x90

이 글에서는 쿠버네티스 환경에 설치된 MinIO에서 버킷을 생성하고 관리하는 방법을 알아보겠습니다. MinIO CLI(mc)와 웹 콘솔 두 가지 인터페이스를 모두 활용하여 버킷 생성, 정책 설정, 객체 업로드 및 다운로드 방법을 단계별로 살펴보겠습니다.


📌 MinIO 관리 도구 이해하기

MinIO 관리 인터페이스 종류

MinIO는 다양한 방법으로 관리할 수 있습니다:

  • MinIO 웹 콘솔 - 직관적인 GUI 제공
  • MinIO 클라이언트(mc) - 강력한 명령줄 도구
  • AWS S3 호환 SDK - 다양한 프로그래밍 언어 지원
  • REST API - 직접 API 호출 가능

MinIO 버킷 관리 도구와 작업 흐름 다이어그램

 

 

MinIO 클라이언트(mc) 소개

MinIO 클라이언트는 다음과 같은 특징이 있습니다:

  • S3 호환 스토리지를 위한 현대적인 대체 CLI
  • AWS CLI와 유사하지만 더 간결한 명령 구조
  • 로컬 파일시스템 및 클라우드 스토리지 통합 관리
  • 파일 업로드/다운로드 외에도 버킷 정책, 알림 등 관리 기능 제공

▶️ MinIO 클라이언트 vs AWS CLI:

  • mc: mc cp file.txt myminio/bucket/
  • aws cli: aws s3 cp file.txt s3://bucket/

📌 MinIO 클라이언트(mc) 설치 및 구성

MinIO 클라이언트 설치

로컬 시스템에 mc를 설치합니다:

# Linux에 설치
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/

# macOS에 설치 (Homebrew 사용)
brew install minio/stable/mc

# Windows에 설치 (PowerShell 사용)
wget https://dl.min.io/client/mc/release/windows-amd64/mc.exe -OutFile mc.exe

 

MinIO 서버 연결 설정

이전에 설치한 MinIO 서버에 연결하기 위한 별칭을 설정합니다:

# 기본 형식: mc alias set <별칭> <MinIO-엔드포인트> <액세스키> <시크릿키>

# 로컬 쿠버네티스 환경 MinIO 연결 설정
# NodePort 서비스를 통한 접근 (EP06에서 설정한 서비스 사용)
mc alias set minio-kube http://<노드IP>:30900 minioadmin minioadmin

# 연결 확인
mc admin info minio-kube

 

포트포워딩을 사용하여 접근하는 방법도 있습니다:

# 포트포워딩 설정
kubectl port-forward svc/minio-api 9000:9000 -n minio-system &

# 로컬호스트로 연결 설정
mc alias set minio-local http://localhost:9000 minioadmin minioadmin

📌 MinIO CLI로 버킷 관리하기

버킷 기본 작업

MinIO 클라이언트를 사용한 기본 버킷 관리 명령어:

# 버킷 생성
mc mb minio-kube/my-first-bucket                # 기본 버킷 생성
mc mb minio-kube/logs-bucket                    # 로그 저장용 버킷 생성
mc mb minio-kube/images-bucket                  # 이미지 저장용 버킷 생성

# 버킷 목록 확인
mc ls minio-kube                                # 모든 버킷 나열

# 버킷 정보 확인
mc stat minio-kube/my-first-bucket              # 버킷 상세 정보 조회

 

객체 업로드 및 다운로드

파일 업로드 및 다운로드 작업:

# 파일 업로드
mc cp ./example.txt minio-kube/my-first-bucket/  # 단일 파일 업로드
mc cp -r ./images/ minio-kube/images-bucket/     # 디렉토리 업로드

# 객체 목록 확인
mc ls minio-kube/my-first-bucket/                # 버킷 내 객체 나열

# 파일 다운로드
mc cp minio-kube/my-first-bucket/example.txt ./downloaded-example.txt  # 단일 파일 다운로드
mc cp -r minio-kube/images-bucket/ ./downloaded-images/                # 디렉토리 다운로드

 

버킷 정책 설정

버킷 접근 정책 관리:

# 버킷을 공개 읽기 가능으로 설정
mc policy set download minio-kube/images-bucket

# 버킷을 읽기/쓰기 가능으로 설정
mc policy set readwrite minio-kube/logs-bucket

# 버킷을 비공개로 설정 (기본값)
mc policy set none minio-kube/my-first-bucket

# 현재 정책 확인
mc policy get minio-kube/images-bucket

 

버킷 정책 옵션:

  • none: 인증된 사용자만 접근 가능 (기본값)
  • download: 누구나 다운로드(읽기) 가능
  • upload: 누구나 업로드(쓰기) 가능, 다운로드 불가
  • public: 누구나 업로드 및 다운로드 가능
  • readwrite: 인증된 사용자가 읽기/쓰기 가능

버킷 이벤트 알림 설정

특정 이벤트에 대한 알림 설정:

# webhook 알림 설정 예시
mc event add minio-kube/logs-bucket arn:minio:sqs::primary:webhook --event put,delete

# 이벤트 설정 확인
mc event list minio-kube/logs-bucket

📌 MinIO 웹 콘솔을 통한 버킷 관리

웹 콘솔 접근하기

MinIO 웹 콘솔에 접근하는 방법:

  1. 포트포워딩 설정:
  2. kubectl port-forward svc/minio-console 9001:9001 -n minio-system &
  3. 브라우저에서 접속:
  4. http://localhost:9001
  5. EP06에서 설정한 NodePort 서비스 이용:
  6. http://<노드IP>:31901
  7. 액세스 키와 시크릿 키로 로그인 (기본값: minioadmin/minioadmin)

웹 콘솔에서 버킷 생성 및 관리

웹 인터페이스를 통한 버킷 관리 방법:

  1. 버킷 생성하기
    • 좌측 메뉴에서 "Buckets" 선택
    • "Create Bucket" 버튼 클릭
    • 버킷 이름 입력 (예: "web-console-bucket")
    • 버전 관리, 객체 잠금 등 고급 옵션 설정
    • "Create Bucket" 버튼 클릭하여 생성
  2. 객체 업로드하기
    • 생성된 버킷 클릭하여 들어가기
    • "Upload" 버튼 클릭
    • 파일 선택 또는 드래그 앤 드롭
    • 필요시 메타데이터, 태그 등 추가 정보 입력
    • "Upload" 버튼 클릭하여 완료
  3. 버킷 설정 관리하기
    • 버킷 목록에서 버킷 이름 옆 "..." 메뉴 클릭
    • "Manage" 선택하여 관리 페이지 진입
    • 접근 정책, 이벤트 알림, 수명 주기 규칙 등 설정

접근 정책 및 사용자 관리

웹 콘솔에서 접근 제어 관리:

  1. 버킷 정책 설정
    • 버킷 관리 페이지에서 "Access Policy" 탭 선택
    • 공개/비공개 설정 또는 커스텀 정책 JSON 편집
    • "Save" 버튼 클릭하여 적용
  2. 사용자 및 그룹 관리
    • 좌측 메뉴에서 "Identity" → "Users" 선택
    • "Create User" 버튼으로 새 사용자 생성
    • 액세스 키, 시크릿 키 설정
    • 정책 연결하여 권한 부여

📌 버킷 고급 기능 설정

버전 관리 활성화

객체 버전 관리 설정:

# CLI로 버전 관리 활성화
mc version enable minio-kube/my-first-bucket

# 버전 관리 상태 확인
mc version info minio-kube/my-first-bucket

 

웹 콘솔에서는:

  1. 버킷 관리 페이지로 이동
  2. "Versioning" 탭 선택
  3. "Enable" 버튼 클릭

수명 주기 관리 규칙

객체 수명 주기 설정:

# CLI로 수명 주기 규칙 설정 (JSON 파일 사용)
cat > lifecycle.json << EOF
{
  "rules": [
    {
      "id": "expire-old-logs",
      "status": "Enabled",
      "filter": {
        "prefix": "logs/"
      },
      "expiration": {
        "days": 30
      }
    }
  ]
}
EOF

mc ilm import minio-kube/logs-bucket < lifecycle.json

# 현재 수명 주기 규칙 확인
mc ilm ls minio-kube/logs-bucket

웹 콘솔에서는:

  1. 버킷 관리 페이지로 이동
  2. "Lifecycle Rules" 탭 선택
  3. "Add Rule" 버튼 클릭
  4. 필요한 설정 구성 (접두사, 만료 기간 등)

버킷 복제 설정

여러 MinIO 서버 간 버킷 복제:

# 복제 규칙 설정
mc replicate add minio-kube/my-first-bucket --remote-bucket secondary-minio/backup-bucket

# 복제 상태 확인
mc replicate ls minio-kube/my-first-bucket

📌 실무에서 유용한 버킷 관리 팁

버킷 구조화 전략

효율적인 버킷 구조 설계 방법:

  • 용도별 버킷 분리
    • 로그 데이터: logs-bucket
    • 이미지 파일: images-bucket
    • 문서 파일: docs-bucket
  • 접두사 패턴 활용
    • 날짜 기반: logs/2023/03/25/
    • 사용자 기반: users/user123/uploads/
    • 애플리케이션 기반: app1/logs/, app2/logs/

▶️ 예시 - 로그 시스템 구조:

logs-bucket/
  ├── app1/
  │   ├── 2023/
  │   │   ├── 03/
  │   │   │   ├── 25/
  │   │   │   │   ├── error.log
  │   │   │   │   └── access.log
  ├── app2/
      ├── 2023/
          ├── 03/
              ├── 25/
                  ├── error.log
                  └── access.log

대용량 파일 처리 전략

대용량 파일 효율적으로 처리하기:

  • 멀티파트 업로드 활용
  • # 5MB 단위로 분할하여 대용량 파일 업로드 mc cp --attr size-hint=5MiB large-file.iso minio-kube/my-first-bucket/
  • 미러링 명령어 활용
  • # 대용량 디렉토리 미러링 (동기화) mc mirror --watch local-directory/ minio-kube/my-first-bucket/

성능 모니터링 및 최적화

버킷 성능 모니터링:

# 실시간 이벤트 모니터링
mc watch minio-kube/logs-bucket

# 서버 성능 지표 확인
mc admin info minio-kube

📌 쿠버네티스 환경에서의 MinIO 버킷 사용 패턴

애플리케이션 통합 예시

쿠버네티스 애플리케이션에서 MinIO 사용 예시:

apiVersion: v1                      # 쿠버네티스 코어 API 버전
kind: Pod                           # 포드 리소스 유형 정의
metadata:
  name: minio-client-app            # 사용자 애플리케이션 이름 지정
  namespace: default                # 기본 네임스페이스에 배포
spec:
  containers:
  - name: app                       # 컨테이너 이름
    image: my-app:latest            # 애플리케이션 이미지
    env:
    - name: S3_ENDPOINT             # MinIO 엔드포인트 환경변수 설정
      value: "minio-api.minio-system.svc.cluster.local"  # 쿠버네티스 DNS를 통한 서비스 접근
    - name: S3_ACCESS_KEY           # MinIO 액세스 키 환경변수
      valueFrom:
        secretKeyRef:               # 시크릿에서 값 참조
          name: minio-creds         # 시크릿 이름
          key: accesskey            # 시크릿 내 키 이름
    - name: S3_SECRET_KEY           # MinIO 시크릿 키 환경변수
      valueFrom:
        secretKeyRef:               # 시크릿에서 값 참조
          name: minio-creds         # 시크릿 이름
          key: secretkey            # 시크릿 내 키 이름
    - name: S3_BUCKET               # 사용할 버킷 이름
      value: "my-app-bucket"        # 애플리케이션 전용 버킷

 

쿠버네티스 오브젝트와 MinIO 버킷 구조화

팀/네임스페이스 기반 버킷 구조화 전략:

company-data/
  ├── team-a/             # 팀별 접두사
  │   ├── namespace-1/    # 네임스페이스별 하위 접두사
  │   │   ├── app-1/      # 애플리케이션별 폴더
  │   │   ├── app-2/
  │   ├── namespace-2/
  ├── team-b/
      ├── namespace-3/
      ├── namespace-4/

 

간단한 백업 시나리오

ConfigMap과 Secret 백업 스크립트 예시:

#!/bin/bash
# MinIO 버킷에 쿠버네티스 ConfigMap과 Secret 백업

# 백업 날짜 설정
BACKUP_DATE=$(date +%Y-%m-%d)

# ConfigMap 백업
kubectl get configmaps -A -o yaml > configmaps-$BACKUP_DATE.yaml
mc cp configmaps-$BACKUP_DATE.yaml minio-kube/k8s-backups/configmaps/

# Secret 백업 (base64로 인코딩된 상태로 저장됨)
kubectl get secrets -A -o yaml > secrets-$BACKUP_DATE.yaml
mc cp secrets-$BACKUP_DATE.yaml minio-kube/k8s-backups/secrets/

# 백업 완료 메시지
echo "Backup completed: $(date)"

📌 MinIO CLI와 웹 콘솔 활용 사례 비교

CLI와 웹 콘솔 활용 시나리오

상황별 권장 인터페이스:

작업 유형 CLI 사용 웹 콘솔 사용 비고
단일 파일 업로드 ⭐⭐ ⭐⭐⭐ 적은 수의 파일은 웹 콘솔이 편리
대량 파일/폴더 업로드 ⭐⭐⭐ ⭐⭐ CLI의 미러링 기능이 우수
자동화 스크립트 ⭐⭐⭐ CLI만 스크립트 자동화 가능
버킷 관리 ⭐⭐⭐ ⭐⭐⭐ 둘 다 우수
접근 정책 설정 ⭐⭐ ⭐⭐⭐ 복잡한 정책은 웹 콘솔의 시각적 편집기 유용
성능 모니터링 ⭐⭐ ⭐⭐⭐ 웹 콘솔의 시각화 도구 우수

 

하이브리드 접근 방식 활용

CLI와 웹 콘솔 병행 사용 전략:

  1. 일상적인 관리 - 웹 콘솔 활용
    • 버킷 상태 모니터링
    • 간단한 파일 업로드/다운로드
    • 사용자 액세스 관리
  2. 자동화 및 대량 작업 - CLI 활용
    • 배치 작업 및 스크립트 자동화
    • 대량 데이터 마이그레이션
    • 정기적인 백업 작업

📌 MinIO 버킷 관리 문제 해결

일반적인 문제 및 해결 방법

MinIO 버킷 관리 시 자주 발생하는 문제:

  1. 접근 거부 오류해결 방법:
  2. # 사용자 권한 확인 mc admin user info minio-kube <사용자명> # 버킷 정책 확인 mc policy get minio-kube/my-bucket
  3. mc: <ERROR> ... AccessDenied: Access Denied.
  4. 객체 목록 조회 속도 저하
    # 대량의 객체를 가진 버킷은 접두사 사용
    mc ls minio-kube/large-bucket/prefix/
    
    # 버전 관리 비활성화 (필요시)
    mc version disable minio-kube/large-bucket
    
  5. 해결 방법:
  6. 업로드 실패
    # 디스크 공간 확인
    mc admin info minio-kube
    
    # 객체 크기 제한 확인
    mc stat minio-kube/my-bucket
    
  7. 해결 방법:

디버깅 및 문제 해결 도구

문제 진단을 위한 유용한 명령어:

# 서버 진단 정보 수집
mc admin diagnostic minio-kube

# 이벤트 추적
mc admin trace minio-kube

# 디버그 로그 활성화
mc admin console minio-kube

📌 버킷 보안 강화 방법

세분화된 접근 제어 설정

정책 기반 접근 제어 설정:

# 커스텀 정책 JSON 파일 생성
cat > readonly-policy.json << EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::images-bucket/*",
        "arn:aws:s3:::images-bucket"
      ]
    }
  ]
}
EOF

# 정책 추가
mc admin policy add minio-kube readonly-policy readonly-policy.json

# 사용자에게 정책 적용
mc admin policy set minio-kube readonly-policy user=readonly-user

 

암호화 설정

서버 측 암호화 활성화:

# KMS 설정으로 암호화 활성화 (웹 콘솔에서도 가능)
mc encrypt set sse-s3 minio-kube/sensitive-data

# 암호화 상태 확인
mc encrypt info minio-kube/sensitive-data

Summary:

  • MinIO는 CLI(mc)와 웹 콘솔을 통해 효율적으로 관리할 수 있음
  • 버킷 생성, 객체 업로드/다운로드, 정책 설정 등 기본 작업은 두 인터페이스 모두에서 가능
  • CLI는 자동화와 대량 작업에 유리하고, 웹 콘솔은 시각적 관리와 모니터링에 적합
  • 버킷 구조화 전략과 접두사 패턴을 통해 데이터를 효율적으로 관리 가능
  • 버전 관리, 수명 주기 규칙, 암호화 등 고급 기능으로 데이터 관리 및 보안 강화
  • 쿠버네티스 환경에서 MinIO 통합은 DNS 기반 접근과 시크릿 관리가 핵심
728x90