전공공부
[K8S - CKA] Volumes & Persistent Volumes (Claims) 본문
Volume
우선 쿠버네티스의 볼륨을 알아보기 전에 도커의 볼륨에 대해서 먼저 알아봅시다. 도커에 볼륨은 영구히 쓰기 위해서 컨테이너가 붙기 전에 먼저 host에 /data 와 같은 폴더에 볼륨을 두고 있습니다.이를 컨테이너를 연결 시켜서 써서 영구히 쓰려고 하죠
자 쿠버네티스에서 보면 pod도 일시적이고 pod 내부에 data도 일시적이죠. 그렇기 때문에 volume을 씁니다.
그래서, pod가 삭제가 되어도 volume이 data를 유지를 해주죠.
아래 그림을 보면 알 수 있듯이 pod는 보라색 동그라미이고 volumeMounts는 pod의 /opt 폴더의 값을 volume에 마운트 하겠다는 소리입니다. 이렇게 만들어 두면 volume이 실제 host에 생성이 되고 pod가 삭제되어도 이미 volume에 저장된 값은 저장되게 됩니다.
그런데, 멀티 노드 클러스터에서도 사용해도 좋을까요?
- 아니요. 당연히 좋지 않습니다. data volume이 각 Node1,2,3 마다 생성이 되어져 버리테니까요. 그러니 NFS, AWS ElasticBlockStore 필드를 사용해서 볼륨 스토리지를 격리해서 사용하는 것이 좋습니다.
Persistent Volumes
유저는 항상 사용할때 마다 volume을 마운트하고 직접 연결을 해야합니다. 이때 PV 풀로 관리되는 것이 편할텐데요. 이를 어떻게 사용하는지 알아봅시다.
이렇게 PV, PVC가 직접 해당 볼륨에서 얼마 만큼 사용할지를 정하고 개선해줍니다. PV가 Pool을 가지고 이를 PVC를 통해서 얼마나 사용 할 지 어디에 연결할지 등을 정해서 씁니다.
스토리지 하나를 여러개로 알아서 나눠서 쓸 수 있게 해주는 것이죠.
Persistent Volumes Claims
Persistent Volume과 Persistent Volumes Claims은 서로 다른 역할을 수행하는데요.
PV 풀을 PVC로 나눠서 바인딩을 해주는 개념으로 생각하면 될 것 같습니다.
그리고, PV, PVC는 1:1 관계로 사용 가능하니 이를 다른 PV를 생성해서 연결을 하든 해야 할 겁니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 500Mi
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-vol
spec:
accessModes: [ "ReadWriteOnce" ]
capacity:
storage: 1Gi
hostPath:
path: /home/ashok/data
PVC를 위 처럼 먼저 만들어 두고 보니 이전에 만들어진 PV가 이렇게 엑세스 모드도 같고 storage도 충분하게 있다면 어떻게 될까요?
- 동적으로 PVC가 바인딩되고 연결이 됩니다.
그러면 PVC를 삭제하면 PV는 어떻게 될까요? 당연히 PVC 삭제에 이후에 어떻게 행동 할 지에 대해서도 설정이 가능합니다. persistentVolumeReclaimPolicy: Retain, Delete, Recycle 설정으로 사용 할 수 있는데요.
1번 옵션은 PVC가 삭제되면 같은 PVC가 들어오지 않는 이상 사용 할 수 없습니다.
2번 옵션은 Delete시 같이 삭제가 됩니다.
3번 옵션은 Recycle로 재사용이 됩니다.
Storage Class
application의 volume을 사용하기 위해서는 gcloud 를 써서 정적인 프로비저닝을 해야하는데요 이는 매우 자주 있는 일이니 자동화 하는게 좋겠죠. 이를 자동화 한 것이 동적 프로비저닝입니다.
자 보이시나요 우리는 모두 storageClass를 통해서 바로 연결됨을 보장 받고 이를 나누는 것이 PVC가 행동하죠 storageClass큰 PV 풀이라고 보면 됩니다. 자 그러면 이제 PV는 필요가 없죠.
PV는 storageClass가 설정된 이름으로 대체되고 동적 프로비저닝이 되면서 PV 자체는 PVC <-> pod or deployments에 연결이 되면 자동으로 생성되어 연결됩니다.
gcp 등을 사용해서 storageClass를 만들게 되는데요 각 플러그인마다 다른 매개변수를 사용하기 때문에 그에 상응하는 명령어를 사용하고 다양한 스토리지 클래스를 만들 수 있습니다.
HDD,SDD를 사용하는등의 선택을 할 수 있는 것이죠.
위와 같이 Volume, PV, PVC, StorageClass 에 대해서 알아봤습니다. 기존에 운영하면서 자주 마주친 개체들이라 이해하기 쉬웠습니다.
참고한 사이트
https://waytoeasylearn.com/learn/persistent-volume-claim/
https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/
'Study > K8S' 카테고리의 다른 글
[K8S] SidecarContainer가 존재하는 Pod의 HPA 적용기 (1) | 2024.01.27 |
---|---|
[K8S - CKA] Networking (0) | 2024.01.22 |
[K8S - CKA] Storage in Docker (0) | 2024.01.20 |
[K8S - CKA] Network Policy (0) | 2024.01.18 |
[K8S - CKA] Security Context (0) | 2024.01.16 |