GKE on AWS는 클러스터에서 Amazon EBS 볼륨 프로비저닝 및 관리를 위해 Amazon Elastic Block Store(EBS)용 컨테이너 스토리지 인터페이스(CSI) 드라이버를 자동으로 배포합니다.
GKE on AWS EBS CSI 드라이버 버전은 GKE on AWS Kubernetes 버전과 연결되어 있습니다. 일반적으로 드라이버 버전은 GKE 버전 출시 시점에 사용 가능한 최신 버전입니다. 클러스터가 업그레이드되면 드라이버가 자동으로 업데이트됩니다.
기본 StorageClass 사용 방법
spec.storageClassName
필드를 설정하지 않고 PersistentVolumeClaim을 만들면 기본 GKE on AWS EBS CSI 드라이버 StorageClass를 사용하여 gp2
볼륨이 프로비저닝됩니다.
다음 YAML은 크기가 30기비바이트인 mypvc
라는 PersistentVolumeClaim(PVC)을 만듭니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
사전 설치된 다른 StorageClass 사용 방법
GKE on AWS EBS CSI 드라이버에는 또한 높은 처리량의 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 사용 방법
EBS 볼륨에 대해 추가 StorageClass를 만들거나 컨테이너 스토리지 인터페이스(CSI) 드라이버를 사용할 수 있습니다.
EBS 볼륨 또는 특정 CSI 드라이버를 사용할지 선택합니다.
EBS 볼륨
EBS 볼륨 유형, 파일 시스템 유형, 다른 매개변수를 지정하는 고유 커스텀 StorageClass를 만들 수 있습니다. GKE on AWS 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 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 volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
CSI 드라이버
provisioner
필드에 다른 CSI 드라이버를 지정할 수 있습니다.다른 CSI 드라이버를 사용하여 StorageClass를 만들려면 아래 YAML 예시를 사용하면 됩니다.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME volumeBindingMode: WaitForFirstConsumer parameters: ...
다음을 바꿉니다.
CSI_DRIVER_NAME
을 CSI 드라이버의 이름으로 바꿉니다(예:csi.example.com
).CLASS_NAME
을 StorageClass 이름으로 바꿉니다(예:my-custom-class
).
CSI 드라이버에 따라
parameters
아래에서 하위 필드를 구성합니다.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 volumeBindingMode: WaitForFirstConsumer parameters: type: EBS_VOLUME_TYPE
다음을 바꿉니다.
EBS_VOLUME_TYPE
: StorageClass가 만드는 AWS EBS 볼륨 유형입니다.CLASS_NAME
을 새 StorageClass의 이름으로 바꿉니다.
예를 들어 다음 YAML은 XFS 파일 시스템으로 포맷된 처리량 최적화 HDD EBS 볼륨을 프로비저닝하는 새 기본 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 volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
새 커스텀 클래스를 클러스터에 적용합니다.
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의 영구 볼륨 알아보기
GKE on AWS 클러스터에 스토리지 드라이버를 설치합니다.
빠른 시작으로 첫 번째 워크로드를 배포합니다.