Ssoon
[3주차] EKS 스토리지 - FSx for Lustre CSI driver 본문
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
- FSx 파일 시스템에 대한 보안 그룹 을 생성합니다.
- 인바운드 규칙
사용자 지정 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 파일을 성공적으로 기록했다는 것을 확인합니다.
'AWS EKS Workshop Study' 카테고리의 다른 글
[4주차] EKS Observability - ADOT, AMP 및 AMG를 사용한 모니터링 (0) | 2023.05.20 |
---|---|
[4주차] EKS Observability - Logs, Traces and Metrics (0) | 2023.05.20 |
[3주차] EKS 스토리지 - EFS CSI driver (0) | 2023.05.12 |
[3주차] EKS 스토리지 - EBS CSI driver (0) | 2023.05.12 |
[2주차] EKS Networking - Custom configuration mode (0) | 2023.05.04 |