소개
이번 실습에서는 Kubernetes에서 PersistentVolume(PV)을 사용하여 애플리케이션 데이터를 저장하는 방법을 배웁니다.
PersistentVolume(PV)은 클러스터 내의 네트워크 스토리지 조각을 나타내는 Kubernetes 리소스입니다. 이를 사용하면 컨테이너의 수명 주기와 독립적으로 애플리케이션 데이터를 저장할 수 있습니다. 즉, 컨테이너가 종료되거나 다른 노드로 이동하더라도 데이터는 안전하게 보존됩니다.
이번 실습에서는 PersistentVolume을 생성하고, 이를 사용하여 간단한 웹 애플리케이션의 데이터를 저장해 봅니다. 그런 다음, 애플리케이션을 수정하여 PersistentVolumeClaim(PVC)을 통해 PersistentVolume에 액세스하도록 설정하고, 마지막으로 PVC를 수정하여 특정 스토리지 리소스를 요청하는 방법을 실습합니다.
Minikube 클러스터 시작하기
리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube는 로컬 머신에서 실행되는 경량 Kubernetes 환경입니다.
작업 디렉토리로 이동:
터미널을 열고 기본 프로젝트 폴더로 이동합니다:
cd /home/labex/projectMinikube 시작:
Minikube를 시작하여 Kubernetes 클러스터를 초기화합니다:
minikube start- 이 명령은 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
- 시스템 성능에 따라 Minikube가 시작되는 데 몇 분 정도 걸릴 수 있습니다.
Minikube 실행 상태 확인:
Minikube 클러스터의 상태를 확인합니다:
minikube statuskubelet및apiserver와 같은 구성 요소가Running상태인지 확인합니다.- 클러스터가 실행 중이 아니라면
minikube start를 다시 실행하세요.
Minikube 시작 시 문제가 발생하면 minikube delete를 사용하여 환경을 초기화할 수 있습니다.
PersistentVolume 생성하기
이 단계에서는 데이터를 저장하는 데 사용할 PersistentVolume을 생성합니다. 다음 내용으로 pv.yaml이라는 YAML 파일을 생성하세요:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /mnt/data
이 파일은 1Gi 용량과 ReadWriteOnce 액세스 모드를 가진 PersistentVolume을 생성합니다. hostPath 필드는 데이터가 호스트 머신의 /mnt/data 경로에 저장됨을 나타냅니다. persistentVolumeReclaimPolicy 필드는 Retain으로 설정되어 있어, PersistentVolume이 삭제되더라도 데이터가 보존됩니다.
다음 명령을 사용하여 클러스터에 PersistentVolume을 적용합니다:
kubectl apply -f pv.yaml
간단한 웹 애플리케이션 배포하기
이 단계에서는 1단계에서 생성한 PersistentVolume에 데이터를 저장할 간단한 웹 애플리케이션을 배포합니다. 다음 내용으로 web-app.yaml이라는 YAML 파일을 생성하세요:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 1
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: nginx
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html/data
volumes:
- name: data
persistentVolumeClaim:
claimName: my-pvc
이 파일은 레플리카 1개와 nginx 이미지를 실행하는 컨테이너를 포함한 Deployment를 생성합니다. volumeMounts 필드는 컨테이너가 /usr/share/nginx/html/data 경로에 PersistentVolume을 마운트하도록 지정합니다. volumes 필드는 컨테이너가 my-pvc라는 이름의 PersistentVolumeClaim을 사용하도록 지정합니다.
다음 명령을 사용하여 클러스터에 Deployment를 적용합니다:
kubectl apply -f web-app.yaml
PersistentVolumeClaim 생성하기
이 단계에서는 1단계에서 생성한 PersistentVolume으로부터 스토리지를 요청하기 위한 PersistentVolumeClaim(PVC)을 생성합니다. 다음 내용으로 pvc.yaml이라는 YAML 파일을 생성하세요:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
이 파일은 ReadWriteOnce 액세스 모드를 가지고 PersistentVolume으로부터 500Mi의 스토리지를 요청하는 PersistentVolumeClaim을 생성합니다.
다음 명령을 사용하여 클러스터에 PersistentVolumeClaim을 적용합니다:
kubectl apply -f pvc.yaml
데이터 지속성 확인하기
이 단계에서는 데이터가 PersistentVolume에 지속적으로 저장되는지 확인합니다. 컨테이너에서 실행 중인 웹 애플리케이션에 액세스하여 PersistentVolume에 데이터를 기록해 봅니다.
먼저, 다음 명령을 실행하여 애플리케이션을 실행 중인 파드(pod)의 이름을 찾습니다:
kubectl get pods -l app=web-app
애플리케이션을 실행 중인 단일 파드가 보일 것입니다. 파드 이름을 기록해 두세요.
다음으로, 다음 명령을 실행하여 애플리케이션이 실행 중인 컨테이너의 셸 세션을 엽니다:
kubectl exec -it pod-name -- /bin/sh
pod-name을 앞서 기록한 파드 이름으로 바꾸세요.
셸 세션에 접속한 후, 다음 명령을 실행하여 test.txt 파일을 추가합니다:
echo "This is a test file." > /usr/share/nginx/html/data/test.txt
이 명령은 PersistentVolume의 데이터 디렉토리에 "This is a test file."이라는 텍스트가 담긴 test.txt 파일을 생성합니다.
다음 명령으로 웹 애플리케이션을 삭제합니다:
kubectl delete deployment web-app
다음 명령으로 웹 애플리케이션을 다시 생성합니다:
kubectl apply -f web-app.yaml
다음 명령을 사용하여 데이터 디렉토리에 생성했던 파일이 여전히 존재하는지 확인합니다:
kubectl get pods -l app=web-app
kubectl exec pod-name -- cat /usr/share/nginx/html/data/test.txt
pod-name을 앞서 기록한 파드 이름으로 바꾸세요.
PVC 스토리지 리소스 수정하기
이 단계에서는 PVC를 수정하여 PersistentVolume으로부터 특정 스토리지 리소스를 요청하도록 변경합니다. pvc.yaml 파일을 수정하여 500Mi 대신 1Gi의 스토리지를 요청하도록 변경하세요.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
마지막 줄에 allowVolumeExpansion: true 필드를 추가하여 스토리지 클래스를 수정합니다.
kubectl edit storageclass standard

다음 명령을 사용하여 업데이트된 PersistentVolumeClaim을 클러스터에 적용합니다:
kubectl delete deployment web-app
kubectl delete pvc my-pvc
kubectl apply -f web-app.yaml
kubectl apply -f pvc.yaml
요약
이번 실습에서는 Kubernetes에서 PersistentVolume을 사용하여 애플리케이션 데이터를 저장하는 방법을 배웠습니다. PersistentVolume을 생성하고, 이를 사용하는 간단한 웹 애플리케이션을 배포했으며, PersistentVolumeClaim을 생성하여 스토리지를 요청하고, PVC를 수정하여 특정 스토리지 리소스를 요청하는 과정을 거쳤습니다. 또한 컨테이너가 종료되거나 다른 노드로 이동하더라도 데이터가 PersistentVolume에 안전하게 보존됨을 확인했습니다.


