[Kubernetes] Dynamic Provisioning & Volume Reclaim policy 에 대하여

김지환·2022년 12월 17일
0

TLDR

AWS EKS 운영을 하다 ebs 가 너무 많이 생성되고 남아 있어 쓸데없는 비용을 지출하게 됐었다.
원인은 Dynamic provisioning 이 되면서 남아있던 pv ( ebs volume ) 들의 reclaim policy 가 Retain으로 설정돼있었기 때문이다.

굳이 보존할 필요가 없던 volume이라 Delete policy로 정책을 변경하여 추후에도 volume이 남아서 쌓이게 되는 문제를 제거했다.

Dynamic Provisioning ( D.P )

Kubnernetes에서 volume을 만들 때 pv + pvc를 만들어서 관리를 해줘야한다.
매번 pv를 만들어서 관리를 하는 것은 꽤나 귀찮은 일이기 때문에 K8s 에서 dynamic provisioning을 제공한다.

Dynamic Provisioning 이란?

사용자가 pvc를 만들면 자동으로 pv 를 만들고 volume에 까지 연결 시켜주는 기능.

dynamic provisioning을 하기 위해서는 해당 기능을 지원해주는 Storage solution을 설치해야한다.

해당 Solution은 어느 외부 스토리지를 사용하느냐에 따라서 각각 다를텐데 aws 의 경우에는

  • Amazon Elastic Block Store(Amazon EBS) Container Storage Interface(CSI) 드라이버
  • Amazon Elastic File System(Amazon EFS) Container Storage Interface(CSI) 드라이버

2 가지 의 CSI 드라이버가 사용된다.
해당 드라이버를 설치하고 CSIDriver object를 만들어서 StorageClass의 provisioner 로 설정해주면 된다.

apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
  name: efs.csi.aws.com
  labels:
    name: efs.csi.aws.com
    owner: me
spec:
  attachRequired: false
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: efs-csi.sc
  labels:
    name: efs-csi.sc
    owner: me
provisioner: efs.csi.aws.com
reclaimPolicy: Delete | Retain | Recycle
---

다음과 같은 방식으로 설정이 가능하다.

해당 설정을 하여 StorageClass 를 만들었다면 해당 StorageClass를 pvc 의 spec 에 등록하여 주어서 연결시킨다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: airflow.efs.pvc
  namespace: airflow
  labels:
    name: airflow.efs.pvc
    owner: me
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: efs-csi.sc
  resources:
    requests:
      storage: 100Gi

이와같이 연결해주면 pvc 를 생성시켰을 때 자동으로 volume 할당된 pv가 생성되게 되는데 일반적으로 static 하게 pv, pvc를 묶어주게 됐을 때는 node 에 volume할당이 바로 되지 않지만 dynamic provisioning을 하게 되면 pv가 생성됨에 따라 바로 volume 또한 할당된다.

이와같이 D.P 방식을 사용하면 보다 쉽게 volume 형성을 할 수 있다.

Reclaim Policy

pvc 와 pv의 연결이 끊어지게 됐을 때 해당 volume을 어떻게 처리할지에 대한 정책설정이다.

Retain

retain는 데이터가 보존되지만 해당 pv를 다른 pvc로 재사용할 수는 없게 된다.

Delete

delete는 데이터가 삭제되고 pv또한 삭제되게 된다. storageclass 에서 default 정책으로 관리됨.

Reference

https://kubernetes.io/docs/home/

profile
Developer

0개의 댓글