

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# FSx for Lustre CSI 드라이버 배포
<a name="fsx-csi-create"></a>

이 주제에서는 [FSx for Lustre CSI 드라이버](fsx-csi.md)를 Amazon EKS 클러스터에 배포하고 제대로 작동하는지 확인하는 방법에 관해 설명합니다. 드라이버는 최신 버전을 사용하는 것이 좋습니다. 사용 가능한 버전은 GitHub의 [CSI Specification Compatibility Matrix](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/blob/master/docs/README.md#csi-specification-compatibility-matrix)를 참조하세요.

**참고**  
Fargate에서는 드라이버가 지원되지 않습니다.

사용할 수 있는 파라미터에 대한 자세한 설명과 드라이버의 기능을 보여주는 전체 예제는 GitHub의 [FSx for Lustre Container Storage Interface (CSI) driver](https://github.com/kubernetes-sigs/aws-fsx-csi-driver) 프로젝트를 참조하세요.

## 사전 조건
<a name="fsx-csi-prereqs"></a>
+ 기존 클러스터가 있어야 합니다.
+ Amazon FSx CSI 드라이버 EKS 추가 기능은 EKS Pod Identity 또는 서비스 계정에 대한 IAM 역할(IRSA)을 통한 인증을 지원합니다. EKS Pod Identity를 사용하려면 FSx CSI 드라이버 추가 기능을 배포하기 전 또는 후에 Pod Identity 에이전트를 설치합니다. 자세한 내용은 [Amazon EKS Pod Identity 에이전트 설정](pod-id-agent-setup.md) 섹션을 참조하세요. 그 대신 IRSA를 사용하려면 [클러스터에 대한 IAM OIDC 공급자 생성](enable-iam-roles-for-service-accounts.md) 섹션을 참조하세요.
+ 장치에 설치 및 구성된 AWS 명령줄 인터페이스(AWS CLI)의 버전 `2.12.3` 이상 또는 버전 `1.27.160` 이상 또는 AWS CloudShell. 현재 버전을 확인하려면 `aws --version | cut -d / -f2 | cut -d ' ' -f1`을 사용합니다. `yum`, `apt-get` 또는 macOS용 Homebrew 같은 패키지 관리자는 최신 버전의 AWS CLI 이전에 나온 버전이 몇 가지 있을 때도 있습니다. 최신 버전을 설치하려면 * AWS 명령줄 인터페이스 사용 설명서*에서 [설치](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 및 [aws config를 사용하여 빠른 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)을 참조하세요. AWS CloudShell에 설치된 AWS CLI 버전도 최신 버전보다 여러 버전 이전일 수도 있습니다. 업데이트하려면 * AWS CloudShell 사용 설명서*의 [홈 디렉터리에 AWS CLI 설치하기](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)를 참조하세요.
+ 장치에 설치된 `eksctl` 명령줄 도구의 버전 `0.215.0` 이상 또는 AWS CloudShell이 필요합니다. `eksctl`을 설치 또는 업그레이드하려면 `eksctl` 설명서에서 [설치](https://eksctl.io/installation)를 참조하세요.
+ `kubectl` 명령줄 도구는 장치 또는 AWS CloudShell에 설치됩니다. 버전은 클러스터의 Kubernetes 버전과 동일하거나 최대 하나 이전 또는 이후의 마이너 버전일 수 있습니다. 예를 들어, 클러스터 버전이 `1.29`인 경우 `kubectl` 버전 `1.28`, `1.29` 또는 `1.30`를 함께 사용할 수 있습니다. `kubectl`을 설치하거나 업그레이드하려면 [`kubectl` 및 `eksctl` 설정](install-kubectl.md) 부분을 참조하세요.

## 1단계-IAM 역할 생성
<a name="fsx-create-iam-role"></a>

Amazon FSx CSI 플러그인이 사용자를 대신하여 AWS API를 직접적으로 호출하려면 IAM 권한이 필요합니다.

**참고**  
IMDS에 대한 액세스 권한을 차단하지 않는 한 포드는 IAM 역할에 할당된 권한에 대한 액세스 권한이 있습니다. 자세한 내용은 [모범 사례로 Amazon EKS 클러스터 보호](security-best-practices.md) 섹션을 참조하세요.

다음 절차에서는 IAM 역할을 생성하고 AWS 관리형 정책을 연결하는 방법을 보여줍니다.

1. 다음 명령을 사용하여 IAM 역할을 생성하고 AWS 관리형 정책을 연결합니다. `my-cluster`를 사용하려는 클러스터의 이름으로 바꿉니다. 이 명령은 IAM 역할을 생성하고 IAM 정책을 연결하는 AWS CloudFormation 스택을 배포합니다.

   ```
   eksctl create iamserviceaccount \
       --name fsx-csi-controller-sa \
       --namespace kube-system \
       --cluster my-cluster \
       --role-name AmazonEKS_FSx_CSI_DriverRole \
       --role-only \
       --attach-policy-arn arn:aws:iam::aws:policy/AmazonFSxFullAccess \
       --approve
   ```

   서비스 계정이 생성되면 여러 줄의 출력이 표시됩니다. 출력의 마지막 줄은 다음과 유사합니다.

   ```
   [ℹ]  1 task: {
       2 sequential sub-tasks: {
           create IAM role for serviceaccount "kube-system/fsx-csi-controller-sa",
           create serviceaccount "kube-system/fsx-csi-controller-sa",
       } }
   [ℹ]  building iamserviceaccount stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
   [ℹ]  deploying stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
   [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
   [ℹ]  created serviceaccount "kube-system/fsx-csi-controller-sa"
   ```

   배포된 AWS CloudFormation 스택의 이름을 기록합니다. 이전 예제 출력에서 스택의 이름이 `eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa`로 지정되어 있습니다.

이제 Amazon FSx CSI 드라이버 IAM 역할을 생성했으므로 다음 섹션을 계속 진행할 수 있습니다. 이 IAM 역할을 사용하여 추가 기능을 배포하면 `fsx-csi-controller-sa`라는 서비스 계정을 생성하고 사용하도록 구성됩니다. 이 서비스 계정은 필요한 Kubernetes 권한이 할당된 Kubernetes `clusterrole`에 바인딩되어 있습니다.

## 2단계: Amazon FSx CSI 드라이버 설치
<a name="fsx-csi-deploy-driver"></a>

보안을 강화하고 작업량을 줄이려면 Amazon FSx 추가 기능을 통해 Amazon EBS CSI 드라이버를 설치하는 것이 좋습니다. Amazon EKS 추가 기능을 클러스터에 추가하려면 [Amazon EKS 추가 기능 생성](creating-an-add-on.md) 섹션을 참조하세요. Amazon EKS 추가 기능에 대한 자세한 내용은 [Amazon EKS 추가 기능](eks-add-ons.md) 섹션을 참조하세요.

**중요**  
클러스터에 기존 Amazon FSx CSI 드라이버를 설치하면 추가 기능 설치에 실패할 수 있습니다. 비 EKS FSx CSI 드라이버가 있는 동안 Amazon EKS 추가 기능 버전을 설치하려고 하면 리소스 충돌로 인해 설치가 실패합니다 설치 중 `OVERWRITE` 플래그를 사용하여 이 문제를 해결합니다.  

```
aws eks create-addon --addon-name aws-fsx-csi-driver --cluster-name my-cluster --resolve-conflicts OVERWRITE
```

대신 Amazon FSx CSI 드라이버의 자체 관리형 설치를 원하는 경우 GitHub의 [Installation](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/blob/master/docs/install.md)을 참조하세요.

## 3단계: 스토리지 클래스, 영구 볼륨 클레임 및 샘플 앱 배포
<a name="fsx-csi-deploy-storage-class"></a>

이 절차에서는 [FSx for Lustre Container Storage Interface(CSI) 드라이버](https://github.com/kubernetes-sigs/aws-fsx-csi-driver) GitHub 리포지토리를 사용하여 동적으로 프로비저닝된 FSx for Lustre 볼륨을 사용합니다.

1. 클러스터의 보안 그룹을 기록합니다. 이는 **네트워킹** 섹션 아래의 AWS Management Console에서 또는 다음을 AWS CLI 명령을 사용하여 볼 수 있습니다. `my-cluster`를 사용하려는 클러스터의 이름으로 바꿉니다.

   ```
   aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.clusterSecurityGroupId
   ```

1. Amazon FSx for Lustre 사용 설명서의 [Amazon VPC 보안 그룹](https://docs.aws.amazon.com/fsx/latest/LustreGuide/limit-access-security-groups.html#fsx-vpc-security-groups)에 표시된 기준에 따라 Amazon FSx 파일 시스템에 대한 보안 그룹을 생성합니다. **VPC**의 경우 **네트워킹** 섹션 아래 표시된 대로 클러스터의 VPC를 선택합니다. “Lustre 클라이언트와 연결된 보안 그룹”의 경우 클러스터 보안 그룹을 사용합니다. 아웃바운드 규칙을 그대로 두어 **모든 트래픽**을 허용할 수 있습니다.

1. 다음 명령을 사용하여 스토리지 클래스 매니페스트를 다운로드합니다.

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
   ```

1. `storageclass.yaml` 파일의 파라미터 섹션을 편집합니다. 모든 예제 값을 자신의 값으로 바꾸세요.

   ```
   parameters:
     subnetId: subnet-0eabfaa81fb22bcaf
     securityGroupIds: sg-068000ccf82dfba88
     deploymentType: PERSISTENT_1
     automaticBackupRetentionDays: "1"
     dailyAutomaticBackupStartTime: "00:00"
     copyTagsToBackups: "true"
     perUnitStorageThroughput: "200"
     dataCompressionType: "NONE"
     weeklyMaintenanceStartTime: "7:09:00"
     fileSystemTypeVersion: "2.12"
   ```
   +  **`subnetId`** -Amazon FSx for Lustre 파일 시스템을 생성해야 하는 서브넷 ID. Amazon FSx for Lustre는 일부 가용 영역에서 지원되지 않습니다. https://console.aws.amazon.com/fsx/에서 Amazon FSx for Lustre 콘솔을 열어 사용하려는 서브넷이 지원되는 가용 영역에 있는지 확인합니다. 서브넷은 노드를 포함할 수도 있고 다른 서브넷이나 VPC일 수도 있습니다.
     + **컴퓨팅** 섹션에서 노드 그룹을 선택하여 AWS Management Console에서 노드 서브넷을 확인할 수 있습니다.
     + 지정한 서브넷이 노드가 있는 서브넷과 다른 경우 VPC가 [연결](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/amazon-vpc-to-amazon-vpc-connectivity-options.html)되어 있어야 하며 보안 그룹에 필요한 포트가 열려 있는지 확인해야 합니다.
   +  **`securityGroupIds`** -파일 시스템에 대해 생성한 보안 그룹의 ID.
   +  ** `deploymentType` (선택사항)** - 파일 시스템 배포 유형입니다. 유효한 값은 `SCRATCH_1`, `SCRATCH_2`, `PERSISTENT_1` 및 `PERSISTENT_2`입니다. 배포 유형에 대한 자세한 내용은 [Amazon FSx for Lustre 파일 시스템 생성](https://docs.aws.amazon.com/fsx/latest/LustreGuide/getting-started-step1.html)을 참조하세요.
   +  **기타 파라미터(선택 사항)** - 기타 파라미터에 대한 자세한 내용을 알아보려면 GitHub의 [스토리지 클래스 편집](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/tree/master/examples/kubernetes/dynamic_provisioning#edit-storageclass)을 참조하세요.

1. 스토리지 클래스 매니페스트를 생성합니다.

   ```
   kubectl apply -f storageclass.yaml
   ```

   예제 출력은 다음과 같습니다.

   ```
   storageclass.storage.k8s.io/fsx-sc created
   ```

1. 영구 볼륨 클레임 매니페스트를 다운로드합니다.

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/claim.yaml
   ```

1. (선택사항) `claim.yaml` 파일을 편집합니다. 스토리지 요구 사항과 이전 단계에서 선택한 `deploymentType`에 따라 `1200Gi`를 다음 증분 값 중 하나로 변경합니다.

   ```
   storage: 1200Gi
   ```
   +  `SCRATCH_2` 및 `PERSISTENT` - `1.2 TiB`, `2.4 TiB` 또는 2.4TiB 대비 2.4TiB씩 증가합니다.
   +  `SCRATCH_1` – `1.2 TiB`, `2.4 TiB`, `3.6 TiB` 또는 3.6TiB 대비 3.6TiB의 증분.

1. 영구 볼륨 클레임을 생성합니다.

   ```
   kubectl apply -f claim.yaml
   ```

   예제 출력은 다음과 같습니다.

   ```
   persistentvolumeclaim/fsx-claim created
   ```

1. 파일 시스템이 프로비저닝되었는지 확인합니다.

   ```
   kubectl describe pvc
   ```

   예제 출력은 다음과 같습니다.

   ```
   Name:          fsx-claim
   Namespace:     default
   StorageClass:  fsx-sc
   Status:        Bound
   [...]
   ```
**참고**  
`Status`는 `Bound`로 변경되기 전에 5\~10분 동안 `Pending`으로 표시될 수 있습니다. `Status`가 `Bound`가 될 때까지 다음 단계를 계속하지 마세요. `Status`에 10분 이상 동안 `Pending`이 표시되는 경우 모든 문제를 해결하기 위한 참조로 `Events`의 경고 메시지를 사용합니다.

1. 샘플 애플리케이션을 배포합니다.

   ```
   kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/pod.yaml
   ```

1. 샘플 애플리케이션이 실행 중인지 확인합니다.

   ```
   kubectl get pods
   ```

   예제 출력은 다음과 같습니다.

   ```
   NAME      READY   STATUS              RESTARTS   AGE
   fsx-app   1/1     Running             0          8s
   ```

1. 파일 시스템이 애플리케이션에 의해 올바르게 탑재되었는지 확인합니다.

   ```
   kubectl exec -ti fsx-app -- df -h
   ```

   예제 출력은 다음과 같습니다.

   ```
   Filesystem                   Size  Used Avail Use% Mounted on
   overlay                       80G  4.0G   77G   5% /
   tmpfs                         64M     0   64M   0% /dev
   tmpfs                        3.8G     0  3.8G   0% /sys/fs/cgroup
   192.0.2.0@tcp:/abcdef01      1.1T  7.8M  1.1T   1% /data
   /dev/nvme0n1p1                80G  4.0G   77G   5% /etc/hosts
   shm                           64M     0   64M   0% /dev/shm
   tmpfs                        6.9G   12K  6.9G   1% /run/secrets/kubernetes.io/serviceaccount
   tmpfs                        3.8G     0  3.8G   0% /proc/acpi
   tmpfs                        3.8G     0  3.8G   0% /sys/firmware
   ```

1. 샘플 앱에서 데이터가 FSx for Lustre 파일 시스템에 작성되었는지 확인합니다.

   ```
   kubectl exec -it fsx-app -- ls /data
   ```

   예제 출력은 다음과 같습니다.

   ```
   out.txt
   ```

   이 출력 예는 샘플 앱이 파일 시스템에 `out.txt` 파일을 성공적으로 기록했다는 것을 보여줍니다.

**참고**  
클러스터를 삭제하기 전에 FSx for Lustre 파일 시스템을 삭제해야 합니다. 자세한 내용은 *FSx for Lustre 사용 설명서*의 [리소스 정리](https://docs.aws.amazon.com/fsx/latest/LustreGuide/getting-started-step4.html)를 참조하세요.

## FSx for Lustre의 성능 튜닝
<a name="_performance_tuning_for_fsx_for_lustre"></a>

Amazon EKS와 함께 FSx for Lustre를 사용하는 경우 노드 초기화 중 Lustre 튜닝을 적용하여 성능을 최적화할 수 있습니다. 권장 접근 방식은 시작 템플릿 사용자 데이터를 사용하여 모든 노드에서 일관된 구성을 보장하는 것입니다.

이러한 튜닝에는 다음이 포함됩니다.
+ 네트워크 및 RPC 최적화
+ Lustre 모듈 관리
+ LRU(리소스 잠금 단위) 튜닝
+ 클라이언트 캐시 제어 설정
+ OST 및 MDC에 대한 RPC 제어

이러한 성능 튜닝을 실행하는 방법에 대한 자세한 지침은 다음과 같습니다.
+ 표준 노드(비 EFA)의 성능을 최적화하려면 [노드에서 Amazon FSx for Lustre 성능 최적화(비 EFA)](fsx-csi-tuning-non-efa.md)에서 시작 템플릿 사용자 데이터에 추가할 수 있는 전체 스크립트를 참조하세요.
+ EFA 지원 노드의 성능 최적화는 [노드에서 Amazon FSx for Lustre 성능 최적화(EFA)](fsx-csi-tuning-efa.md) 섹션을 참조하세요.