쿠버네티스 볼륨과 퍼시스턴트 볼륨 사용법
서론
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 데 강력한 기능을 제공합니다. 그 중에서도 볼륨(Volume)과 퍼시스턴트 볼륨(Persistent Volume)은 상태 저장 애플리케이션의 데이터를 안전하게 저장하고 관리하는 데 필수적인 역할을 합니다. 이번 포스팅에서는 쿠버네티스의 볼륨과 퍼시스턴트 볼륨의 개념과 사용법을 초보자도 이해할 수 있도록 자세히 설명합니다.
본론
쿠버네티스 볼륨의 개념
볼륨이란?
쿠버네티스에서 볼륨은 파드(Pod) 내의 컨테이너가 데이터를 공유하고 지속적으로 저장할 수 있도록 하는 디렉토리입니다. 컨테이너가 재시작되더라도 데이터가 유지되며, 여러 컨테이너 간에 데이터를 공유할 수 있습니다.
볼륨의 종류
쿠버네티스는 다양한 볼륨 유형을 지원합니다. 주요 볼륨 유형은 다음과 같습니다.
- emptyDir: 파드가 노드에 할당될 때 생성되는 빈 디렉토리입니다. 파드가 삭제되면 데이터도 함께 삭제됩니다.
- hostPath: 노드의 파일 시스템에 있는 특정 경로를 마운트합니다.
- nfs: NFS(Network File System) 서버를 마운트합니다.
- configMap: ConfigMap 데이터를 볼륨으로 마운트합니다.
- secret: Secret 데이터를 볼륨으로 마운트합니다.
- persistentVolumeClaim: 퍼시스턴트 볼륨 클레임(Persistent Volume Claim)을 통해 프로비저닝된 스토리지를 마운트합니다.
퍼시스턴트 볼륨(Persistent Volume)의 개념
퍼시스턴트 볼륨이란?
퍼시스턴트 볼륨(Persistent Volume, PV)은 클러스터 관리자가 프로비저닝한 스토리지 리소스입니다. PV는 노드의 생명 주기와 독립적으로 유지되며, 파드가 삭제되더라도 데이터가 유지됩니다. PV는 파드에서 직접 사용할 수 없으며, 퍼시스턴트 볼륨 클레임(Persistent Volume Claim, PVC)을 통해 접근할 수 있습니다.
퍼시스턴트 볼륨 클레임이란?
퍼시스턴트 볼륨 클레임(Persistent Volume Claim, PVC)은 사용자가 요청하는 스토리지 리소스입니다. PVC는 특정 크기와 접근 모드를 요청하며, PV와 매칭됩니다. PVC가 생성되면 해당 PVC를 사용하는 파드는 PVC에 바인딩된 PV를 통해 스토리지에 접근할 수 있습니다.
볼륨과 퍼시스턴트 볼륨 사용법
볼륨 사용 예시
다음은 emptyDir
볼륨을 사용하는 파드의 YAML 파일 예시입니다.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: my-volume
volumes:
- name: my-volume
emptyDir: {}
이 YAML 파일을 사용하여 파드를 생성하면, my-container
컨테이너는 /usr/share/nginx/html
경로에 emptyDir
볼륨을 마운트합니다.
kubectl apply -f my-pod.yaml
퍼시스턴트 볼륨 사용 예시
- 퍼시스턴트 볼륨(PV) 정의
다음은 퍼시스턴트 볼륨을 정의하는 YAML 파일 예시입니다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
이 YAML 파일을 사용하여 퍼시스턴트 볼륨을 생성합니다.
kubectl apply -f my-pv.yaml
- 퍼시스턴트 볼륨 클레임(PVC) 정의
다음은 퍼시스턴트 볼륨 클레임을 정의하는 YAML 파일 예시입니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
이 YAML 파일을 사용하여 퍼시스턴트 볼륨 클레임을 생성합니다.
kubectl apply -f my-pvc.yaml
- PVC를 사용하는 파드 정의
다음은 PVC를 사용하는 파드의 YAML 파일 예시입니다.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: my-volume
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-pvc
이 YAML 파일을 사용하여 파드를 생성하면, my-container
컨테이너는 /usr/share/nginx/html
경로에 PVC를 통해 PV를 마운트합니다.
kubectl apply -f my-pod.yaml
퍼시스턴트 볼륨 관리
PV와 PVC 상태 확인
PV와 PVC의 상태를 확인하려면 다음 명령어를 사용합니다.
kubectl get pv
kubectl get pvc
이 명령어는 현재 네임스페이스의 모든 PV와 PVC의 상태를 출력합니다.
PVC 삭제
PVC를 삭제하려면 다음 명령어를 사용합니다.
kubectl delete pvc my-pvc
PVC가 삭제되면 해당 PVC와 바인딩된 PV도 자동으로 해제됩니다. 그러나 PV는 여전히 클러스터에 남아 있으며, 다른 PVC와 다시 바인딩될 수 있습니다.
PV 삭제
PV를 삭제하려면 다음 명령어를 사용합니다.
kubectl delete pv my-pv
PVC와 달리 PV는 수동으로 삭제해야 합니다. PV를 삭제하면 해당 스토리지 리소스도 함께 삭제됩니다.
퍼시스턴트 볼륨의 동적 프로비저닝
쿠버네티스는 동적 프로비저닝 기능을 통해 사용자가 PVC를 생성할 때 자동으로 PV를 프로비저닝할 수 있습니다. 이를 위해 스토리지 클래스를 정의해야 합니다.
스토리지 클래스 정의
다음은 스토리지 클래스를 정의하는 YAML 파일 예시입니다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
fsType: ext4
이 YAML 파일을 사용하여 스토리지 클래스를 생성합니다.
kubectl apply -f storage-class.yaml
PVC와 스토리지 클래스 사용
다음은 스토리지 클래스를 사용하는 PVC의 YAML 파일 예시입니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dynamic-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standard
이 YAML 파일을 사용하여 PVC를 생성하면, 스토리지 클래스에 정의된 설정에 따라 자동으로 PV가 프로비저닝됩니다.
kubectl apply -f dynamic-pvc.yaml
퍼시스턴트 볼륨의 백업 및 복구
PV 백업
PV의 데이터를 백업하려면 스토리지 제공업체의 도구나 스크립트를 사용할 수 있습니다. 예를 들어, AWS EBS 볼륨을 사용하는 경우, AWS CLI를 사용하여 스냅샷을 생성할 수 있습니다.
aws ec2 create-snapshot --volume-id vol-0123456789abcdef0 --description "Backup of my-pv"
PV 복구
백업한 스냅샷을 사용하여 새로운 EBS 볼륨을 생성하고, 이를 PV로 사용하여 데이터를 복구할 수 있습니다.
aws ec2 create-volume --snapshot-id snap-0123456789abcdef0 --availability-zone us-west-2a --volume-type gp2
새로 생성된 볼륨 ID를 사용하여 PV를 정의하고, 이를 PVC에 바인딩합니다.
결론
쿠버네티스 볼륨과 퍼시스턴트 볼륨은 상태 저장 애플리케이션의 데이터를 안전하게 저장하고 관리하는 데 필수적인 역할을 합니다. 볼륨을 사용하면 파드 내에서 데이터를 공유하고, 퍼시스턴트 볼륨을 사용하면 파드의 생명 주기와 독립적으로 데이터를 지속적으로 저장할 수 있습니다. 이번 포스팅에서는 볼륨과 퍼시스턴트 볼륨의 개념, 설정 방법, 동적 프로비저닝, 그리고 백업 및 복구 방법을 자세히 설명했습니다. 이를 통해 쿠버네티스 클러스터에서 안정적이고 효율적으로 데이터를 관리할 수 있기를 바랍니다.