EFS를 통한 EKS 영구 저장 데이터 관리

George(박상조)
번개장터 기술 블로그
4 min readSep 26, 2019

안녕하세요. 번개장터 소프트웨어 엔지니어 박상조입니다. k8s는 기본적으로 Pod의 데이터들이 보존되지 않기 때문에 만약 보관해야하는 데이터가 있다면 볼륨을 통해 관리해야 합니다. 그래서 Persistent Volume에 대해 알아보겠습니다.

먼저 EKS에서 사용할 수 있는 pv는 EBS와 EFS로 2가지가 있습니다. 차이점을 알아보겠습니다.

EBS는 EFS보다 용량대비 비용이 저렴하지만 pod이 zone에서 자유롭고 배포시에도 매끄럽게 연결되게 하기 위해서 EFS를 사용합니다. 만약 간단하게 설정하고 동시연결이 필요하지 않고 zone도 고정돼 있다면 EBS를 선택하는것도 괜찮은 방법입니다.

efs-provisioner

EKS는 기본적으로 pv를 생성할 때 EBS를 사용합니다. 하지만 위의 여러가지 이유 때문에 EFS를 사용해야하는 경우가 있고 EFS를 사용하기 위해서는 efs-provisioner라는 도구가 필요합니다.

helm install --name efs-provisioner \
--set efsProvisioner.efsFileSystemId=EFS SYSTEM ID \
--set efsProvisioner.awsRegion=AWS REGION \
stable/efs-provisioner

위와같이 helm으로 간단하게 설치할 수 있습니다.

  1. EFS SYSTEM ID: EFS를 생성하면 나오는 File system ID 입니다. 사용할 efs의 ID를 넣어주시면 됩니다.
  2. AWS REGION: 사용할 EFS의 Region을 넣어주시면 됩니다.

이제 EFS를 pv로 사용할 준비가 끝났습니다. 그럼 간단하게 테스트를 해보겠습니다. 먼저 pvc를 생성 하겠습니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
labels:
app: test-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 8Gi
storageClassName: efs

다음은 위 pvc를 사용할 pod을 간단하게 만들어 보겠습니다.

apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: busybox
volumeMounts:
- name: efs-pv
mountPath: /pvc
restartPolicy: Always
volumes:
- name: efs-pv
persistentVolumeClaim:
claimName: test-pvc

이 busybox 안에 들어가서 test라는 파일을 하나 만들어 줍니다.

kubectl exec -it busybox sh
touch /pvc/test

이제 pod을 삭제해 줍니다.

kubectl delete po busybox

다시 같은 pod을 띄워주고 아까 만들어 준 test파일이 잘 있는지 확인 해줍니다.

kubectl exec -it busybox sh
ls pvc

이제 EFS를 EKS의 pv로 사용할 수 있게 됐습니다. 읽어주셔서 감사합니다.

--

--