1. Amazon EFS CSI Driver 설치
이번 실습은 3장 Amazon EKS 원클릭 배포 환경에서 진행합니다.
그리고 새롭게 인프라를 배포하면 아래 기본 설정 명령을 입력 후 진행 바랍니다.
기본 설정 명령어
1.1. Amazon EFS CSI Driver 설치 및 IRSA 생성
Amazon EFS CSI Driver의 권한을 위임하기 위한 인증 절차로 IRSA 구성을 선행하고 Amazon EFS CSI Driver를 설치합니다.
Amazon EFS CFI Driver 버전 정보
aws eks describe-addon-versions \
--addon-name aws-efs-csi-driver \
--kubernetes-version 1.26 \
--query "addons[].addonVersions[].[addonVersion, compatibilities[].defaultVersion]" \
--output text
Bash
복사
# Amazon EFS CSI Driver 버전 정보 (True = 기본 설치 버전)
IRSA 생성
eksctl create iamserviceaccount \
--name efs-csi-controller-sa \
--namespace kube-system \
--cluster ${CLUSTER_NAME} \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
--approve \
--role-only \
--role-name AmazonEKS_EFS_CSI_DriverRole
Bash
복사
# AWS 관리형 IAM Policy인 AmazonEFSCSIDriverPolicy 사용
eksctl get iamserviceaccount --cluster ${CLUSTER_NAME}
Bash
복사
# IRSA 확인
Amazon EFS CSI Driver Add-On 설치
eksctl create addon --name aws-efs-csi-driver\
--cluster ${CLUSTER_NAME}\
--service-account-role-arn arn:aws:iam::${ACCOUNT_ID}:role/AmazonEKS_EFS_CSI_DriverRole\
--force
Bash
복사
# aws-efs-csi-driver add-on 설치
1.2. Amazon EFS CSI Driver 설치 확인
Amazon EKS 클러스터 Add-On 확인
eksctl get addon --cluster ${CLUSTER_NAME}
Bash
복사
# 클러스터에 설치된 add-on 확인
Amazon EFS CSI Driver 설치 자원 확인
kubectl get pod -n kube-system -l "app.kubernetes.io/name=aws-efs-csi-driver,app.kubernetes.io/instance=aws-efs-csi-driver"
Bash
복사
# efs-csi-driver 설치 자원 확인
Amazon EFS CSI Driver의 컨테이너 확인
kubectl get pod -n kube-system -l app=efs-csi-controller -o jsonpath='{.items[0].spec.containers[*].name}' ; echo
Bash
복사
# efs-csi-controller 파드에 컨테이너 확인
kubectl get daemonset -n kube-system -l app.kubernetes.io/name=aws-efs-csi-driver -o jsonpath='{.items[0].spec.template.spec.containers[*].name}' ; echo
Bash
복사
# efs-csi-node 데몬셋에 컨테이너 확인
2. Amazon EFS CSI Driver의 동적 프로비저닝 구성
Amazon EFS CSI Driver 환경에서 동적 프로비저닝을 구성합니다.
2.1. 동적 프로비저닝 구성 - StorageClass, PVC, 파드 생성 및 확인
신규 터미널 - 모니터링
watch 'kubectl get pv,pvc,pod; echo; kubectl get sc efs-dp-sc'
Bash
복사
# [신규 터미널 1] pod, pv, pvc, sc 모니터링
while true; do aws efs describe-access-points --query "AccessPoints[*].AccessPointId" --output text; date; sleep 1; done
Bash
복사
# [신규 터미널 2] 파일 시스템의 액세스 포인트 확인
EFS 파일 시스템 ID 변수 선언
EFS_ID=$(aws efs describe-file-systems --query "FileSystems[?Name=='myeks-EFS'].[FileSystemId]" --output text); echo $EFS_ID
Bash
복사
# EFS 파일 시스템의 ID 변수 선언
StorageClass 생성
curl -s -O https://raw.githubusercontent.com/cloudneta/cnaeblab/master/_data/efs_dp_sc.yaml
Bash
복사
# yaml 파일 다운로드
cat efs_dp_sc.yaml | yh
Bash
복사
# yaml 파일 확인
sed -i "s/fs-0123456/$EFS_ID/g" efs_dp_sc.yaml; cat efs_dp_sc.yaml | yh
Bash
복사
# 파일 시스템 ID 설정 변수 치환
kubectl apply -f efs_dp_sc.yaml
Bash
복사
# StorageClass 생성
kubectl describe sc efs-dp-sc | yh
Bash
복사
# StorageClass 확인
PVC와 파드 생성
curl -s -O https://raw.githubusercontent.com/cloudneta/cnaeblab/master/_data/efs_dp_pvc_pod.yaml
Bash
복사
# yaml 파일 다운로드
cat efs_dp_pvc_pod.yaml | yh
Bash
복사
# yaml 파일 확인
kubectl apply -f efs_dp_pvc_pod.yaml
Bash
복사
# PVC와 파드 생성
2.2. 정보 확인
efs-csi-controller의 provisioner 로그 확인
kubectl logs -n kube-system -l app=efs-csi-controller -c csi-provisioner -f
Bash
복사
# csi-provisioner의 로그 확인
데이터 확인
kubectl exec -it efs-dp-app -- sh -c 'df -hT --type=nfs4'
Bash
복사
# 파드에서 마운트 대상의 디스크 사용 확인
kubectl exec efs-dp-app -- tail -f /data/out.txt
Bash
복사
# 파드에서 out.txt 파일 내용 확인
df -hT --type=nfs4
tree /mnt/myefs
Bash
복사
# 작업용 인스턴스에서 공유 디렉토리 확인
실습 종료 후 자원 삭제
kubectl delete -f efs_dp_pvc_pod.yaml && kubectl delete -f efs_dp_sc.yaml
Bash
복사
# 파드, PVC, StorageClass 삭제
Warning: 다음 섹션의 실습을 이어서 진행할 것으로 Amazon EKS 원클릭 배포를 유지합니다. 혹시나 다음 섹션을 진행하지 않을 경우 3장 Amazon EKS 원클릭 배포를 삭제해 주길 바랍니다.
여기까지 3장의 Amazon EFS CSI Driver 실습을 마칩니다.
수고하셨습니다 :)