GKE on AWS 會自動部署 Amazon Elastic Block Store (EBS) 的 Container Storage Interface (CSI) 驅動程式,以便在叢集中佈建及管理 Amazon EBS 磁碟區。
GKE on AWS EBS CSI 驅動程式版本與 GKE on AWS Kubernetes 版本相關。通常在 GKE 版本發布時,驅動程式版本會是最新版本。叢集升級時,驅動程式會自動更新。
如何使用預設 StorageClass
建立 PersistentVolumeClaim 時,如果未設定 spec.storageClassName
欄位,系統會使用預設的 GKE on AWS EBS CSI Driver StorageClass 佈建 gp2
磁碟區。
下列 YAML 會建立名為 mypvc
的 PersistentVolumeClaim (PVC),大小為 30 gibibytes。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
如何使用其他預先安裝的 StorageClass
AWS 上的 GKE EBS CSI 驅動程式也包含 premium-rwo
StorageClass,可佈建高輸送量io1
磁碟區。
如要使用,請在 PVC 的 spec.storageclassName
中指定。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageclassName: premium-rwo
如何使用自訂 StorageClass
您可以為 EBS 磁碟區建立額外的 StorageClass,或使用 Container Storage Interface (CSI) 驅動程式。
選擇您使用的是 EBS 磁碟區還是特定 CSI 驅動程式。
EBS 磁碟區
您可以建立自己的自訂 StorageClass,指定 EBS 磁碟區類型、檔案系統類型和其他參數。如要瞭解其他 StorageClass 參數,請前往 GKE on AWS EBS CSI 驅動程式的 GitHub 頁面。
如要設定自訂 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 會建立新的 StorageClass,並使用 XFS 檔案系統格式化,佈建以輸送量最佳化 HDD 為基礎的 EBS 磁碟區。
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 中指定該類別。以下範例會建立名為
my-pvc
的 PVC,並參照 StorageClassmy-custom-class
。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageclassName: my-custom-class
如何設定預設儲存空間級別
GKE on AWS 使用名為 standard-rwo
的預設 StorageClass,可佈建 gp2 EBS 磁碟區。您可以將預設值變更為其他 StorageClass。
如要變更預設的 StorageClass,請按照下列步驟操作:
使用
kubectl patch
更新standard-rwo
StorageClass 的is-default-class
註解。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 會建立新的預設 StorageClass,並使用 XFS 檔案系統格式化,佈建輸送量最佳化 HDD EBS 磁碟區。
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 gibibyte 的磁碟區:
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 叢集上安裝儲存空間驅動程式。
透過快速入門導覽課程部署第一個工作負載。