본문 바로가기
GCP/GKE

[GKE] 객체(Object) 스토리지 CSI 구성

by aws-evan 2025. 4. 11.
반응형

 



 

Google Cloud Storage

객체(Object) 스토리지 서비스

모든 규모의 데이터를 안전하고 확장 가능하게 저장하고, 어디서든 접근할 수 있게 해주는 클라우드 기반 스토리지 서비스

 

 

블록 스토리지, 파일 스토리지는 객체 스토리지 모두 Add On이 초기 셋팅에 가능함

 

공식문서

https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/cloud-storage-fuse-csi-driver?hl=ko&authuser=1

 

Cloud Storage FUSE CSI 드라이버로 Cloud Storage 버킷에 액세스  |  Google Kubernetes Engine (GKE)  |  Google Cloud

의견 보내기 Cloud Storage FUSE CSI 드라이버로 Cloud Storage 버킷에 액세스 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Autopilot Standard 사용자 공간의 파일 시스

cloud.google.com

 

  • Cloud Storage FUSE CSI 
    •  ReadWriteMany, ReadOnlyMany, ReadWriteOnce  지원
  • GKE 클러스터에서 GcsFuseCsiDriver를 활성화하려면 "Workload Identity" 옵션이 선택
    • GKE 생성할때 "워크로드 아이덴티티" 옵션을 선택해야만 해당 옵션이 활성화됨

 

  • Cloud Storage FUSE CSI 드라이버 사용 설정 활성화됨

 

 

  • Google Cloud Storage는 CSI는 가능하나, StorageClass 불가능하여, PV,PVC 생성시 원하는대로 작성하여 생성
  • PV,PVC YAML
# PersistentVolume 정의
apiVersion: v1
kind: PersistentVolume
metadata:
  name: gcs-fuse-csi-pv  # PV 이름
spec:
  accessModes:
  - ReadWriteMany  # 여러 Pod에서 동시에 읽기/쓰기 가능
  capacity:
    storage: 5Gi  # 요구되는 용량 (GCS에서는 의미는 거의 없음, PVC 매칭용)
  storageClassName: example-storage-class  # StorageClass 이름 (동적 프로비저닝 X, 식별용)
  claimRef:
    namespace: default  # 이 PV를 사용할 PVC의 네임스페이스
    name: gcs-fuse-csi-static-pvc  # 이 PV를 사용할 PVC 이름
  mountOptions:
    - implicit-dirs  # GCS 버킷 내 디렉토리 자동 생성 허용
  csi:
    driver: gcsfuse.csi.storage.gke.io  # GCS Fuse CSI 드라이버 지정
    volumeHandle: gke-fuse-csi  # **GCS 버킷 이름** (중요!)
    volumeAttributes:
      gcsfuseLoggingSeverity: warning  # 로깅 수준 (debug, info, warning 등)
---
# PersistentVolumeClaim 정의
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: gcs-fuse-csi-static-pvc  # PVC 이름
  namespace: default  # PVC가 속한 네임스페이스
spec:
  accessModes:
  - ReadWriteMany  # Pod 여러 개에서 동시에 사용할 수 있도록 설정
  resources:
    requests:
      storage: 5Gi  # 요청 용량 (PV와 일치해야 함)
  volumeName: gcs-fuse-csi-pv  # 연결할 PV 이름 (정적 바인딩)
  storageClassName: example-storage-class  # PV와 동일한 StorageClass 사용 (식별용)

 

  • PV, PVC 생성 완료

 

 

Cloud Storage 서비스 계정 생성

 

1) IAM계정 생성

  • IAM -> Sevice Accounts

  • Service Account Name : gcs-fuse-account

 

 

2) IAM 권한 부여

  • IAM -> Grant Access(접근 권한 부여) 

 

 

  • New prinicipals :  생성한 Service Accounts
  • Role : Storage Object Admin 선택

 

 

3) Service Account 생성

apiVersion: v1
kind: ServiceAccount
metadata:
  name: gcs-fuse-ksa
  namespace: default

 

 

4) Service Account Workload Identity 바인딩

gcloud iam service-accounts add-iam-policy-binding \
  gcs-fuse-account@concrete-keel-454704-m8.iam.gserviceaccount.com \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:concrete-keel-454704-m8.svc.id.goog[default/gcs-fuse-ksa]"

 

 

 

5) Kubernetes Service Account (KSA)에 GCP Service Account (GSA) 연결

kubectl annotate serviceaccount \
  gcs-fuse-ksa \
  iam.gke.io/gcp-service-account=gcs-fuse-account@concrete-keel-454704-m8.iam.gserviceaccount.com \
  --namespace=default

 

 

 

6) Kubernetes Pod 배포

apiVersion: v1
kind: Pod
metadata:
  name: gcs-fuse-csi-example-static-pvc
  namespace: default
  annotations:
    gke-gcsfuse/volumes: "true"
spec:
  containers:
  - image: busybox
    name: busybox
    command: ["sleep"]
    args: ["infinity"]
    volumeMounts:
    - name: gcs-fuse-csi-static
      mountPath: /data
  serviceAccountName: gcs-fuse-ksa
  volumes:
  - name: gcs-fuse-csi-static
    persistentVolumeClaim:
      claimName: gcs-fuse-csi-static-pvc
      readOnly: true

 

 

7) Kubernetes Pod 접속

 

8) Goolge Cloud Storage 데이터 확인

  • Bucket 데이터

  • Pod 접속 후 데이터 확인

 

반응형

댓글