Amazon EKS에서 영구 스토리지를 사용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 29일

Amazon Elastic Kubernetes Service(Amazon EKS)에서 영구 스토리지를 사용하고 싶습니다.

간략한 설명

다음 옵션 중 하나를 사용하여 Amazon EKS에서 영구 스토리지를 설정할 수 있습니다.

이러한 옵션 중 하나를 사용하려면 다음 단원 중 하나의 단계를 완료하십시오.

  • 옵션 A: Amazon EBS CSI 드라이버 배포 및 테스트
  • 옵션 B: Amazon EFS CSI 드라이버 배포 및 테스트

참고: 이 문서의 명령에는 kubectl 버전 1.14 이상이 필요합니다. 사용 중인 kubectl 버전을 보려면 kubectl version -client -short 명령을 실행합니다.

​해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하십시오.

두 단원의 단계를 완료하기 전에 다음을 수행해야 합니다.

  1. AWS CLI를 설치합니다.
  2. 정책을 생성하여 Amazon EKS 작업자 노드 역할 NodeInstanceRole에 연결하기 위한 AWS Identity and Access Management(IAM) 권한을 설정합니다.
  3. Amazon EKS 클러스터를 생성하고 작업자 노드를 클러스터에 조인합니다.
    참고: 작업자 노드가 클러스터에 연결되어 있는지 확인하려면 kubectl get nodes 명령을 실행합니다.

옵션 A: Amazon EBS CSI 드라이버 배포 및 테스트

Amazon EBS CSI 드라이버 배포:

1.    작업자 노드가 Amazon EBS 볼륨을 생성 및 수정할 수 있도록 허용하는 권한이 있는 예제 IAM 정책을 다운로드하려면 다음 명령을 실행합니다.

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/v0.4.0/docs/example-iam-policy.json

2.    Amazon_EBS_CSI_Driver라는 IAM 정책을 생성하려면 다음 명령을 실행합니다.

aws iam create-policy --policy-name Amazon_EBS_CSI_Driver \--policy-document file://example-iam-policy.json

3.    NodeInstanceRole에 새 IAM 정책을 연결하려면 다음 명령을 실행합니다.

aws iam attach-role-policy \
--policy-arn arn:aws:iam::111122223333:policy/Amazon_EBS_CSI_Driver \
--role-name eksctl-alb-nodegroup-ng-xxxxxx-NodeInstanceRole-xxxxxxxxxx

참고: 정책 Amazon 리소스 이름(ARN)을 이전 2단계에서 생성한 정책의 ARN으로 바꿉니다. 역할 이름을 NodeInstanceRole로 바꿉니다.

4.    Amazon EBS CSI 드라이버를 배포하려면 다음 명령을 실행합니다.

kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

Amazon EBS CSI 드라이버 테스트:

동적 프로비저닝을 사용하는 애플리케이션으로 Amazon EBS CSI 드라이버를 테스트할 수 있습니다. Amazon EBS 볼륨은 필요한 Pod에 의해 온디맨드로 프로비저닝됩니다.

1.    AWS GitHub에서 aws-ebs-csi-driver 리포지토리를 복제하려면 다음 명령을 실행합니다.

git clone https://github.com/kubernetes-sigs/aws-ebs-csi-driver.git

2.    작업 디렉터리를 Amazon EBS 드라이버 테스트 파일이 포함된 폴더로 변경하려면 다음 명령을 실행합니다.

cd aws-ebs-csi-driver/examples/kubernetes/dynamic-provisioning/

3.    테스트에 필요한 Kubernetes 리소스를 생성하려면 다음 명령을 실행합니다.

kubectl apply -f specs/

참고: kubectl 명령은 StorageClass, PersistentVolumeClaim(PVC) 및 Pod를 생성합니다. Pod는 PVC를 참조합니다. Amazon EBS 볼륨은 Pod가 생성될 때만 프로비저닝됩니다.

4.    PVC를 참조하는 Pod의 결과로서 생성된 영구 볼륨을 보려면 다음 명령을 실행합니다.

kubectl get persistentvolumes

5.    영구 볼륨에 대한 정보를 보려면 다음 명령을 실행합니다.

kubectl describe persistentvolumes pv_name

참고: pv_name을 이전 4단계에서 반환된 영구 볼륨의 이름으로 바꿉니다. 출력에서 Source.VolumeHandle 속성의 값은 계정에 생성된 물리적 Amazon EBS 볼륨의 ID입니다.

6.    Pod가 볼륨에 데이터를 성공적으로 쓰고 있는지 확인하려면 다음 명령을 실행합니다.

kubectl exec -it app cat /data/out.txt

참고: 명령 출력은 /data/out.txt 파일에 저장된 현재 날짜와 시간을 표시합니다. 이 파일은 일, 월, 날짜 및 시간으로 구성됩니다.

옵션 B: Amazon EFS CSI 드라이버 배포 및 테스트

Amazon EFS CSI 드라이버 배포:

Amazon EFS CSI 드라이버를 사용하면 ReadWriteMany 모드를 사용하여 여러 Pod를 동시에 볼륨에 쓸 수 있습니다.

1.    Amazon EFS CSI 드라이버를 배포하려면 다음 명령을 실행합니다.

kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

2.    Amazon EKS 클러스터의 VPC ID를 가져오려면 다음 명령을 실행합니다.

aws eks describe-cluster --name cluster_name --query "cluster.resourcesVpcConfig.vpcId" --output text

3.    VPC 클러스터의 CIDR 범위를 가져오려면 다음 명령을 실행합니다.

aws ec2 describe-vpcs --vpc-ids vpc-id --query "Vpcs[].CidrBlock" --output text

참고: VPC 이름을 VPC ID로 바꿉니다.

4.    Amazon EFS 탑재 지점에 대한 인바운드 네트워크 파일 시스템(NFS) 트래픽을 허용하는 보안 그룹을 생성하려면 다음 명령을 실행합니다.

aws ec2 create-security-group --description efs-test-sg --group-name efs-sg --vpc-id VPC_ID

참고: VPC_ID를 이전 2단계의 출력으로 바꿉니다. 나중에 사용하기 위해 GroupId를 저장합니다.

5.    VPC의 리소스가 EFS와 통신할 수 있도록 NFS 인바운드 규칙을 추가하려면 다음 명령을 실행합니다.

aws ec2 authorize-security-group-ingress --group-id sg-xxx  --protocol tcp --port 2049 --cidr VPC_CIDR

참고: VPC_CIDR을 이전 3단계의 출력으로 바꿉니다.

6.    Amazon EKS 클러스터에 대한 Amazon EFS 파일 시스템을 생성하려면 다음 명령을 실행합니다.

aws efs create-file-system --creation-token eks-efs

참고: 나중에 사용하기 위해 FileSystemId를 참조하십시오.

7.    EFS에 대한 탑재 대상을 생성하려면 작업자 노드가 실행 중인 모든 가용 영역에서 다음 명령을 실행합니다.

aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group GroupID

참고: FileSystemId, SubnetIDGroupId를 이전 6 및 7단계에서 생성한 FileSystemId로 바꿉니다.

참고: 작업자 노드가 시작되는 모든 가용 영역에 대해 탑재 대상을 생성할 수 있습니다. 그러면 탑재 대상이 있는 가용 영역의 모든 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 파일 시스템을 사용할 수 있습니다.

이제 EFS 및 탑재 대상이 실행 중이며 클러스터의 Pod에서 사용할 준비가 되었습니다.

Amazon EFS CSI 드라이버 테스트:

동일한 파일에 쓰는 두 개의 Pod를 배포하여 Amazon EFS CSI 드라이버를 테스트할 수 있습니다.

1.    AWS GitHub에서 aws-efs-csi-driver 리포지토리를 복제하려면 다음 명령을 실행합니다.

git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git

2.    작업 디렉터리를 Amazon EFS CSI 드라이버 테스트 파일이 포함된 폴더로 변경하려면 다음 명령을 실행합니다.

cd aws-efs-csi-driver/examples/kubernetes/multiple_pods/

3.    앞서 생성한 Amazon EFS 파일 시스템 ID를 검색하려면 다음 명령을 실행합니다.

aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text

참고: 이전 명령에서 두 개 이상의 결과가 반환될 경우 이전에 저장한 EFS 파일 시스템 ID를 사용할 수 있습니다.

4.    specs/pv.yaml 파일을 편집하고 spec.sci.volumeHandle 값을 이전 단계의 Amazon EFS FileSystemId로 바꿉니다.

5.    테스트에 필요한 Kubernetes 리소스를 생성하려면 다음 명령을 실행합니다.

kubectl apply -f specs/

참고: 이전 5단계의 kubectl 명령은 Amazon EFS 스토리지 클래스, 즉, PVC, 영구 볼륨 및 두 개의 Pod(app1app2)를 생성합니다.

6.    두 Pod가 파일에 데이터를 쓰고 있는지 테스트하려면 약 1분 동안 기다린 후 다음 명령을 실행합니다.

kubectl exec -it app1 -- tail /data/out1.txt 
kubectl exec -it app2 -- tail /data/out1.txt

출력은 두 개의 Pod에서 /data/out1.txt에 작성된 현재 날짜를 보여 줍니다.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?