반응형
SC(Storage Class)가 필요한 이유
이전 글에서 PV, PVC를 Pod에 연결하는 방법을 배웠다.
PV, PVC 방식은 정적 프로비저닝 방식이라고 불린다.
반대로 SC는 일반적으로 동적 프로비저닝을 위해서 사용한다.
정적 프로비저닝 방식은 미리 용량을 할당해두고 사용하는 방식이었다면 동적 프로비저닝 방식은 필요할 때 용량을 할당하는 방식이다.
SC를 만들고 PVC를 만들면 자동으로 PV가 만들어진다.
다시 말해서 먼저 PV를 만들어서 용량을 할당할 필요가 없다.
SC 개념 이해하기
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-storage-class
provisioner: kubernetes.io/host-path
volumeBindingMode: Immediate
reclaimPolicy: Retain
위와 같이 SC에서 프로비저너, 볼륨 크기, 볼륨 모드 등을 정의해서 만든다.
위와 같이 PVC를 만들면서 storageClassName을 통해 SC을 지정하면 PVC는 SC 내에 있는 설정을 기준으로 PV를 할당받게 된다.
여기서 provisioner 부분을 보면 프로비저너를 선택하게 되는데, 이 프로비저너를 사용을 하려면 일반적으로 쿠버네티스 클러스터에 해당 프로비저너를 설치해서 사용해야 한다.
그래서 다른 글들의 예제를 찾아보면 aws-ebs나 gce-pd와 같은 외부 클라우드 저장소나 혹은 쿠버네티스 클러스터 외부 파일 시스템(NFS와 같은 저장소)를 설치해서 사용하고 있다.
또 동적 프로비저닝을 하지않는 프로비저닝 방식도 존재한다.
no-provisioner, host-path는 동적 프로비저닝 방식이 아니다.
위의 두 방식은 PV가 자동 할당되지 않기 때문에 사용자가 PV를 직접 만들어서 사용해줘야한다.
no-provisioner는 처음부터 PV를 생성하고 관리하며 PV를 세밀하게 제어하고 싶을 때 사용한다.
host-path는 기존 시스템에 PV가 존재하고 host-path를 사용한 경우에 그런 PV들을 관리하고 싶을 경우에 사용한다.
volumeBindingMode 값은 기본 값이 Immediate 이며 PVC가 만들어지는 즉시 바인딩된다.
값을 waitForFristConsumer로 주는 경우는 PVC와 SC가 연결되더라도 Pending 상태로 남으며
Pod에 PVC가 연결될 때 그제서야 PV를 할당 받는다.
SC로 정적 프로비저닝 해보기
개인적인 뇌피셜로 CKA 시험에선 SC로 동적 프로비저닝을 직접 해야하는 문제는 안 낼 것 같기도 하다.
물론 단순히 StorageClassName을 붙이는 정도는 낼수는 있을 것 같다.
"Understand storage classes, persistent volumes"
위 문장은 시험 범위 내용인데 단순히 이해 정도만을 바라기 때문이다.(프로비저너를 설치할 수 없어서 그런 것일 지도)
"Know how to configure applications with persistent storage"에 대한 부분은 영구 저장소를 사용하여 애플리케이션을 구성할 수 있는 능력을 보는 듯 하다. SC를 만들라고 한다면 그래봐야 no-provisioner를 사용해서 만들라고 하지 않을까 싶다.
여기에는 PV와 PVC를 생성하고 Pod에 PVC를 마운트하는 방법을 포함하는 내용을 문제로 낼 것으로 보인다.
여튼 뇌피셜이니 이런 부분은 이미 시험을 보신 분들에게 물어보는 것이 낫다.
동적 프로그래밍을 하기엔 퍼블릭 클라우드나 외부 파일시스템을 이용하고 있지 않으니 당장 SC로 정적 프로비저닝을 하는 예제 파일을 만들어보자.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-static-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
storageClassName: my-static-storage-class
hostPath:
path: /your/host/path
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-static-storage-class
provisioner: kubernetes.io/no-provisioner
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-static-pvc
spec:
storageClassName: my-static-storage-class
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
PVC에서 SC를 지정해주면 해당 SC에 대한 설정을 근거로 PV를 사용하는 것을 확인할 수 있다.
(틀린 점이 있다면 언제나 지적 환영)
728x90
'☸️ Kubernetes' 카테고리의 다른 글
[kubernetes] ConfigMap과 Security (0) | 2023.12.04 |
---|---|
[Kubernetes] Logging 알아보기 (1) | 2023.11.30 |
[kubernetes] PV, PVC를 Pod에 연결하기 (0) | 2023.11.30 |
[Kubernetes] Helm 튜토리얼 사용법 (0) | 2023.11.07 |
[kubernetes] Service Account와 Token (0) | 2023.10.27 |