Ssoon

[3주차] EKS 스토리지 - FSx for Lustre CSI driver 본문

AWS EKS Workshop Study

[3주차] EKS 스토리지 - FSx for Lustre CSI driver

구구달스 2023. 5. 12. 00:26
CloudNet@ 팀의 AWS EKS Workshop Study 3주차 정리입니다.
# Amazon EKS User Guide 참고
  • AWS의 FSx for Lustre 서비스를 Kubernetes 클러스터에서 사용하기 위한 드라이버입니다.
    FSx for Lustre는 고성능 파일 시스템 서비스로, 대규모 데이터 처리 및 병렬 컴퓨팅 워크로드에 적합합니다. 
  • FSx for Lustre CSI 드라이버를 사용하면 Kubernetes 클러스터 내의 컨테이너에 FSx for Lustre 파일 시스템을 마운트하여 고성능 스토리지를 사용할 수 있습니다.

🔹 고성능 파일 시스템 마운트: FSx for Lustre CSI 드라이버를 사용하면 Kubernetes 클러스터 내의 컨테이너에 FSx for Lustre 파일 시스템을 마운트할 수 있습니다. 이를 통해 컨테이너에서 고성능 파일 스토리지를 활용하여 대용량 데이터 처리 작업을 수행할 수 있습니다.

🔹 동적 프로비저닝: FSx for Lustre CSI 드라이버는 필요한 경우에 동적으로 FSx for Lustre 파일 시스템을 프로비저닝합니다. Kubernetes의 CSI 표준을 준수하여 PVC (Persistent Volume Claim)를 사용하여 파일 시스템을 동적으로 생성하고 마운트할 수 있습니다.

🔹 유연한 스토리지 액세스: FSx for Lustre CSI 드라이버를 사용하면 여러 컨테이너 간에 FSx for Lustre 파일 시스템을 공유하여 데이터를 공유하고 동시에 액세스할 수 있습니다. 이는 병렬 컴퓨팅 워크로드나 데이터 공유가 필요한 다중 컨테이너 애플리케이션에 유용합니다.

🔹 데이터 지속성 및 백업: FSx for Lustre CSI 드라이버는 FSx for Lustre 파일 시스템의 데이터 지속성을 보장합니다. 또한 AWS의 백업 및 복원 서비스를 사용하여 파일 시스템의 스냅샷을 생성하고 복원할 수 있습니다.

🔹 관리형 서비스: FSx for Lustre는 AWS에서 완전히 관리되는 서비스로, 데이터의 내구성, 백업, 모니터링 및 확장성에 대한 책임을 AWS에게 맡길 수 있습니다. FSx for Lustre CSI 드라이버를 사용하면 이러한 관리형 기능을 Kubernetes 환경에서도 활용할 수 있습니다.

 

[ EKS 클러스터에 FSx for Lustre 드라이버 배포 ]

  • 변수를 설정합니다.
export cluster_name=my-csi-fsx-cluster
export region_code=region-code
  • 테스트 클러스터를 생성합니다
eksctl create cluster \
  --name $cluster_name \
  --region $region_code \
  --with-oidc \
  --ssh-access \
  --ssh-public-key AWES

  • 드라이버에 대한 Kubernetes 서비스 계정을 생성하고 AmazonFSxFullAccess AWS 관리형 정책을 서비스 계정에 연결합니다.
eksctl create iamserviceaccount \
    --name fsx-csi-controller-sa \
    --namespace kube-system \
    --cluster $cluster_name \
    --attach-policy-arn arn:aws:iam::aws:policy/AmazonFSxFullAccess \
    --approve \
    --role-name AmazonEKSFSxLustreCSIDriverFullAccess \
    --region $region_code

  • 다음 명령을 사용하여 드라이버를 배포합니다.
kubectl apply -k "github.com/kubernetes-sigs/aws-fsx-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

  • 이전에 생성한 서비스 계정을 추가하도록 드라이버 배포를 패치합니다.
kubectl annotate serviceaccount -n kube-system fsx-csi-controller-sa \
eks.amazonaws.com/role-arn=arn:aws:iam::251054188804:role/AmazonEKSFSxLustreCSIDriverFullAccess \
--overwrite=true

 

[ SC,PVC 및 샘플 애플리케이션을 배포하여 CSI 드라이버 작동 확인 ]

  • 클러스터의 보안 그룹을 기록합니다
aws eks describe-cluster --name $cluster_name --query cluster.resourcesVpcConfig.clusterSecurityGroupId

사용자 지정 TCP 규칙 TCP 988 사용자 지정을 선택하고 방금 생성한 보안 그룹의 보안 그룹 ID를 입력합니다. Lustre 파일 서버의 FSx 간 Lustre 트래픽을 허용합니다.
사용자 지정 TCP 규칙 TCP 988 사용자 지정을 선택하고 Lustre 클라이언트와 연결된 보안 그룹의 보안 그룹 ID를 입력합니다. Lustre 파일 서버와 Lustre 클라이언트에 대한 FSx 간의 Lustre 트래픽을 허용합니다.
사용자 지정 TCP 규칙 TCP 1018-1023 사용자 지정을 선택하고 방금 생성한 보안 그룹의 보안 그룹 ID를 입력합니다. Lustre 파일 서버의 FSx 간 Lustre 트래픽을 허용합니다.
사용자 지정 TCP 규칙 TCP 1018-1023 사용자 지정을 선택하고 Lustre 클라이언트와 연결된 보안 그룹의 보안 그룹 ID를 입력합니다. Lustre 파일 서버와 Lustre 클라이언트에 대한 FSx 간의 Lustre 트래픽을 허용합니다.
  • “Lustre 클라이언트와 연결된 보안 그룹”의 경우 클러스터 보안 그룹을 사용
  • 아웃바운드 규칙을 그대로 두어 모든 트래픽을 허용

  • 토리지 클래스 매니페스트를 다운로드합니다.
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
  • storageclass.yaml 파일의 파라미터 섹션을 편집합니다
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: fsx-sc
provisioner: fsx.csi.aws.com
parameters:
  subnetId: subnet-0bbb115f197f69bd2
  securityGroupIds: sg-0773e2d4f0bef361a
  deploymentType: PERSISTENT_1
  automaticBackupRetentionDays: "1"
  dailyAutomaticBackupStartTime: "00:00"
  copyTagsToBackups: "true"
  perUnitStorageThroughput: "200"
  dataCompressionType: "NONE"
  weeklyMaintenanceStartTime: "7:09:00"
  fileSystemTypeVersion: "2.12"
  extraTags: "Tag1=Value1,Tag2=Value2"
mountOptions:
  - flock
  • 스토리지 클래스 매니페스트를 생성합니다.

  • PersistentVolumeClaim 매니페스트를 다운로드합니다.
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: fsx-claim
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: fsx-sc
  resources:
    requests:
      storage: 1200Gi
  • PersistentVolumeClaim  생성하고 정보를 확인합니다.

  • 샘플 애플리케이션을 배포합니다.
apiVersion: v1
kind: Pod
metadata:
  name: fsx-app
spec:
  containers:
  - name: app
    image: centos
    command: ["/bin/sh"]
    args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done"]
    volumeMounts:
    - name: persistent-storage
      mountPath: /data
  volumes:
  - name: persistent-storage
    persistentVolumeClaim:
      claimName: fsx-claim
  • Pod 배포 후 파일 시스템이 마운트 되었는지 확인합니다.
  • 데이터가 FSx for Lustre 파일 시스템에 작성되었는지 확인합니다.
  • 파일 시스템에 out.txt 파일을 성공적으로 기록했다는 것을 확인합니다.

 

Comments