안녕하세요,
베스핀글로벌 GCP Support팀입니다.
이번 아티클에서는 주제로 "GKE Pod에서 삭제되지 않는 Volume 사용 방법"에 대해서 다루고자 합니다.
Pod의 기본 Volume과 Persistent Volume
Pod에 기본적으로 사용되는 Volume은 EmptyDir입니다.
EmptyDir은 Pod가 생성될 때 함께 생성되고, Pod가 삭제될 때 함께 삭제되는 임시 Volume입니다.
따라서 Pod가 재시작되거나 노드 장애가 발생하면 EmptyDir에 저장된 데이터는 손실됩니다.
Pod와 생명 주기를 같이 하지 않는 영구적인 디스크 공간이 필요한 경우 Persistent Volume을 사용합니다.
Persistent Volume은 Pod의 생명 주기와 관계없이 데이터를 유지하며, Pod가 삭제되더라도 데이터는 보존됩니다.[1]
GKE에서는 Persistent Volume을 생성 및 Pod에 연결하기 위해서 요청하는 Persistent Volume Claim(PVC)가 필요합니다.
PVC는 Pod가 필요로 하는 Persistent Volume의 용량, 액세스 모드, Reclaim Policy 등을 정의합니다.
GKE는 PVC를 기반으로 적합한 Persistent Volume을 프로비저닝하고 Pod에 연결합니다.
PV의 옵션은 다음과 같습니다.
AccessMode :
- ReadWriteOnce(RWO) : 하나의 Node 에 마운트 되고 읽기 쓰기가 가능
- ReadOnlyMany(ROX) : 여러 개의 Nodes 에 마운트가 가능하며 동시에 읽기만 가능하고 쓰기는 불가능
- ReadWriteMany(RWX) : 여러 개의 Nodes 에 마운트가 가능하며 동시에 읽기와 쓰기가 가능 (파일 시스템에 따라 지원되지 않을 수 있습니다.)
Reclaim Policy : PV가 더 이상 사용되지 않을 때 데이터를 어떻게 처리할지 정의
- Retain : PV를 삭제하지 않고 데이터를 유지, 수동으로 PV를 삭제하고 데이터를 관리 필요
- Delete : PV를 삭제하고 연결된 영구 디스크도 함께 삭제
Persistent Volume 사용 예시
아래는 Persistent Volume을 사용하여 GKE Pod에 영구적인 스토리지를 제공하는 간단한 예시입니다.
# pvc-pod-demo.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageClassName: standard-rwo
---
kind: Pod
apiVersion: v1
metadata:
name: pod-demo
spec:
volumes:
- name: pvc-demo-vol
persistentVolumeClaim:
claimName: pvc-demo
containers:
- name: pod-demo
image: nginx
resources:
limits:
cpu: 10m
memory: 80Mi
requests:
cpu: 10m
memory: 80Mi
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: pvc-demo-vol
위 예시 매니페스트는 단일 노드에 의한 읽기-쓰기로 마운트되는 것을 허용하는 30기비바이트(GiB) 스토리지의 디스크에 대한 요청입니다.
참조링크
[1] GKE Persistent Volume
https://cloud.google.com/kubernetes-engine/docs/concepts/persistent-volumes
관련 문의사항이 있으시면 Support Portal에 문의해 주시기 바랍니다.
감사합니다.