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=1Cloud 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 접속 후 데이터 확인
