# 퍼시스턴트클레임을 이용하는 mongodb pod 생성
kubectl create -f mongodb-pod-pvc.yaml
# mongodb 셸 접속
kubectl exec -it mongodb mongo
# mongodb db 변경
use mystore
# 데이터 insert
db.foo.insert({name:'foo'})
# 데이터 조회
db.foo.find()
6.5.5 퍼시스턴트볼륨과 퍼시스턴트볼륨클레임 사용의 장점 이해하기
GCE 퍼시스터턴트 디스크를 직접 사용하는 경우와 PVC + PV를 사용하는 경우 비교
개발자가 직접 인프라스트럭처에서 스토리지를 가져오는 방식보다는 PV + PVC을 통해간접적으로 가져오는 방식이 더 간단하다(인프라스트럭처를 몰라도됨)
또한 동일한 파드와 클레임 매니페스트는 인프라스트럭처와는 관련된 어떤것도 참조하지 않으므로 다른 쿠버네티스 클러스터에서도 그대로 사용할 수 있다.
"클레임은 x만큼의 스토리지가 필요하고 한 번에 하나의 클라이언트에서 읽기와 쓰기를 할 수 있어야 한다"만 명시한다.
6.5.6 퍼시스턴트볼륨 재사용
# mongodb pod 삭제
kubectl delete pod mongodb
# pvc 삭제
kubectl delete pvc mongodb-pvc
#pvc, pod 재생성 ( 이 경우 pvc는 바로 volume을 할당받지 못하고 Pending 상태가 된다.)
kubectl create -f mongodb-pvc.yaml
kubectl create -f mongodb-pod-pvc.yaml
# pvc 조회
kubectl get pvc
# pv 조회 ( 퍼시스턴트볼륨의 상태가 Released로 표시되고 Available이 아니다. 그 이유는 이미 볼륨을 사용했기 떄문에 데이터를 가지고 있어서 새로운 클레임을 바인딩할 수 없는 상태)
kubectl get pv
퍼시스턴트볼륨을 수동으로 다시 클레임하기
persistentVolumeClaimPolicy를 Retain으로 설정하면 퍼시스턴트볼륨클레임이 해제되더라도 데이터가 남아있으면 상태가 Available로 풀리지 않는다.
퍼시스턴트볼륨을 자동으로 다시 클레임하기
다른 리클레임 정책인 Recycle과 Delete가 있는데 Recycle은 볼륨의 콘텐츠를 삭제하고 다시 클레임될수 있도록 만드는 옵션이다.
Delete 정책은 쿠버네티스에서 퍼시스턴트볼륨 오브젝트와 외부 인프라(예: AWS EBS, GCE PD, Azure Disk 또는 Cinder 볼륨)의 관련 스토리지 자산을 모두 삭제한다.
Recycle과 Delete의 차이는 pvc가 삭제될때 pv까지 삭제하느냐 안하느냐에 대한 차이가 있음(Delete는 pvc를 삭제하면 pv까지 삭제함)
6.6 퍼시스턴트볼륨의 동적 프로비저닝
6.6.2 퍼시스턴트볼륨클레임에서 스토리지 클래스 요청하기
특정 스토리지클래스를 요청하는 pvc 정의
클레임을 생성하면 fast 스토리지클래스 리소스에 참조된 프로비저너가 퍼시스턴트볼륨을 생성한다.
PVC에서 존재하지 않는 스토리지클래스를 참조하면 PV 프로비저닝은 실패한다.
kubectl describe 로 확인해보면 ProvisioningFailed 이벤트 표시됨.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongodb-pvc
spec:
storageClassName: fast # PVC는 사용자 정의 스토리지 클래스를 요청
resources:
requests:
storage: 100Mi
accessModes:
- ReadWriteOnce
이렇게 생성된 PV는 리클레임 정책 Delete을 가지며, PVC가 삭제되면 PV도 삭제된다.
# 스토리지클래스 생성
kubectl create -f storageclass-fast-hostpath.yaml
# PVC 생성
kubectl create -f mongodb-pvc-dp.yaml
# pvc 조회
kubectl get pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mongodb-pvc Bound pvc-b767134f-218a-48cc-b1a4-4787a661fd09 100Mi RWO fast 16m
# pv 조회
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-b767134f-218a-48cc-b1a4-4787a661fd09 100Mi RWO Delete Bound default/mongodb-pvc fast 16m
스토리지 클래스 사용하는 법 이해하기
스토리지클래스의 좋은 점은 클레임 이름으로 이를 참조한다는 사실. 그래서 다른 클러스터간 스토리지클래스 이름을 동일하게 사용한다면 PVC 정의를 다른 클러스터로 이식도 가능하다.
6.6.3 스토리지 클래스를 지정하지 않는 동적 프로비저닝
# 스토리지 클래스 조회
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
fast k8s.io/minikube-hostpath Delete Immediate false 18m
standard (default) k8s.io/minikube-hostpath Delete Immediate false 26h
# 기본 스토리지 클래스 확인
kubectl get sc standard -o yaml
6. 볼륨 : 컨테이너에 디스크 스토리지 연결
6.1 볼륨 소개
6.1.1 볼륨 예제
6.1.2 사용 가능한 볼륨 유형 소개
6.2 볼륨을 사용한 컨테이너간 데이터 공유
6.2.1 emptyDir 볼륨 사용
파드에 emptyDir 볼륨 사용(동일한 볼륨을 공유하는 컨테이너 2개가 있는 파드)
실행중인 파드 보기
emptyDir을 사용하기 위한 매체 지정하기
6.2.2 깃 리포지터리를 볼륨으로 사용하기
복제된 깃 리포지터리 파일을 서비스하는 웹 서버 실행하기
gitRepo 볼륨에 대한 정리
6.3 워커 노드 파일시스템의 파일 접근
6.3.1 hostPath 볼륨 소개
6.3.2 hostPath 볼륨을 사용하는 시스템 파드 검사하기
6.4 퍼시스턴트 스토리지 사용
6.4.1 GCE 퍼시스턴트 디스크를 파드 볼륨에 사용하기
6.4.2 기반 퍼시스턴트 스토리지로 다른 유형의 볼륨 사용하기
AWS Elastic Block Store 볼륨 사용
NFS 볼륨 사용
다른 스토리지 기술 사용
6.5 기반 스토리지 기술과 파드 분리
6.5.1 퍼시스턴트볼륨(PV, PersistentVolume)과 퍼시스턴트볼륨클레임(PVC, PersistentVolumeClaim)
6.5.2 퍼시스턴트볼륨 생성
정의
persistentVolumeReclaimPolicy
생성 및 조회
6.5.3 퍼시스턴트볼륨클레임 생성을 통한 퍼시스턴트볼륨 요청
퍼시스턴트볼륨클레임 생성하기
퍼시스턴트볼륨클레임 조회하기
퍼시스턴트볼륨 접근모드
6.5.4 파드에서 퍼시스턴트볼륨클레임 사용하기
mongodb test
6.5.5 퍼시스턴트볼륨과 퍼시스턴트볼륨클레임 사용의 장점 이해하기
6.5.6 퍼시스턴트볼륨 재사용
퍼시스턴트볼륨을 수동으로 다시 클레임하기
퍼시스턴트볼륨을 자동으로 다시 클레임하기
6.6 퍼시스턴트볼륨의 동적 프로비저닝
6.6.2 퍼시스턴트볼륨클레임에서 스토리지 클래스 요청하기
특정 스토리지클래스를 요청하는 pvc 정의
스토리지클래스 정의
동적 프로비저닝된 PV와 생성된 PVC 조회
스토리지 클래스 사용하는 법 이해하기
6.6.3 스토리지 클래스를 지정하지 않는 동적 프로비저닝
스토리지 클래스를 지정하지 않고 퍼시스턴트볼륨클레임 생성하기
퍼시스턴트볼륨클레임을 미리 프로비저닝된 퍼시스턴트볼륨으로 바인딩 강제화하기
퍼시스턴트볼륨 동적 프로비저닝의 플로우
6.7 요약