반응형
- 아키텍처
- Amazon Elastic File System(Amazon EFS)은 완전히 탄력적인 서버리스 파일 스토리지를 제공하므로 스토리지 용량과 성능을 프로비저닝하거나 관리하지 않고도 파일 데이터를 공유할 수 있습니다
- 사용 가능한 EFS CSI Driver 버전
aws eks describe-addon-versions \
--addon-name aws-efs-csi-driver \
--kubernetes-version 1.26 \
--query "addons[].addonVersions[].[addonVersion, compatibilities[].defaultVersion]" \
--output text
- OIDC 공급자 연결
eksctl utils associate-iam-oidc-provider --cluster=my-cluster --approve
- IRSA생성
// AWS 관리형 IAM Policy인 AmazonEFSCSIDriverPolicy 사용
eksctl create iamserviceaccount \
--name efs-csi-controller-sa \
--namespace kube-system \
--cluster my-cluster \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
--approve \
--role-only \
--role-name AmazonEKS_EFS_CSI_DriverRole
- IRSA 확인
eksctl get iamserviceaccount --cluster my-cluster
- EKS EFS CSI Driver Add-On 설치
eksctl create addon --name aws-efs-csi-driver\
--cluster my-cluster \
--service-account-role-arn arn:aws:iam::976442799645:role/AmazonEKS_EFS_CSI_DriverRole\
--force
- EKS EFS CSI Driver Add-On 확인
eksctl get addon --cluster my-cluster
- EKS EFS CSI Driver 확인
kubectl get daemonset -n kube-system | grep efs-csi
kubectl get pods -n kube-system | grep efs-csi
EKS EFS 변수 생성 및 보안 그룹 생성
- 클러스터가 있는 VPC ID를 검색하여 이후 단계에서 사용할 변수에 저장
vpc_id=$(aws eks describe-cluster \
--name my-cluster \
--query "cluster.resourcesVpcConfig.vpcId" \
--output text)
- 클러스터의 VPC에 대한 CIDR 범위를 검색하여 이후 단계에서 사용할 수 있도록 변수에 저장
cidr_range=$(aws ec2 describe-vpcs \
--vpc-ids $vpc_id \
--query "Vpcs[].CidrBlock" \
--output text \
--region us-east-1)
- 보안 그룹 생성
security_group_id=$(aws ec2 create-security-group \
--group-name MyEfsSecurityGroup \
--description "My EFS security group" \
--vpc-id $vpc_id \
--output text)
- 클러스터의 VPC에 대한 CIDR에서 인바운드 NFS 트래픽을 허용하는 인바운드 규칙 생성
aws ec2 authorize-security-group-ingress \
--group-id sg-022ab01e8d8457d99 \
--protocol tcp \
--port 2049 \
--cidr $cidr_range
EKS EFS 생성
- 파일 시스템 생성
file_system_id=$(aws efs create-file-system \
--region us-east-1 \
--performance-mode generalPurpose \
--query 'FileSystemId' \
--output text)
마운트 타켓 생성
- 클러스터 노드 IP 확인
kubectl get nodes
- VPC에 있는 서브넷의 ID와 서브넷이 있는 가용성 영역
aws ec2 describe-subnets \
--filters "Name=vpc-id,Values=$vpc_id" \
--query 'Subnets[*].{SubnetId: SubnetId,AvailabilityZone: AvailabilityZone,CidrBlock: CidrBlock}' \
--output table
- 노드에 서브넷 ID , 보안그룹 ID 연결(프라이빗 서브넷 2개 등록)
aws efs create-mount-target \
--file-system-id $file_system_id \
--subnet-id subnet-063dd361d1d2389dc \
--security-groups sg-022ab01e8d8457d99
aws efs create-mount-target \
--file-system-id $file_system_id \
--subnet-id subnet-0c1d99acf7b440325 \
--security-groups sg-022ab01e8d8457d99
aws efs create-mount-target \
--file-system-id fs-07b7d551ab0ebc7f2 \
--subnet-id subnet-047c9c2c5532b3b3d \
--security-groups sg-022ab01e8d8457d99
EKS EFS 테스트
- 샘플 데이터다운로드
git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git
cd aws-efs-csi-driver/examples/kubernetes/multiple_pods/
- EFS ID 검색
aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text
- StorageClass yaml 파일수정
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: efs-dp-sc
provisioner: efs.csi.aws.com
parameters:
provisioningMode: efs-ap
fileSystemId: fs-07b7d551ab0ebc7f2
directoryPerms: "700"
- PV, PVC 배포
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: efs-dp-claim
spec:
accessModes:
- ReadWriteMany
storageClassName: efs-dp-sc
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Pod
metadata:
name: efs-dp-app
spec:
containers:
- name: app
image: centos
command: ["/bin/sh"]
args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 10; done"]
volumeMounts:
- name: persistent-storage
mountPath: /data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: efs-dp-claim
- Pod 데이터 확인
kubectl exec -it efs-dp-app -- sh -c 'df -hT --type=nfs4'
kubectl exec efs-dp-app -- tail -f /data/out.txt
- 노드에서 데이터 확인
df -hT --type=nfs4
tree /efs
반응형
'AWS > EKS' 카테고리의 다른 글
AWS EKS EBS CSI Driver (0) | 2024.11.08 |
---|---|
AWS EKS 생성하기 (0) | 2024.11.07 |
댓글