GKE on AWS는 컨테이너 스토리지 인터페이스(CSI) Amazon Elastic Block Store(EBS) 및 Amazon Elastic File Store(EFS)를 자동으로 배포합니다.
EBS CSI 드라이버 및 EFS CSI 드라이버 버전은 AWS용 GKE Kubernetes 버전과 연결되어 있습니다. 일반적으로 드라이버 버전은 GKE 버전 출시 시점에 사용 가능한 최신 버전입니다. 클러스터가 업그레이드되면 드라이버가 자동으로 업데이트됩니다.
기본 StorageClass 사용
spec.storageClassName
필드를 사용하지 않고 PersistentVolumeClaim을 만들면 기본 AWS용 GKE EBS CSI 드라이버 StorageClass를 사용하여 범용 SSD 볼륨(gp2)이 프로비저닝됩니다.
다음 YAML은 크기가 30기비바이트인 mypvc
라는 PersistentVolumeClaim(PVC)을 만듭니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
사전 설치된 다른 StorageClass 사용
AWS용 GKE EBS CSI 드라이버에는 또한 높은 처리량의 프로비저닝된 IOPS SSD 볼륨(io1
)을 프로비저닝하는 premium-rwo
StorageClass가 포함됩니다.
PVC의 spec.storageClassName
에 지정하여 사용할 수 있습니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageClassName: premium-rwo
커스텀 StorageClass 사용
기본 또는 premium-rwo
StorageClass가 니즈를 충족하지 않으면 EBS 볼륨에 대해 추가 StorageClass를 만들거나 컨테이너 스토리지 인터페이스(CSI) 드라이버를 사용할 수 있습니다.
EBS 볼륨 또는 다른 CSI 드라이버를 사용 중인지 선택합니다.
EBS 볼륨
이 탭에서는 EBS 볼륨 유형, 파일 시스템 유형, 다른 매개변수를 지정하는 고유 커스텀 StorageClass를 만드는 방법을 보여줍니다. AWS용 GKE EBS CSI 드라이버 GitHub 페이지에서 추가 StorageClass 매개변수를 찾을 수 있습니다.
커스텀 StorageClass를 구성하려면 다음 YAML 매니페스트를
my-custom-class.yaml
파일에 복사합니다.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: ebs.csi.aws.com allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer
CLASS_NAME
을 새 StorageClass 이름으로 바꿉니다.예를 들어 다음 YAML은 XFS 파일 시스템으로 포맷된 처리량 최적화 HDD EBS 볼륨을 프로비저닝하는 새 StorageClass를 만듭니다.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-class provisioner: ebs.csi.aws.com allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
커스텀 EFS StorageClass
이 탭에서는 EFS CSI 드라이버 프로비저닝 도구의 커스텀 StorageClass를 만드는 방법을 설명합니다. 이 StorageClass의 기본 요건 목록은 EFS 리소스 사용을 참조하세요. EFS CSI 드라이버 페이지에는 다음 매니페스트 이외의 추가 StorageClass 매개변수가 나열됩니다.
다음 YAML 매니페스트를
my-custom-class.yaml
이라는 파일에 복사합니다.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: <var>EFS_STORAGE_CLASS_NAME</var> provisioner: efs.csi.aws.com mountOptions: - tls parameters: provisioningMode: efs-ap fileSystemId: EFS_ID directoryPerms: "700"
다음과 같이 바꿉니다.
- EFS_STORAGE_CLASS_NAME을
StorageClass
이름으로 바꿉니다. - EFS_ID를 EFS 파일 시스템 ID로 바꿉니다(예: fs-12345678a).
CSI 드라이버
provisioner
필드에 다른 CSI 드라이버를 지정할 수 있습니다.다른 CSI 드라이버를 사용하여 StorageClass를 만들려면 아래 YAML 예시를 사용하면 됩니다.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: ...
다음을 바꿉니다.
CSI_DRIVER_NAME
을 CSI 드라이버의 이름으로 바꿉니다(예:csi.example.com
).CLASS_NAME
을 StorageClass 이름으로 바꿉니다(예:my-custom-class
).
CSI 드라이버에 따라
parameters
아래에서 하위 필드를 구성합니다.- EFS_STORAGE_CLASS_NAME을
YAML을 클러스터에 적용합니다.
kubectl apply -f my-custom-class.yaml
커스텀 StorageClass로 PersistentVolumeClaim 만들기
커스텀 StorageClass가 생성되면 PVC에서 지정할 수 있습니다. 아래 예시에서는 StorageClass
my-custom-class
를 참조하는my-pvc
라는 이름의 PVC를 만듭니다.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageClassName: my-custom-class
기본 StorageClass 설정
AWS용 GKE는 gp2 EBS 볼륨을 프로비저닝하는 standard-rwo
라는 기본 StorageClass를 사용합니다. 기본값을 다른 StorageClass로 변경할 수 있습니다.
기본 StorageClass를 변경하려면 다음 안내를 따르세요.
standard-rwo
StorageClass의is-default-class
주석을kubectl patch
로 업데이트합니다.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
storageclass.kubernetes.io/is-default-class: true
주석이 있는 새 StorageClass를 만듭니다.다음 StorageClass 예시에서는
ebs.csi.aws.com
드라이버를 사용합니다. 다른 스토리지 드라이버를 설치하려면 추가 CSI 드라이버 설치를 참조하세요.다음 YAML을
my-custom-class.yaml
이라는 파일에 복사합니다.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME annotations: storageclass.kubernetes.io/is-default-class: true provisioner: ebs.csi.aws.com allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: type: EBS_VOLUME_TYPE
다음을 바꿉니다.
EBS_VOLUME_TYPE
: StorageClass가 만드는 AWS EBS 볼륨 유형입니다.CLASS_NAME
을 새 StorageClass의 이름으로 바꿉니다.
예를 들어 다음 YAML은 범용 SSD 볼륨(gp3)을 프로비저닝하는 새 기본 StorageClass를 만듭니다.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-default-class annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.aws.com allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: type: gp3
새 커스텀 클래스를 클러스터에 적용합니다.
kubectl apply -f my-custom-class.yaml
이 매니페스트를 적용한 후 GKE on AWS는 새 스토리지 요청에 my-custom-default-class
StorageClass를 사용합니다.
StatefulSet에서 StorageClass 참조
새 StorageClass를 사용하려면 StatefulSet의 volumeClaimTemplates
에서 이를 참조해야 합니다.
StatefulSet의 volumeClaimTemplates
사양에서 StorageClass를 참조하면 Kubernetes는 PersistentVolume(PV)을 사용하여 안정적인 스토리지를 제공합니다.
Kubernetes는 StorageClass에 정의된 프로비저닝 도구를 호출하여 새 스토리지 볼륨을 만듭니다. 볼륨이 프로비저닝되면 Kubernetes가 PV를 자동으로 만듭니다.
다음 StatefulSet는 my-custom-class
StorageClass를 참조하고 1기비바이트 볼륨을 프로비저닝합니다.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: registry.k8s.io/nginx-slim:0.8
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates: # This is the specification in which you reference the StorageClass
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
storageClassName: my-custom-class # This field references the existing StorageClass
다음 단계
GKE의 영구 볼륨 및 동적 프로비저닝 알아보기
AWS용 GKE에 추가 CSI 드라이버를 설치합니다.
빠른 시작으로 첫 번째 워크로드를 배포합니다.