내용으로 건너뛰기

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

6분 분량
0

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

간략한 설명

Amazon EKS에서 영구 스토리지를 사용하려면 다음 옵션 중 하나에 대한 단계를 완료하십시오.

참고: 보안과 효율을 위해서는 Amazon EKS 추가 기능을 통해 CSI 드라이버를 설치하는 것이 가장 좋습니다. 또한 최신 버전의 드라이버를 설치하는 것이 좋습니다. 설치 단계 및 최신 드라이버 버전은 GitHub 웹사이트의 aws-ebs-csi-driver 또는 aws-efs-csi-driver를 참조하십시오.

해결 방법

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

사전 요구 사항:

  • Kubernetes 버전과 일치하는 kubectl 버전을 설정하십시오. 버전 스큐 요구 사항에 대한 자세한 내용은 Kubernetes 웹사이트의 kubectl을 참조하십시오.

  • eksctl을 설치하거나 업데이트합니다. 지침은 eksctl 웹 사이트의 Installation을 참조하십시오.

  • AWS Identity and Access Management(IAM) 생성 권한을 설정합니다. 그런 다음 CSI 드라이버 역할 또는 Amazon EKS 워커 노드 역할에 정책을 연결합니다.

  • Amazon EKS 클러스터를 생성한 후 워커 노드를 클러스터에 연결합니다. 워커 노드를 클러스터에 연결했는지 확인하려면 다음 명령을 실행합니다.

    kubectl get nodes
  • 클러스터에 IAM OpenID Connect(OIDC) 공급자가 있는지 확인하려면 다음 describe-cluster AWS CLI 명령을 실행합니다.

    aws eks describe-cluster
     --name your_cluster_name
     --query "cluster.identity.oidc.issuer"
     --output text

    참고: your_cluster_name을 클러스터 이름으로 바꾸십시오.

  • IAM OIDC 공급자를 구성했는지 확인하려면 다음 list-open-id-connect-providers 명령을 실행합니다.

    aws iam list-open-id-connect-providers | grep OIDC-ID

    참고: OIDC-ID를 OIDC 공급자 ID로 바꾸십시오. 오류 메시지가 표시되면 IAM OIDC 공급자를 생성"No OpenIDConnect provider found in your account"하십시오.

Amazon EBS CSI 드라이버

Amazon EBS CSI 드라이버를 배포하려면 다음 단계를 완료하십시오.

  1. 다음 예와 비슷한 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/OIDC-ID"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:aud": "sts.amazonaws.com",
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
            }
          }
        }
      ]
    }
    EOF

    참고: YOUR_AWS_ACCOUNT_ID를 해당 AWS 계정 ID로, YOUR_AWS_REGION을 해당 AWS 리전으로, OIDC-ID를 해당 OIDC 공급자 ID로 바꾸십시오.

  2. AmazonEKS_EBS_CSI_DriverRole이라는 IAM 역할을 생성하려면 다음 create-role 명령을 실행합니다.

    aws iam create-role
     --role-name AmazonEKS_EBS_CSI_DriverRole
     --assume-role-policy-document file://"trust-policy.json"
  3. CSI 드라이버의 AWS 관리형 IAM 정책을 IAM 역할에 연결하려면 다음 attach-role-policy 명령을 실행합니다.

    aws iam attach-role-policy
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy
    --role-name AmazonEKS_EBS_CSI_DriverRole
  4. Kustomize, Helm 또는 Amazon EKS 관리형 추가 기능을 사용하여 EBS CSI 드라이버를 배포할 수 있습니다. 배포 지침은 GitHub 웹 사이트의 Installation을 참조하십시오.

  5. 포드에 동적 프로비저닝을 사용하는 샘플 애플리케이션으로 Amazon EBS CSI 드라이버를 테스트하십시오. Amazon EBS CSI 드라이버는 온디맨드 방식으로 EBS 볼륨을 프로비저닝합니다.

Amazon EFS CSI 드라이버

CSI 드라이버의 IAM 역할 생성

워커 노드가 있는 클러스터에 대해 다음 단계를 완료하십시오.

  1. AmazonEFSCSIDriverPolicy를 사용하려면 서비스 계정에 IAM 역할을 사용하는 경우를 참조하십시오. 그런 다음, 7단계로 진행합니다.
    또는 다음 명령을 실행하여 GitHub에서 IAM 정책 문서를 다운로드합니다.

    curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json
  2. IAM 정책을 생성하려면 다음 create-policy 명령을 실행합니다.

    aws iam create-policy
        --policy-name AmazonEKS_EFS_CSI_Driver_Policy
        --policy-document file://iam-policy-example.json
  3. 클러스터의 OIDC 공급자 ID를 확인하려면 다음 describe-cluster 명령을 실행합니다.

    aws eks describe-cluster
     --name your_cluster_name
     --query "cluster.identity.oidc.issuer"
     --output text

    참고: your_cluster_name을 클러스터 이름으로 바꾸십시오.

  4. Kubernetes 서비스 계정에 AssumeRoleWithWebIdentity 작업을 허용하는 다음 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/OIDC-ID"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa"
            }
          }
        }
      ]
    }
    EOF

    참고: YOUR_AWS_ACCOUNT_ID를 해당 계정 ID로, YOUR_AWS_REGION을 해당 리전으로, OIDC-ID를 해당 클러스터의 OIDC 공급자 ID로 바꾸십시오.

  5. IAM 역할을 생성하려면 다음 create-role 명령을 실행합니다.

    aws iam create-role
      --role-name AmazonEKS_EFS_CSI_DriverRole
      --assume-role-policy-document file://"trust-policy.json"
  6. 새 IAM 정책을 역할에 연결하려면 다음 attach-role-policy 명령을 실행합니다.

    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

    참고: YOUR_AWS_ACCOUNT_ID를 계정 ID로 바꾸십시오.

  7. 관리형 추가 기능을 사용하는 경우 Amazon EFS CSI 드라이버 배포로 진행하십시오. 자체 관리형 드라이버를 설치하려면 7~10단계를 완료하십시오. 다음 내용을 efs-service-account.yaml이라는 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

    참고: YOUR_AWS_ACCOUNT_ID를 계정 ID로 바꾸십시오.

  8. 클러스터에서 Kubernetes 서비스 계정을 생성하려면 다음 명령을 실행합니다.

    kubectl apply -f efs-service-account.yaml

    참고: efs-csi-controller-sa Kubernetes 서비스 계정에는 생성된 IAM 역할의 주석이 있습니다.

  9. 퍼블릭 Amazon Elastic Container Registry(Amazon ECR) 레지스트리에서 매니페스트를 다운로드하려면 다음 명령을 실행합니다.

    kubectl kustomize "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-VERSION" > public-ecr-driver.yaml

    참고: VERSION을 릴리스 버전 번호로 바꾸십시오. 최신 릴리스 버전을 사용하는 것이 가장 좋습니다. 활성 브랜치 목록은 GitHub 웹 사이트의 Branches를 참조하십시오. Kustomize 대신 Helm을 사용하여 드라이버를 설치할 수 있습니다. 단계는 GitHub 웹 사이트의 Deploy the driver를 참조하십시오.

  10. 다운로드한 파일을 편집하여 다음 줄을 제거합니다.

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/name: aws-efs-csi-driver
  name: efs-csi-controller-sa
  namespace: kube-system

참고: 7단계에서 이미 서비스 계정을 생성했으므로 이전 줄은 포함할 필요가 없습니다.

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

EFS 파일 시스템 생성

다음 단계를 완료하십시오.

  1. Amazon EKS 클러스터의 가상 프라이빗 클라우드(VPC) ID를 가져오려면 다음 describe-cluster 명령을 실행합니다.
    aws eks describe-cluster
     --name your_cluster_name
     --query "cluster.resourcesVpcConfig.vpcId"
     --output text
    참고: your_cluster_name을 클러스터 이름으로 바꾸십시오.
  2. VPC 클러스터의 CIDR 범위를 가져오려면 다음 describe-vpcs 명령을 실행합니다.
    aws ec2 describe-vpcs
     --vpc-ids YOUR_VPC_ID
     --query "Vpcs[].CidrBlock"
     --output text
    참고: YOUR_VPC_ID를 해당 VPC ID로 바꾸십시오.
  3. Amazon EFS 마운트 지점의 인바운드 네트워크 파일 시스템(NFS) 트래픽을 허용하는 보안 그룹을 생성하려면 다음 create-security-group 명령을 실행합니다.
    aws ec2 create-security-group
     --description efs-test-sg
     --group-name efs-sg
     --vpc-id YOUR_VPC_ID
    참고: YOUR_VPC_ID를 해당 VPC ID로 바꾸십시오. 출력에서 GroupId 값을 기록해 둡니다.
  4. VPC의 리소스가 EFS 파일 시스템과 통신할 수 있도록 하려면 다음 authorize-security-group-ingress 명령을 실행하여 NFS 인바운드 규칙을 추가하십시오.
    aws ec2 authorize-security-group-ingress --group-id sg-abc --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
    참고: YOUR_VPC_CIDR을 해당 VPC CIDR로, sg-abc를 해당 보안 그룹 ID로 바꾸십시오.
  5. Amazon EKS 클러스터용 EFS 파일 시스템을 생성하려면 다음 create-file-system 명령을 실행합니다.
    aws efs create-file-system --creation-token eks-efs
    참고: FileSystemId를 기록해 두십시오.
  6. Amazon EFS용 마운트 대상을 생성하려면 다음 create-mount-target 명령을 실행합니다.
    aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-abc
    참고: FileSystemId를 해당 EFS 파일 시스템 ID로, sg-abc를 해당 보안 그룹 ID로, SubnetID를 해당 워커 노드 서브넷 ID로 바꾸십시오. 워커 노드가 실행되는 각 가용 영역에서 위 명령을 실행하는 것이 가장 좋습니다. 가용 영역의 모든 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 파일 시스템을 사용할 수 있습니다. 여러 서브넷에 마운트 대상을 생성하려면 각 서브넷 ID에 대해 명령을 실행합니다.

Amazon EFS CSI 드라이버 테스트

동일한 파일에 쓰는 포드 두 개를 배포하려면 GitHub 웹 사이트에서 Multiple Pods Read Write Many를 참조하십시오.

관련 정보

할당량과 관련된 파일 작업 오류 해결

GitHub 웹 사이트의 Amazon EFS CSI driver

Amazon EKS에서 Amazon EFS 볼륨 마운트 관련 문제를 해결하려면 어떻게 해야 합니까?

Amazon EKS에서 Amazon EFS 볼륨 마운트 관련 문제를 해결하려면 어떻게 해야 합니까?