AWS EKS 운영을 하다 ebs 가 너무 많이 생성되고 남아 있어 쓸데없는 비용을 지출하게 됐었다.
원인은 Dynamic provisioning 이 되면서 남아있던 pv ( ebs volume ) 들의 reclaim policy 가 Retain으로 설정돼있었기 때문이다.
굳이 보존할 필요가 없던 volume이라 Delete policy로 정책을 변경하여 추후에도 volume이 남아서 쌓이게 되는 문제를 제거했다.
Kubnernetes에서 volume을 만들 때 pv + pvc를 만들어서 관리를 해줘야한다.
매번 pv를 만들어서 관리를 하는 것은 꽤나 귀찮은 일이기 때문에 K8s 에서 dynamic provisioning을 제공한다.
사용자가 pvc를 만들면 자동으로 pv 를 만들고 volume에 까지 연결 시켜주는 기능.
dynamic provisioning을 하기 위해서는 해당 기능을 지원해주는 Storage solution을 설치해야한다.
해당 Solution은 어느 외부 스토리지를 사용하느냐에 따라서 각각 다를텐데 aws 의 경우에는
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 형성을 할 수 있다.
pvc 와 pv의 연결이 끊어지게 됐을 때 해당 volume을 어떻게 처리할지에 대한 정책설정이다.
retain는 데이터가 보존되지만 해당 pv를 다른 pvc로 재사용할 수는 없게 된다.
delete는 데이터가 삭제되고 pv또한 삭제되게 된다. storageclass 에서 default 정책으로 관리됨.