Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Amazon EKS에서 영구 스토리지를 사용하려면 어떻게 해야 하나요?
Amazon Elastic Kubernetes Service(Amazon EKS)에서 영구 스토리지를 사용하려고 합니다.
간략한 설명
Amazon EKS에서 영구 스토리지를 사용하려면 다음 옵션 중 하나에 대한 단계를 완료하세요.
- Amazon Elastic Block Store(Amazon EBS) 컨테이너 스토리지 인터페이스(CSI) 드라이버를 배포하고 테스트합니다.
- Amazon Elastic File System(Amazon EFS) 컨테이너 스토리지 인터페이스(CSI) 드라이버를 배포하고 테스트합니다.
참고: 최신 버전의 드라이버를 설치하는 것이 가장 좋습니다. 최신 드라이버를 설치하는 방법에 대한 단계는 GitHub 웹 사이트에서 aws-ebs-csi-driver 및 aws-efs-csi-driver를 참조하세요.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.
사전 요구 사항:
- AWS CLI를 설치합니다.
- 명령에는 kubectl 버전 1.14 이상을 사용하세요. 자세한 내용을 보려면 ](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)kubectl 설치 또는 업데이트[를 참조하세요.
- AWS Identity and Access Management(IAM) 권한을 생성으로 설정합니다. 그런 다음 Amazon EKS 작업자 노드 역할 CSI 드라이버 역할에 정책을 연결합니다.
- Amazon EKS 클러스터를 생성하고 워커 노드를 클러스터에 연결합니다.
참고: kubectl get nodes 명령을 실행하여 워커 노드가 클러스터에 연결되어 있는지 확인합니다. - 다음 명령을 실행하여 클러스터에 AWS IAM OpenID Connect(OIDC) 공급자가 있는지 확인합니다.
참고: your_cluster_name을 클러스터 이름으로 바꿉니다.aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text
- 다음 명령을 실행하여 IAM OIDC 공급자가 구성되었는지 확인합니다.
참고: OIDC 공급자의 ID를 해당 OIDC ID로 바꿉니다. 계정에 "No OpenIDConnect provider found in your account"이라는 오류 메시지가 표시되면 IAM OIDC 공급자를 생성해야 합니다.aws iam list-open-id-connect-providers | grep <ID of the oidc provider>
- eksctl를 설치하거나 업데이트합니다. 지침은 eksctl 웹 사이트에서의 설치를 참조하세요.
- 다음 명령을 실행하여 IAM OIDC 공급자를 생성합니다.
참고: my-cluster를 클러스터 이름으로 바꿉니다.eksctl utils associate-iam-oidc-provider --cluster my-cluster --approve
아마존 EBS CSI 드라이버
Amazon EBS CSI 드라이버 배포
다음 단계를 완료합니다.
-
다음 예와 비슷한 IAM 신뢰 정책 파일을 생성합니다.
cat <<EOF > trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<your OIDC ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:aud": "sts.amazonaws.com", "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa" } } } ] } EOF
참고: YOUR_AWS_ACCOUNT_ID를 해당 AWS 계정 ID로, YOUR_AWS_REGION을 해당 AWS 리전으로, OIDC ID를 해당 OIDC ID로 바꿉니다.
-
AmazonEKS_EBS_CSI_DriverRole이라는 이름의 IAM 역할을 생성합니다.
aws iam create-role --role-name AmazonEKS_EBS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json"
-
드라이버의 AWS 관리형 IAM 정책을 IAM 역할에 연결합니다.
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --role-name AmazonEKS_EBS_CSI_DriverRole
-
Amazon EBS CSI 드라이버를 배포합니다.
참고: Kustomize, Helm 또는 Amazon EKS 관리형 애드온을 사용하여 EBS CSI 드라이버를 배포할 수 있습니다. EBS CSI 드라이버를 배포하는 방법에 대한 지침은 GitHub 웹 사이트에서 설치를 참조하세요.
Amazon EBS CSI 드라이버 테스트
포드에 동적 프로비저닝을 사용하는 샘플 애플리케이션으로 Amazon EBS CSI 드라이버를 테스트할 수 있습니다. Amazon EBS 볼륨은 요청 시 프로비저닝됩니다.
Amazon EFS CSI 드라이버
CSI 드라이버의 IAM 역할 생성
다음 단계를 완료합니다.
-
GitHub에서 IAM 정책 문서를 다운로드합니다.
curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json
-
IAM 정책을 생성합니다.
aws iam create-policy --policy-name AmazonEKS_EFS_CSI_Driver_Policy --policy-document file://iam-policy-example.json
-
다음 명령을 실행해 클러스터의 OIDC 공급자 URL을 확인합니다.
aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text
참고: your_cluster_name을 클러스터 이름으로 바꿉니다.
-
다음 IAM 신뢰 정책을 생성한 다음, Kubernetes 서비스 계정에 AssumeRoleWithWebIdentity 작업을 부여합니다.
cat <<EOF > trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa" } } } ] } EOF
참고: YOUR_AWS_ACCOUNT_ID를 해당 계정 ID로, YOUR_AWS_REGION을 해당 AWS 리전으로, XXXXXXXXXX45D83924220DC4815XXXXX를 해당 클러스터의 OIDC 공급자 ID로 바꿉니다.
-
IAM 역할을 생성합니다.
aws iam create-role --role-name AmazonEKS_EFS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json"
-
새 IAM 정책을 역할에 연결합니다.
aws iam attach-role-policy --policy-arn arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AmazonEKS_EFS_CSI_Driver_Policy --role-name AmazonEKS_EFS_CSI_DriverRole
-
다음 내용을 efs-service-account.yaml이라는 이름의 파일에 저장합니다.
apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: aws-efs-csi-driver name: efs-csi-controller-sa namespace: kube-system annotations: eks.amazonaws.com/role-arn: arn:aws:iam::<AWS_ACCOUNT_ID>:role/AmazonEKS_EFS_CSI_DriverRole
-
클러스터에 Kubernetes 서비스 계정을 생성합니다.
kubectl apply -f efs-service-account.yaml
참고: efs-csi-controller-sa라는 이름의 Kubernetes 서비스 계정에는 생성한 IAM 역할로 주석이 지정됩니다.
-
퍼블릭 Amazon ECR 레지스트리에서 매니페스트를 다운로드하고 이미지를 사용하여 드라이버를 설치합니다.
$ kubectl kustomize "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.5" > public-ecr-driver.yaml
참고: EFS CSI 드라이버를 설치하려면 Helm 및 AWS 프라이빗 또는 퍼블릭 레지스트리로 사용자 정의할 수 있습니다. EFS CSI 드라이버를 설치하는 방법에 대한 지침은 GitHub 웹 사이트에서 AWS EFS CSI 드라이버를 참조하세요.
-
public-ecr-driver.yaml 파일을 편집하고 efs-csi-controller-sa Kubernetes 서비스 계정 섹션에 IAM 역할의 ARN으로 주석을 추가합니다.
apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: aws-efs-csi-driver annotations: eks.amazonaws.com/role-arn: arn:aws:iam::<accountid>:role/AmazonEKS\_EFS\_CSI\_DriverRole name: efs-csi-controller-sa namespace: kube-system
Amazon EFS CSI 드라이버 배포
다음 단계를 완료합니다.
-
매니페스트 적용:
$ kubectl apply -f public-ecr-driver.yaml
-
클러스터에 AWS Fargate 포드만 포함된 경우(노드 없음), 다음 명령을 실행하여 드라이버를 배포합니다(모든 리전).
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/deploy/kubernetes/base/csidriver.yaml
Amazon EFS 파일 시스템 생성
다음 단계를 완료합니다.
- Amazon EKS 클러스터의 가상 프라이빗 클라우드(VPC) ID를 가져오려면 다음 명령을 실행합니다.
참고: your_cluster_name을 클러스터 이름으로 바꿉니다.aws eks describe-cluster --name your_cluster_name --query "cluster.resourcesVpcConfig.vpcId" --output text
- VPC 클러스터의 CIDR 범위를 가져오려면 다음 명령을 실행합니다.
참고: YOUR_VPC_ID를 해당 VPC ID로 바꿉니다.aws ec2 describe-vpcs --vpc-ids YOUR_VPC_ID --query "Vpcs[].CidrBlock" --output text
- Amazon EFS 마운트 지점의 인바운드 네트워크 파일 시스템(NFS) 트래픽을 허용하는 보안 그룹을 생성합니다.
참고: YOUR_VPC_ID를 해당 VPC ID로 바꿉니다. 나중에 사용할 GroupId를 기록해 둡니다.aws ec2 create-security-group --description efs-test-sg --group-name efs-sg --vpc-id YOUR_VPC_ID
- VPC의 리소스가 Amazon EFS 파일 시스템과 통신할 수 있도록 하려면 NFS 인바운드 규칙을 추가합니다.
참고: YOUR_VPC_CIDR을 해당 VPC CIDR로, sg-xxx를 보안 그룹 ID로 바꿉니다.aws ec2 authorize-security-group-ingress --group-id sg-xxx --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
- Amazon EKS 클러스터를 위한 Amazon EFS 파일 시스템을 생성합니다.
참고: 나중에 사용할 FileSystemId를 기록해 둡니다.aws efs create-file-system --creation-token eks-efs
- Amazon EFS용 마운트 대상을 생성하려면 다음 명령을 실행합니다.
중요: 워커 노드가 실행 중인 가용 영역에서 SubnetID를 사용하여 모든 가용 영역에 위 명령을 실행합니다. FileSystemId를 해당 EFS 파일 시스템의 ID로, sg-xxx를 해당 보안 그룹의 ID로, SubnetID를 해당 워커 노드 서브넷의 ID로 바꿉니다. 여러 서브넷에 탑재 대상을 생성하려면 각 서브넷 ID에 대해 명령을 실행합니다. 워커 노드가 실행 중인 각 가용 영역에 마운트 대상을 만드는 것이 가장 좋습니다. 워커 노드가 실행되는 모든 가용 영역에 마운트 대상을 생성할 수 있습니다. 그러면 이러한 가용 영역의 모든 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 파일 시스템을 사용할 수 있습니다.aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-xxx
Amazon EFS CSI 드라이버 테스트
동일한 파일에 쓰는 두 개의 포드를 배포하려면 GitHub 웹사이트에서 다중 포드 읽기 쓰기 다수를 참조하세요.
관련 정보

관련 콘텐츠
- 질문됨 일 년 전lg...
- 질문됨 2년 전lg...
- 질문됨 9달 전lg...
- 질문됨 23일 전lg...