BLOG
AWS Fargate 는 Amazon Elastic Kubernetes Service (EKS)와 Amazon Elastic Container Service (ECS) 모두에서 사용 가능한 컨테이너용 서버리스 컴퓨팅 엔진입니다. Fargate를 사용하면 개발자는 애플리케이션 구축에 집중할 수 있으므로 인프라와 관련한 번거로운 작업을 관리할 필요가 없습니다.
개발자는 각 Kubernetes 포드에 대한 리소스를 지정하며 비용은 프로비저닝 된 컴퓨팅 리소스에 대해서만 요금이 부과됩니다. Fargate를 사용할 때 각 EKS 포드는 자체 커널 런타임 환경에서 실행되며 CPU, 메모리, 스토리지 및 네트워크 리소스는 다른 포드와 공유되지 않으므로 워크로드 격리와 보안 강화를 제공합니다.
컨테이너는 유연하게 확장 및 축소되며 저장된 상태 또는 데이터는 종료 시에 삭제되기에 본질적으로 일시적인 특성을 가지고 있습니다. 2019 년 Fargate에 대한 EKS 지원을 시작한 이후 데이터 지속성 및 컨테이너화된 애플리케이션의 공유 스토리지에 대한 고객의 많은 요구 사항이 있었고 2020년 4 월 ECS에서 Fargate에 대한 Amazon Elastic File System (EFS) 지원을 발표했습니다. 이에 현재 많은 고객들이 여기에 상태 저장 워크로드를 운영하고 있습니다. 다른 고객들은 EKS 사용 시 필요한 EFS with Fargate지원을 요청해왔습니다. 이에 이 EFS 지원을 발표하게 되어 기쁘게 생각합니다.
EFS는 AWS 클라우드 서비스와 함께 사용할 수 있는 간단하고 확장 가능하며 완전 관리형 공유 파일 시스템을 제공합니다. EFS에 기록된 모든 데이터가 여러 AWS 가용 영역에 기록되기 때문에 Kubernetes 애플리케이션의 가용성을 높일 수 있습니다. EFS는 애플리케이션 중단 없이 페타 바이트 규모의 온디맨드 성장을 위해 구축되었으며 파일이 추가 및 제거됨에 따라 자동으로 확장 및 축소되므로 확장을 수용하기 위해 용량을 프로비저닝하고 관리할 필요가 없습니다. EFS 액세스 포인트는 파일 시스템의 데이터 및 전송 데이터를 암호화할 수 있으므로 보안에 민감한 워크로드에 이상적입니다.
Kubernetes는 블록 및 파일 스토리지 시스템을 컨테이너화된 워크로드에 노출하기 위한 표준인 ” 컨테이너 스토리지 인터페이스 (CSI) “를 지원합니다. EFS CSI 드라이버를 사용하면 Kubernetes 클러스터용 탄력적 파일 스토리지를 간단하게 구성할 수 있으며 이 업데이트 전에 고객은 클러스터에 연결된 Amazon EC2 작업자 노드를 통해 EFS를 사용할 수 있습니다. 이제 고객은 표준 Kubernetes API를 사용하여 EFS 파일 시스템에 액세스하도록 Fargate에서 실행되는 포드를 구성할 수도 있습니다. 이 업데이트를 통해 고객은 고가용성 파일 시스템이 필요한 상태 저장 워크로드와 공유 스토리지에 대한 액세스가 필요한 워크로드를 실행할 수 있습니다. EFS CSI 드라이버를 사용하면 전송중인 모든 데이터가 기본적으로 암호화됩니다.
2020년 7월 AWS는 EKS Amazon EFS CSI 드라이버 일반 버전을 출시했습니다. Amazon EFS CSI 드라이버를 사용하면 표준 Kubernetes 인터페이스를 사용하여 AWS에서 실행되는 EKS 및 자체 관리형 Kubernetes 클러스터 모두에 대해 탄력적인 파일 스토리지를 쉽게 구성할 수 있습니다. Kubernetes 포드가 종료되고 다시 시작되면 포드가 다른 AWS 가용 영역에서 다시 시작되더라도 CSI 드라이버가 EFS 파일 시스템을 다시 연결합니다. 표준 EC2 작업자 노드를 사용하는 경우 EFS CSI 드라이버를 포드 및 DaemonSets세트로 배포해야 합니다. 이 새로운 업데이트에서는 Fargate의 경우 이 단계가 필요하지 않으며 EFS CSI 드라이버가 Fargate 스택에 설치되고 EFS에 대한 지원이 즉시 제공되므로 설치할 필요가 없습니다. 고객은 CSI 드라이버를 설치하고 업데이트하는 데 시간과 리소스를 소비하지 않고도 Fargate for EKS와 함께 EFS를 사용할 수 있습니다.
Fargate / EKS 및 EFS 통합 구성 방법
EKS의 Farfgate에 EFS를 탑재하려면 세 가지 Kubernetes 설정을 사용해야 합니다. 이들은 StorageClass, PersistentVolume (PV) 및 PersistentVolumeClaim (PVC)입니다. StorageClass 및 PV 구성은 관리자 (또는 유사)가 애플리케이션 개발자가 EFS 파일 시스템을 사용할 수 있도록 하기 위해 수행하는 단계입니다. PVC는 애플리케이션을 배포하는 데 필요에 따라 기존 PV 풀에서 PV를 할당하는 데 사용됩니다.
StorageClass 개체는 Kubernetes 관리자가 특정 스토리지 유형 (예: EFS 또는 EBS) 및 구성 (예: 처리량, 백업 정책)을 등록할 수 있는 방법을 제공합니다. StorageClass가 정의되면 PV 개체를 사용하여 해당 클래스 내에 실제 스토리지 볼륨을 만듭니다. StorageClass 및 PV는 실제 스토리지 하위 시스템을 Kubernetes 사용자가 사용하는 방식에서 추상화하고 분리할 수 있는 Kubernetes 메커니즘입니다. 예를 들어 Kubernetes 관리자는 특정 스토리지 서비스에서 특정 스토리지 구성을 정확히 구성하는 방법을 알아야 하지만 Kubernetes 사용자는 스토리지의 추상 클래스 내에서만 볼륨을 볼 수 있기 때문에 그렇지 않습니다.
마지막 단계는 바인딩입니다. Kubernetes 사용자는 PVC 개체 및 관련 API를 통해 해당 볼륨에 대한 액세스를 요청합니다. 이러한 볼륨은 사용자가 PVC를 통해 요청할 때 동적으로 생성되거나 나중에 Kubernetes 사용자가 사용할 수 있도록 관리자가 정적으로 미리 생성해야 합니다. EFS CSI 드라이버의 현재 구현에서는 PVC 바인딩이 작동하도록 볼륨을 정적으로 미리 생성해야 합니다.
Kubernetes 영구 볼륨을 처음 사용하고 작동 방식에 대해 자세히 알고 싶다면 모든 세부 정보가 포함된 Kubernetes 문서에서 이 페이지를 참고하세요.
실제 작동을 한번 살펴보겠습니다. 먼저 동일한 AWS 리전에 자체 EFS 파일 시스템을 생성해야 합니다. EFS에 익숙하지 않은 경우 이 EFS 시작 안내서는 시작할 수 있는 좋은 리소스입니다.
EFS 파일 시스템을 생성하면 파일 시스템 ID를 얻게 됩니다. Kubernetes StorageClass 및 PersistentVolume을 사용하여 마운트 설정을 구성할 수 있습니다. 다음은 YAML 파일의 예입니다.
CSIDriver 개체
apiVersion: storage.k8s.io/v1beta1
kind: CSIDriver
metadata:
name: efs.csi.aws.com
spec:
attachRequired: false
지금은 Kubernetes가 Fargate가 자동으로 설치하는 드라이버를 검색할 수 있도록 위에 표시된 EFS CSIDriver 개체를 클러스터에 추가해야 합니다. 앞으로 이 매니페스트는 기본으로 EKS 클러스터에 추가됩니다.
스토리지 클래스
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: efs-sc
provisioner: efs.csi.aws.com
PersistentVolume (PV)
apiVersion: v1
kind: PersistentVolume
metadata:
name: efs-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
– ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: efs-sc
csi:
driver: efs.csi.aws.com
volumeHandle: <EFS filesystem ID>
volumeHandle은 파일 시스템을 생성할 때 EFS 서비스에서 반환되며 PV를 생성하기 위해 CSI 드라이버를 구성하는 데 사용해야 합니다. AWS 관리 콘솔에서 EFS 파일 시스템 ID를 얻거나 AWS CLI에서 아래 명령을 얻을 수 있습니다.
aws efs describe-file-systems –query “FileSystems[*].FileSystemId” –output text
위의 매니페스트를 적용하여 PV를 만들었으므로 이제 포드 매니페스트에 PersistentVolumeClaim을 포함하여 EFS 파일 시스템에 액세스하도록 Kurbenetes 포드를 구성합니다. 다음은 이를 수행하는 두 가지 매니페스트 예입니다.
PersistentVolumeClaim (PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: efs-claim
spec:
accessModes:
– ReadWriteMany
storageClassName: efs-sc
resources:
requests:
storage: 5Gi
Pod manifest
apiVersion: v1
kind: Pod
metadata:
name: app1
spec:
containers:
– name: app1 image: busybox command: [“/bin/sh”] args: [“-c”, “while true; do echo $(date -u) >> /data/out1.txt; sleep 5; done”]
volumeMounts:
– name: persistent-storage
mountPath: /data
volumes:
– name: persistent-storage
persistentVolumeClaim:
claimName: efs-claim
사용 가능 리전
이 기능 업데이트는 Kubernetes 버전 1.17을 사용하여 새로 생성된 EKS 클러스터에 사용할 수 있으며 곧 EKS에서 추가 Kubernetes 버전을 통해 이 기능에 대한 지원을 롤아웃 할 계획입니다. 이 업데이트는 Fargate with EKS를 사용할 수 있는 모든 AWS 리전(아시아태평양의 경우 싱가포르, 도쿄, 시드니에서 사용 가능)에서 사용할 수 있습니다. 자세한 내용은 최신 안내문에서 확인해 주시기 바랍니다.
** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.