View a markdown version of this page

스토리지 클래스 생성 - Amazon EKS

이 페이지 개선에 도움 주기

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

스토리지 클래스 생성

Amazon EKS 자동 모드의 StorageClass는 애플리케이션이 영구 스토리지를 요청할 때 Amazon EBS 볼륨이 자동으로 프로비저닝되는 방식을 정의합니다. 이 페이지에서는 Amazon EKS 자동 모드와 함께 작동하여 EBS 볼륨을 프로비저닝하는 StorageClass를 생성하고 구성하는 방법을 설명합니다.

StorageClass를 구성하여 볼륨 유형, 암호화, IOPS 및 기타 스토리지 파라미터를 포함하여 EBS 볼륨에 대한 기본 설정을 지정할 수 있습니다. 암호화 관리에 AWS KMS 키를 사용하도록 StorageClass를 구성할 수도 있습니다.

EKS 자동 모드는 StorageClass를 생성하지 않습니다. EKS 자동 모드의 스토리지 기능을 사용하려면 ebs.csi.eks.amazonaws.com을 참조하는 StorageClass를 생성해야 합니다.

첫째, storage-class.yaml라는 이름의 파일을 만듭니다.

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" allowedTopologies: - matchLabelExpressions: - key: eks.amazonaws.com/compute-type values: - auto provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"

둘째, 클러스터에 스토리지 클래스를 적용합니다.

kubectl apply -f storage-class.yaml

핵심 구성 요소:

  • provisioner: ebs---csi---eks.amazonaws.com.rproxy.govskope.ca-EKS Auto Mode를 사용합니다.

  • allowedTopologies - eks.amazonaws.com/compute-type:auto에서 일치하도록 matchLabelExpressions를 지정하면 포드가 자동 모드를 사용하여 볼륨을 자동으로 프로비저닝해야 하는 경우 포드가 자동 모드가 아닌 노드에서 예약되지 않습니다.

  • volumeBindingMode: WaitForFirstConsumer-포드에 필요할 때까지 볼륨 생성을 지연합니다.

  • type: gp3-EBS 볼륨 유형을 지정합니다.

  • encrypted: "true" - EBS는 StorageClass를 사용하여 생성된 모든 볼륨을 암호화합니다. EBS는 기본 aws/ebs 키 별칭을 사용합니다. 자세한 내용은 Amazon EBS 사용 설명서의 How Amazon EBS encryption works을 참조하세요. 이 값은 선택 사항이지만 권장됩니다.

  • storageclass.kubernetes.io/is-default-class: "true"-영구 볼륨 클레임에서 다른 볼륨 클래스를 지정하지 않는 한 Kubernetes는 기본적으로 이 스토리지 클래스를 사용합니다. 이 값은 선택 사항입니다. 다른 스토리지 컨트롤러에서 마이그레이션하는 경우 이 값을 설정할 때 주의하세요.

자체 관리형 KMS 키를 사용하여 EBS 볼륨 암호화

자체 관리형 KMS 키를 사용하여 EKS Auto Mode로 자동화된 EBS 볼륨을 암호화하려면 다음을 수행해야 합니다.

  1. 자체 관리형 KMS 키를 생성합니다.

  2. KMS 키에 대한 액세스를 허용하는 새 정책을 생성합니다.

    • 아래의 샘플 IAM 정책을 사용하여 정책을 생성합니다. 새 자체 관리형 KMS 키의 ARN을 삽입합니다. 자세한 내용은 AWS IAM 사용 설명서의 Creating roles and attaching policies (console)을 참조하세요.

  3. 정책을 EKS 클러스터 역할에 연결합니다.

    • AWS 콘솔을 사용하여 EKS 클러스터 역할의 ARN을 찾습니다. 역할 정보는 개요 섹션에 표시됩니다. 자세한 내용은 Amazon EKS 클러스터 IAM 역할 섹션을 참조하세요.

  4. parameters.kmsKeyId 필드에서 KMS 키 ID를 참조하도록 StorageClass를 업데이트합니다.

샘플 자체 관리형 KMS IAM 정책

아래 정책에서 다음 값을 업데이트합니다.

  • <account-id> - AWS 계정 ID(예: 111122223333)

  • <aws-region> - 클러스터의 AWS 리전(예: us-west-2)

{ "Version":"2012-10-17", "Id": "key-auto-policy-3", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "123456789012", "kms:ViaService": "ec2.us-east-1.amazonaws.com" } } } ] }

샘플 자체 관리형 KMS StorageClass

parameters: type: gp3 encrypted: "true" kmsKeyId: <custom-key-arn>

StorageClass 파라미터 참조

Kubernetes StorageClass 리소스에 대한 일반적인 내용은 Kubernetes 설명서의 Storage Classes를 참조하세요.

StorageClass 리소스의 parameters 섹션은 AWS에 특정합니다. 다음 표를 이용하여 사용 가능한 옵션을 검토하세요.

파라미터 값 기본값 설명

"csi.storage.k8s.io/fstype"

xfs, ext2, ext3, ext4

ext4

볼륨 생성 중에 형식을 지정할 파일 시스템 유형입니다. 이 파라미터는 대소문자를 구분합니다.

"type"

io1, io2, gp2, gp3, sc1, st1, standard, sbp1, sbg1

gp3

EBS 볼륨 유형.

"iopsPerGB"

GiB당 초당 I/O 작업. IO1, IO2, GP3 볼륨에 대해 지정할 수 있습니다.

"allowAutoIOPSPerGBIncrease"

true, false

false

"true"인 경우, CSI 드라이버는 iopsPerGB * <volume size>가 너무 낮아 AWS에서 지원하는 IOPS 범위에 맞지 않는 경우 볼륨에 대해 IOPS를 늘립니다. 이렇게 하면 사용자가 너무 작은 PVC 용량 또는 iopsPerGB 값을 지정하는 경우에도 동적 프로비저닝이 항상 성공할 수 있습니다. 반면, 이러한 볼륨은 iopsPerGB에서 요청된 것보다 IOPS가 높기 때문에 추가 비용이 발생할 수 있습니다.

"iops"

초당 I/O 작업. IO1, IO2, GP3 볼륨에 대해 지정할 수 있습니다.

"throughput"

125

처리량 단위는 MiB/s입니다. gp3 볼륨 유형이 지정된 경우에만 유효합니다.

"encrypted"

true, false

false

볼륨이 암호화되어야 하는지 여부입니다. 유효한 값은 "true" 또는 "false"입니다.

"blockExpress"

true, false

false

io2 Block Express 볼륨 생성을 활성화합니다.

"kmsKeyId"

볼륨을 암호화할 때 사용할 키의 전체 ARN입니다. 지정하지 않으면 AWS는 볼륨이 있는 리전에 기본 KMS 키를 사용합니다. 변경하지 않으면 /aws/ebs라는 자동 생성된 키가 됩니다.

"blockSize"

기본 파일 시스템을 포맷할 때 사용할 블록 크기입니다. Linux 노드와 fstype ext2, ext3, ext4 또는 xfs에서만 지원됩니다.

"inodeSize"

기본 파일 시스템을 포맷할 때 사용할 inode 크기입니다. Linux 노드와 fstype ext2, ext3, ext4 또는 xfs에서만 지원됩니다.

"bytesPerInode"

기본 파일 시스템을 포맷할 때 사용할 bytes-per-inode입니다. linux 노드와 fstype ext2, ext3, ext4에서만 지원됩니다.

"numberOfInodes"

기본 파일 시스템을 포맷할 때 사용할 number-of-inodes입니다. linux 노드와 fstype ext2, ext3, ext4에서만 지원됩니다.

"ext4BigAlloc"

true, false

false

bigalloc 형식 지정 옵션을 활성화하여 클러스터링된 블록 할당을 사용하도록 ext4 파일 시스템을 변경합니다. 경고: bigalloc가 노드의 Linux 커널에서 완전히 지원되지 않을 수 있습니다.

"ext4ClusterSize"

bigalloc 기능이 활성화된 경우 ext4 파일 시스템을 포맷할 때 사용할 클러스터 크기입니다. 참고: ext4BigAlloc 파라미터를 true로 설정해야 합니다.

자세한 내용은 GitHub의 AWS EBS CSI 드라이버를 참조하세요.

고려 사항

참고

EKS Auto Mode 노드의 EKS Auto Mode StorageClasses에 따라 워크로드만 배포할 수 있습니다. 노드 유형이 혼합된 클러스터가 있는 경우 EKS Auto Mode 노드에서만 실행되도록 워크로드를 구성해야 합니다. 자세한 내용은 EKS Auto Mode 노드에 워크로드 배포 여부 제어 섹션을 참조하세요.

EKS Auto Mode의 블록 스토리지 기능은 EBS CSI 드라이버와 다릅니다.

  • 정적 프로비저닝

    • EKS Auto Mode에서 외부에서 생성된 EBS 볼륨을 사용하려면 키 eks:eks-cluster-name와 클러스터 이름의 값이 포함된 AWS 태그를 수동으로 추가해야 합니다.

  • 노드 시작 테인트

    • 노드 시작 테인트 기능을 사용하여 스토리지 기능 준비 전에 포드 예약을 방지할 수 없습니다.

  • 동적으로 프로비저닝된 볼륨의 사용자 지정 태그

    • 추가 태그 CLI 플래그를 사용하여 동적으로 프로비저닝된 EBS 볼륨에 사용자 지정 태그를 구성할 수 없습니다.

    • StorageClass 태깅을 사용하여 사용자 지정 태그를 추가할 수 있습니다. EKS Auto Mode는 연결된 AWS 리소스에 태그를 추가합니다. 사용자 지정 태그에 대한 클러스터 IAM 역할을 업데이트해야 합니다. 자세한 내용은 EKS Auto 리소스에 대한 사용자 지정 AWS 태그 섹션을 참조하세요.

  • EBS 세부 성능 지표

    • EBS 세부 성능에 대한 Prometheus 지표에 액세스할 수 없습니다.

주석 기반 EBS 볼륨 수정이 사용 중지됨

volume-modifier-for-k8s 프로젝트는 사용 중지되었으며 대신 네이티브 Kubernetes VolumeAttributesClass API를 사용하게 되었습니다. 이 프로젝트는 PersistentVolumeClaim에서 주석을 설정해 EBS 볼륨을 수정하는 데 사용되었습니다. 2026년 10월 31일 이후부터 Amazon EKS Auto Mode는 더 이상 이러한 주석을 지원하지 않습니다. 해당 날짜 이후 EBS 볼륨(예: type, iops 또는 throughput)을 수정하려면 대신 Kubernetes VolumeAttributesClass API를 사용하세요. 자세한 내용은 Kubernetes 설명서의 Volume Attributes Classes를 참조하세요.

volume-modifier-for-k8s에서 VolumeAttributesClass로 마이그레이션

Kubernetes 1.34 이후 버전을 실행 중인 EKS Auto Mode 클러스터의 경우, VolumeAttributesClass(VAC)를 사용해 EBS 볼륨의 유형, IOPS 또는 처리량을 변경합니다.

VAC를 생성하고 기존 PVC에서 spec.volumeAttributesClassName을 설정하면 기존 PVC를 제자리에서 마이그레이션할 수 있습니다. PVC와 PV가 재생성되지 않고, 이 프로세스 중에 워크로드에 중단이 발생하지 않습니다.

  1. VAC에서 볼륨 설정 정의

    VMK 주석은 다음과 같이 VAC 파라미터로 매핑됩니다.

    기존 VMK 주석 VAC 파라미터

    ebs.csi.eks.amazonaws.com/volumeType

    유형

    ebs.csi.eks.amazonaws.com/iops

    iops

    ebs.csi.eks.amazonaws.com/throughput

    처리량

    VAC에서 volumeType 말고 type을 사용하세요. 값은 문자열이어야 하고, VAC에는 원하는 EBS 구성과 관련 있는 파라미터만 필요합니다. 예제:

    apiVersion: storage.k8s.io/v1 kind: VolumeAttributesClass metadata: name: ebs-auto-gp3-6000-250 driverName: ebs.csi.eks.amazonaws.com parameters: type: gp3 iops: "6000" throughput: "250"

    VAC는 클러스터로 범위가 지정되므로 매니페스트에 네임스페이스가 없습니다. 정상적으로 적용하세요.

    kubectl apply -f vac.yaml
  2. VAC를 PVC에 할당

    VAC_NAME=ebs-auto-gp3-6000-250 kubectl patch pvc <pvc-name> -n <namespace> --type=merge \ -p "{\"spec\":{\"volumeAttributesClassName\":\"${VAC_NAME}\"}}"
  3. 변경이 완료되었는지 확인

    kubectl get pvc <pvc-name> -n <namespace> \ -o custom-columns='NAME:.metadata.name,REQUESTED:.spec.volumeAttributesClassName,CURRENT:.status.currentVolumeAttributesClassName,STATUS:.status.modifyVolumeStatus.status'

    REQUESTED 및 CURRENT에 동일한 VAC 이름이 있고 STATUS가 비어 있으면 마이그레이션이 완료된 것입니다.

    마이그레이션이 완료되지 않는 경우, PVC 이벤트를 검사하세요.

    kubectl describe pvc <pvc-name> -n <namespace>

    Pending인 경우 보통 참조된 VAC를 사용할 수 없다는 의미입니다. Infeasible은 드라이버가 요청된 EBS 파라미터를 거부했다는 의미입니다. 유효한 VAC를 생성해 해당 VAC를 대신 할당하세요.

선택 사항: VMK 주석 제거

기존 주석을 제거하지 않아도 VAC는 작동합니다. PVC 또는 PV가 VAC를 참조하면 VMK가 주석 기반 수정을 거부하고, VAC가 권한 있는 경로가 됩니다.

주석은 나중에 구성 정리로 제거할 수 있습니다. 주석을 제거하는 경우, 주석을 다시 추가하는 각종 헬름, GitOps 또는 기타 자동화도 업데이트하세요. PV에 남은 VMK 상태 주석은 무해하며 제거할 필요가 없습니다.

설정 변경 또는 되돌리기

VAC 파라미터는 변경 불가합니다. EBS 구성을 변경하려면 VAC를 하나 더 생성해 해당 VAC의 이름을 PVC에 할당하세요.

완료되지 않은 변경 사항을 취소하려면 이전에 할당한 VAC를 복원합니다. PVC가 이전에 VAC를 사용하지 않았다면, 해당 필드를 지우세요.

kubectl patch pvc <pvc-name> -n <namespace> --type=merge \ -p '{"spec":{"volumeAttributesClassName":null}}'

필드를 지워도 이미 완료된 EBS 수정 사항이 실행 취소되지는 않습니다. 이전 볼륨 설정을 복원하려면 해당 설정을 포함하는 VAC를 생성해 해당 VAC를 PVC에 할당하세요. 정상적인 EBS 파라미터 제한 사항 및 수정 휴지 기간이 적용됩니다.

CSI 스냅샷 컨트롤러 추가 기능 설치

EKS Auto Mode는 CSI 스냅샷 컨트롤러 Amazon EKS 추가 기능과 호환됩니다.

AWS에서는 이 추가 기능을 내장 system 노드 풀에서 실행하도록 구성할 것을 제안합니다.

자세한 내용은 다음을 참조하세요.

시스템 노드 풀에 스냅샷 컨트롤러를 설치하려면

  1. AWS 콘솔에서 EKS 클러스터 열기

  2. 추가 기능 탭에서 추가 기능 더 가져오기를 선택합니다.

  3. CSI 스냅샷 컨트롤러와 다음을 차례로 선택합니다.

  4. 선택한 추가 기능 설정 구성 페이지에서 선택적 구성 설정을 선택하여 추가 기능 구성 스키마를 확인합니다.

    1. 스냅샷 컨트롤러를 system 노드 풀과 연결하려면 다음 yaml을 삽입합니다. 스냅샷 컨트롤러에는 CriticalAddonsOnly 테인트에 대한 허용치가 포함됩니다.

      { "nodeSelector": { "karpenter.sh/nodepool": "system" } }
    2. 다음을 선택합니다.

  5. 추가 기능 구성을 검토한 다음 생성을 선택합니다.