이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 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 볼륨을 암호화하려면 다음을 수행해야 합니다.
-
자체 관리형 KMS 키를 생성합니다.
-
자세한 내용은 KMS 사용 설명서의 Create a symmetric encryption KMS key 또는 How Amazon Elastic Block Store (Amazon EBS) uses KMS을 참조하세요.
-
-
KMS 키에 대한 액세스를 허용하는 새 정책을 생성합니다.
-
아래의 샘플 IAM 정책을 사용하여 정책을 생성합니다. 새 자체 관리형 KMS 키의 ARN을 삽입합니다. 자세한 내용은 AWS IAM 사용 설명서의 Creating roles and attaching policies (console)을 참조하세요.
-
-
정책을 EKS 클러스터 역할에 연결합니다.
-
AWS 콘솔을 사용하여 EKS 클러스터 역할의 ARN을 찾습니다. 역할 정보는 개요 섹션에 표시됩니다. 자세한 내용은 Amazon EKS 클러스터 IAM 역할 섹션을 참조하세요.
-
-
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 |
|
|
"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 키를 사용합니다. 변경하지 않으면 |
||
|
"blockSize" |
기본 파일 시스템을 포맷할 때 사용할 블록 크기입니다. Linux 노드와 fstype |
||
|
"inodeSize" |
기본 파일 시스템을 포맷할 때 사용할 inode 크기입니다. Linux 노드와 fstype |
||
|
"bytesPerInode" |
기본 파일 시스템을 포맷할 때 사용할 |
||
|
"numberOfInodes" |
기본 파일 시스템을 포맷할 때 사용할 |
||
|
"ext4BigAlloc" |
true, false |
false |
|
|
"ext4ClusterSize" |
|
자세한 내용은 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-k8sVolumeAttributesClasstype, 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가 재생성되지 않고, 이 프로세스 중에 워크로드에 중단이 발생하지 않습니다.
-
VAC에서 볼륨 설정 정의
VMK 주석은 다음과 같이 VAC 파라미터로 매핑됩니다.
기존 VMK 주석 VAC 파라미터 ebs.csi.eks.amazonaws.com/volumeType유형
ebs.csi.eks.amazonaws.com/iopsiops
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 -
VAC를 PVC에 할당
VAC_NAME=ebs-auto-gp3-6000-250 kubectl patch pvc <pvc-name> -n <namespace> --type=merge \ -p "{\"spec\":{\"volumeAttributesClassName\":\"${VAC_NAME}\"}}" -
변경이 완료되었는지 확인
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 노드 풀에서 실행하도록 구성할 것을 제안합니다.
자세한 내용은 다음을 참조하세요.
시스템 노드 풀에 스냅샷 컨트롤러를 설치하려면
-
AWS 콘솔에서 EKS 클러스터 열기
-
추가 기능 탭에서 추가 기능 더 가져오기를 선택합니다.
-
CSI 스냅샷 컨트롤러와 다음을 차례로 선택합니다.
-
선택한 추가 기능 설정 구성 페이지에서 선택적 구성 설정을 선택하여 추가 기능 구성 스키마를 확인합니다.
-
스냅샷 컨트롤러를
system노드 풀과 연결하려면 다음 yaml을 삽입합니다. 스냅샷 컨트롤러에는CriticalAddonsOnly테인트에 대한 허용치가 포함됩니다.{ "nodeSelector": { "karpenter.sh/nodepool": "system" } } -
다음을 선택합니다.
-
-
추가 기능 구성을 검토한 다음 생성을 선택합니다.