View a markdown version of this page

Kubernetes 볼륨 스토리지에 대한 Amazon EC2 인스턴스 저장소 - Amazon EKS

이 페이지 개선에 도움 주기

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

Kubernetes 볼륨 스토리지에 대한 Amazon EC2 인스턴스 저장소

Amazon EC2 인스턴스 저장소 CSI 드라이버는 Kubernetes에서 EC2 인스턴스 저장소 볼륨을 사용하도록 지원하는 컨테이너 스토리지 인터페이스(CSI) 플러그인입니다. 인스턴스 저장소 볼륨은 호스트 컴퓨터에 물리적으로 연결된 임시 블록 스토리지를 제공합니다. 드라이버는 이러한 NVMe 스토리지 볼륨의 수명 주기를 관리하고 이를 Kubernetes 영구 볼륨으로 사용할 수 있도록 합니다.

Amazon EC2 인스턴스 저장소 CSI 드라이버는 로컬 Linux 작업을 통해 백엔드 NVMe 디바이스와 상호 작용합니다. AWS API 직접 호출은 포함되지 않으므로 IAM 역할은 필요하지 않습니다.

고려 사항

중요

Amazon EC2 인스턴스 저장소 CSI 드라이버는 설치 중에 임시 디스크의 모든 데이터를 지웁니다. 다른 CSI 드라이버 또는 볼륨 관리 시스템(예: LVM, 원시 파일 시스템, LUKS 등)이 임시 디스크를 관리하는 경우 Amazon EC2 인스턴스 저장소 CSI 드라이버를 설치하기 전에 데이터를 백업하여 데이터 손실을 방지합니다.

  • Amazon EC2 인스턴스 저장소 CSI 드라이버는 EKS 자율 모드에서 작동하지 않습니다.

  • Fargate 포드에 Amazon EC2 인스턴스 저장소를 탑재할 수 없습니다.

  • Amazon EC2 인스턴스 저장소 CSI 드라이버는 C1, C3, C4, C5d, C5ad, C6gd, D2, D3, D3en, DL1, E3, Edge1gd, F1, G2, G3, G4ad, G4dn, H1, HSM1, I2, I3, I3.metal, I3en, M1, M2, M3, M4, M5d, M5ad, M5dn, M6gd, P2, P3, P3dn, P4d, P4de, R3, R4, R5d, R5ad, R5dn, R6gd, T1, T2, X1, X1e, X2gd, Z1d와 같은 인스턴스 유형에 대해 사용할 수 없습니다.

  • 최신 추가 기능 버전과 하나의 이전 버전에 대한 지원이 제공됩니다. 최신 버전에서 발견된 버그나 취약성에 대한 수정 사항은 새 마이너 버전의 이전 릴리스로 백포트됩니다.

  • 인스턴스 스토리지는 임시 스토리지입니다. 노드가 종료되면 데이터가 손실됩니다. 중요한 데이터에 대한 애플리케이션 수준 복제 또는 백업을 구현합니다.

  • 볼륨 확장은 지원되지 않습니다.

  • 워크로드 간 공정한 대역폭 공유를 위해 모든 볼륨에 기본적으로 I/O 스로틀링이 활성화됩니다. 자세한 내용은 I/O 스로틀링 섹션을 참조하세요.

  • 동일한 유형의 이전 인스턴스와 비교하여 새로 시작된 인스턴스에는 업데이트된 NVMe identify 명령 응답이 있습니다. 도구가 특정 NVMe identify 값에 의존하는 경우 로직의 호환성을 검토하세요. 자세한 내용은 새로 시작된 인스턴스의 NVMe 네임스페이스 변경 사항 섹션을 참조하세요.

사전 조건

시작하기 전에 다음 항목이 준비되었는지 확인합니다.

  • 기존 Amazon EKS 클러스터. 추가 기능의 사용 가능한 모든 버전을 보려면 다음 AWS CLI 명령을 실행합니다.

    aws eks describe-addon-versions --addon-name aws-ec2-local-instance-store-csi-driver

Amazon EC2 인스턴스 저장소 CSI 드라이버 설치

Amazon EC2 인스턴스 저장소 CSI 드라이버는 Amazon EKS 추가 기능으로 사용할 수 있습니다. 드라이버를 설치하면 클러스터에서 포드 스토리지에 대해 인스턴스 저장소 볼륨을 사용할 수 있습니다.

드라이버를 설치하려면 클러스터에 Amazon EC2 인스턴스 저장소 CSI 드라이버 추가 기능을 추가합니다. 관련 지침은 Amazon SNS 추가 기능 생성을 참조하세요. EKS 추가 기능에 대한 자세한 내용은 Amazon EKS 추가 기능을 참조하세요.

샘플 애플리케이션 배포

드라이버를 설치한 후 샘플 애플리케이션을 배포하여 인스턴스 저장소 볼륨이 클러스터에서 올바르게 작동하는지 확인할 수 있습니다. 다양한 샘플 앱을 배포하고 필요에 따라 수정할 수 있습니다.

I/O 스로틀링

Amazon EC2 인스턴스 저장소 CSI 드라이버에는 동일한 NVMe 컨트롤러에서 워크로드 간 공정한 대역폭 공유를 보장하기 위한 기본 제공 I/O 스로틀링이 포함되어 있습니다. 기본적으로 모든 볼륨에서 스로틀링이 활성화되어 있으므로 동일한 노드의 다른 워크로드를 희생시키면서 단일 워크로드가 불균형한 I/O 대역폭을 소비하는 것을 방지합니다.

스로틀링 구성

다음 두 가지 수준에서 스로틀링을 구성할 수 있습니다.

  • StorageClass 파라미터 - StorageClass 정의에서 throttling 파라미터를 "true"(기본값) 또는 "false"로 설정합니다.

  • PVC 주석 - 개별 PersistentVolumeClaims에서 lis.csi.aws.com/throttling 주석을 "true" 또는 "false"로 설정합니다. 그러면 StorageClass 설정이 있는 경우 재정의됩니다.

다음 표에서는 StorageClass 파라미터와 PVC 주석이 상호 작용하는 방식을 보여줍니다.

PVC 주석 StorageClass 파라미터 결과

설정되지 않음

설정되지 않음

스로틀링 활성화됨(기본값)

설정되지 않음

"false"

스로틀링 비활성화됨

"false"

"true" 또는 설정되지 않음

스로틀링 비활성화됨

"true"

"false"

스로틀링 활성화됨

스로틀링 없는 StorageClass 생성

StorageClass에서 모든 볼륨에 스로틀링을 비활성화하려면:

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ec2-instance-store-unthrottled provisioner: lis.csi.aws.com parameters: throttling: "false" volumeBindingMode: WaitForFirstConsumer

단일 PVC의 스로틀링 비활성화

스로틀링이 있는 StorageClass를 사용하는 동안 개별 PVC에서 스로틀링을 비활성화하려면:

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: high-perf-pvc annotations: lis.csi.aws.com/throttling: "false" spec: accessModes: - ReadWriteOnce storageClassName: ec2-instance-store-sc resources: requests: storage: 100Gi

스로틀링 고려 사항

  • NVMe 컨트롤러를 공유하는 모든 워크로드에서 예측 가능한 성능을 제공하기 위해 기본적으로 스로틀링이 활성화됩니다.

  • 한 볼륨에서 스로틀링을 비활성화하면 해당 볼륨이 더 많은 I/O 대역폭을 소비할 수 있어, 동일한 컨트롤러의 스로틀링이 있는 다른 볼륨의 성능에 영향을 미칠 수 있습니다.

  • 스로틀링 없는 워크로드를 전용 노드에 격리하는 것이 좋습니다.

  • 여러 컨트롤러에 걸쳐 있는 RAID-0 볼륨의 경우 모든 멤버 파티션에 스로틀링이 적용됩니다.

  • 스로틀링 상태는 노드가 재부팅되어도 유지됩니다.

새로 시작된 인스턴스의 NVMe 네임스페이스 변경 사항

로컬 인스턴스 스토리지를 사용하여 새로 시작된 EC2 인스턴스에는 업데이트된 NVMe Identify Controller 및 Identify Namespace 명령 응답이 있습니다. 이러한 변경 사항은 EC2 로컬 인스턴스 스토리지에서 NVMe 네임스페이스 관리를 지원합니다. 실행 중인 기존 인스턴스는 영향을 받지 않으며, 값은 모든 인스턴스의 수명 주기 동안 안정적으로 유지됩니다.

업데이트된 필드 값

동일한 유형의 이전 인스턴스에 비해 새로 시작된 인스턴스에서 다음 필드가 변경되었습니다.

Identify Controller(nvme id-ctrl)
  • OACS의 비트 3: 0에서 1로 변경됨

  • OAES의 비트 8: 0에서 1로 변경됨

  • NN: 1에서 256 이하 값으로 변경됨

  • TNVMCAP: 0에서 로컬 스토리지의 실제 크기로 변경됨

Identify Namespace(nvme id-ns)
  • NVMCAP: 0에서 로컬 스토리지의 실제 크기로 변경됨

  • NGUID: 모두 0에서 유효한 NGUID로 변경됨

업데이트된 모든 값은 NVMe 사양을 준수합니다.

변경 범위

이러한 변경 사항은 EC2 로컬 인스턴스 스토리지에만 적용됩니다. Amazon EBS 볼륨은 영향을 받지 않습니다. EBS 볼륨과 로컬 인스턴스 스토리지를 구별하려면 다음 명령을 실행합니다.

sudo nvme list

출력에서:

  • Amazon Elastic Block Store = EBS 볼륨

  • Amazon EC2 NVMe Instance Storage = 로컬 인스턴스 스토리지

NVMe identify 값 검색

nvme-cli를 사용하여 이러한 값을 쿼리하려면:

# Identify Controller sudo nvme id-ctrl /dev/nvme1 # Identify Namespace sudo nvme id-ns /dev/nvme1n1

필요한 작업

아무 조치도 필요하지 않습니다. 이러한 변경 사항은 이전 버전과 호환되며 NVMe 사양을 따릅니다. 그러나 애플리케이션 또는 도구가 NVMe identify 명령의 특정 값을 검증하거나 해당 값에 의존하는 경우 로직을 검토하여 새로 시작된 인스턴스에서 업데이트된 값과의 호환성을 확인합니다.