AWS EFS CSI Driver
개요
4.RESOURCE/KNOWLEDGE/AWS/AWS의 NFS 스토리지인 Amazon Elastic File System를 사용하는 CSI 드라이버.
nfs인 만큼 기본적으로 파일시스템으로서 프로비저닝된 상태의 스토리지를 제공받을 수 있다.
EBS CSI Driver와의 차이
AWS EBS CSI Driver와 다른 점이 몇 가지 있다.
- 이미 프로비저닝된 Amazon Elastic File System가 있는 상태에서 이 자원을 활용한다.
- nfs 서버를 이용하는 것과 똑같다.
- 다중 읽기쓰기(ReadWriteMany)가 가능하다.
- 멀티 AZ가 가능하다.
- 블록 스토리지 지원이 되지 않는다.
구조
다른 nfs 서버와 동작 역시 다르지 않다.
미리 프로비저닝된 하나의 efs 볼륨의 내부를 활용해 공간을 마운팅해주는 방식이다.
이미 존재하는 공간을 활용하는 것이니 활용하고자 하는 VPC에 마운팅할 수 있도록 타겟 세팅을 해줘야 한다.
기본적으로 하나의 pvc는 efs에 하나의 액세스포인트를 생성하며, 이를 기반으로 마운팅을 지점을 파드에 제공한다.
설치
EKS의 경우 애드온으로 쉽게 설치가 가능하다.
컨트롤러 역할을 할 파드에는 당연히 IRSA라던가, 하는 권한 설정이 필요하다.
resource "aws_eks_addon" "efs_csi" {
cluster_name = module.eks.cluster_name
addon_name = "aws-efs-csi-driver"
addon_version = "v2.1.4-eksbuild.1"
resolve_conflicts_on_update = "PRESERVE"
configuration_values = jsonencode({ })
service_account_role_arn = module.efs_csi_irsa.iam_role_arn
}
module "efs_csi_irsa" {
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
version = "5.52.2"
role_name = "efs-csi"
attach_efs_csi_policy = true
force_detach_policies = true
oidc_providers = {
eks = {
provider_arn = module.eks.oidc_provider_arn
namespace_service_accounts = ["kube-system:efs-csi-controller-sa"]
}
}
}
테라폼 딸깍으로 광명 찾을 수도 있다!
주의할 건, 미리 만들어진 Amazon Elastic File System가 있는 상태여야 한다는 것이다.
이 efs를 사용하고자 하는 클러스터에 미리 타겟포인트를 파두어야 해당 경로로 접근하여 efs를 스토리지로 활용할 수 있게 된다.
세팅
aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text
efs 볼륨 id를 먼저 알아내야 한다.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: efs-sc
provisioner: efs.csi.aws.com
parameters:
provisioningMode: efs-ap # 엑세스엔드포인트 모드. 다른 것 불가능
fileSystemId: fs-92107410
directoryPerms: "700"
basePath: "/dynamic_provisioning" # 해당 볼륨의 어디를 활용할 건지
subPathPattern: "${.PVC.namespace}/${.PVC.name}" # optional
ensureUniqueDirectory: "true" # 알아서 디렉 이름이 고유하도록 uuid 붙이는 설정
reuseAccessPoint: "false" # optional
스토리지 클래스는 이런 식으로 만들어준다.
csi:
driver: efs.csi.aws.com
volumeHandle: fs-e8a95a42::fsap-068c22f0246419f75
pv에 바로 명시해서 세팅을 한다면 이렇게 volumeHandle
부분에 만들어진 efs 볼륨 id를 적어주면 된다.
특정 액세스포인트로 한정을 더 짓고 싶다면 위처럼 {fs id}::{ap id}
로 조금 더 구체적으로 적어준다.
레포지토리 문서에서는 정적 프로비저닝을 추천하는데, 그 이유는 동적 프로비저닝 시 액세스 포인트 유저 신원이 적용되기 때문이다.
nfs에서도 마운팅 이후 일어나는 작업이 실제 파일시스템에 어떻게 될지 지정을 할 수 있는데, 현재 동적 프로비저닝 때는 무조건 액세스포인트에서 설정되는 유저 정보가 파일에 기록된다는 듯 하다.
관련 문서
이름 | noteType | created |
---|