Data Engineering/s3 minio

📘 [MinIO & Cilium 기반 오브젝트 스토리지 연동 시리즈 #3] MinIO 내부 네트워크 구조 및 s3a:// 접근 테스트

ygtoken 2025. 3. 26. 17:40
728x90

목표: Kubernetes 클러스터 내부에서 MinIO의 DNS 기반 네트워크 구조를 이해하고,
Spark 등 워크로드가 s3a:// 방식으로 MinIO에 접근할 수 있는지 실제로 테스트해봅니다.


🔎 이번 글에서 수행할 작업 요약

  1. MinIO 서비스의 DNS 구조 및 접근 주소 확인
  2. Spark 또는 테스트 파드에서 s3a:// 프로토콜로 접근 테스트
  3. Spark 설정에 필요한 핵심 fs.s3a.* 항목 정리 및 테스트

🌐 1단계: MinIO 서비스 DNS 구조 확인

이 단계의 목적: MinIO가 내부에서 어떤 DNS 주소로 노출되는지 확인하고,
s3a:// 경로로 접근할 때 사용할 수 있는 주소 형식을 파악합니다.

# MinIO 서비스 정보 확인
kubectl get svc -n minio

 

예시 출력:

NAME    TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
minio   LoadBalancer   10.96.x.x      127.0.0.1     9000/TCP         2d

✅ 내부 DNS 주소: http://minio.minio.svc.cluster.local:9000
이는 Spark 또는 다른 Pod에서 s3a:// 접근 시 설정에 사용됩니다.


🧪 2단계: Spark 또는 테스트 파드에서 s3a:// 접근 테스트

이 단계의 목적: Spark 작업 또는 PySpark 셸을 통해 MinIO에 s3a:// 경로로 접근이 가능한지 확인하고,
기본적인 파일 쓰기 테스트를 통해 설정 유효성을 검증합니다.

# Spark 실행 시 필요한 설정 옵션들
--conf spark.hadoop.fs.s3a.access.key=minioadmin \                  # MinIO Access Key
--conf spark.hadoop.fs.s3a.secret.key=minioadmin \                 # MinIO Secret Key
--conf spark.hadoop.fs.s3a.endpoint=http://minio.minio.svc.cluster.local:9000 \  # 내부 접근용 엔드포인트
--conf spark.hadoop.fs.s3a.path.style.access=true \                # MinIO는 path-style 필수
--conf spark.hadoop.fs.s3a.connection.ssl.enabled=false            # HTTP 사용 시 SSL 비활성화

✅ 위 설정을 통해 Spark는 MinIO를 AWS S3처럼 인식하고 s3a:// 경로로 파일을 읽고 쓸 수 있습니다.


📁 3단계: 파일 업로드 및 버킷 내용 확인 테스트

이 단계의 목적: s3a:// 경로로 파일을 업로드해보고,
MinIO 클라이언트(mc)를 사용해 실제로 업로드가 성공했는지 확인합니다.

# PySpark 셸에서 테스트
spark.read.text("file:///etc/hosts") \                            # 로컬 파일을 읽고
  .write.text("s3a://my-bucket1/hosts-copy")                      # MinIO 버킷에 업로드 (s3a 사용)
# MinIO Client를 통해 업로드 확인
mc alias set local http://minio.minio.svc.cluster.local:9000 minioadmin minioadmin  # MinIO 연결 설정
mc ls local/my-bucket1                                                               # 버킷 내용 확인

✅ 위 파일이 버킷에 잘 저장되면 s3a:// 접근 설정이 정상적으로 구성된 것입니다.


🧰 4단계: 자주 사용하는 Spark → MinIO 설정 정리

이 단계의 목적: 성능 최적화, 오류 방지, 안정적 연결을 위한 추가 설정을 정리하고
필요에 따라 실무 프로젝트에 쉽게 복사해서 사용할 수 있도록 구성합니다.

--conf spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \   # s3a 구현체 명시
--conf spark.hadoop.fs.s3a.connection.timeout=5000 \                        # 연결 타임아웃 설정
--conf spark.hadoop.fs.s3a.attempts.maximum=3 \                             # 재시도 횟수 제한
--conf spark.hadoop.fs.s3a.fast.upload=true                                 # 빠른 업로드 활성화

✅ 실무 적용 팁 요약

설정 키 의미 및 권장 사항
endpoint 내부 DNS 주소를 정확히 입력해야 함
access.key / secret.key 테스트용은 하드코딩 가능, 실무에서는 Secret 연동 권장
path.style.access MinIO는 AWS와 달리 반드시 true로 설정해야 함
fast.upload S3 업로드 병렬화에 필수로 권장되는 설정

 

📎 요약 및 핵심 정리

  • MinIO가 Kubernetes 클러스터 내부에서 어떻게 DNS로 접근 가능한지 확인하고, Spark 등에서 사용할 s3a:// 주소를 명확히 파악함
  • Spark 작업에서 fs.s3a.* 관련 설정 항목들을 구성하고, MinIO와의 연동을 위한 필수 설정을 테스트함
  • 실제 파일을 MinIO 버킷으로 업로드하고 mc CLI를 통해 정상적으로 저장되었는지 검증함
728x90