本頁說明如何在 Google Kubernetes Engine (GKE) 中啟用Hyperdisk Balanced 高可用性磁碟區和區域性永久磁碟的動態佈建,以及如何手動佈建這些磁碟。如要瞭解機器類型相容性,請參閱「區域磁碟的限制」和「支援 Hyperdisk 的機器系列」。一般來說,您應該為第 3 代機器系列或更新版本使用 Hyperdisk 平衡高可用性磁碟區,並為第 2 代機器系列或舊版使用區域永久磁碟。如要進一步瞭解機器系列世代,請參閱 Compute Engine 術語。
如要使用區域永久磁碟為高可用性應用程式建立端對端解決方案,請參閱「使用 Stateful HA Operator 提高有狀態應用程式的可用性」。這項功能不支援 Hyperdisk Balanced High Availability 磁碟區。
Hyperdisk Balanced High Availability
這個範例說明如何視需求動態佈建 Hyperdisk Balanced High Availability 磁碟區,或由叢集管理員事先手動佈建。
動態佈建
將下列資訊清單儲存至名為
balanced-ha-storage.yaml
的檔案。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: balanced-ha-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balanced-high-availability provisioned-throughput-on-create: "250Mi" provisioned-iops-on-create: "7000" allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - ZONE1 - ZONE2
更改下列內容:
ZONE1
、ZONE2
:動態佈建磁碟區的複本所在的區域。
建立 StorageClass:
kubectl create -f hdb-ha-example-class.yaml
將以下 PersistentVolumeClaim 資訊清單儲存至名為
pvc-example.yaml
的檔案:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ACCESS_MODE storageClassName: balanced-ha-storage resources: requests: storage: 20Gi
更改下列內容:
ACCESS_MODE
:Hyperdisk Balanced High Availability 支援ReadWriteOnce
、ReadWriteMany
和ReadWriteOncePod
。如要瞭解各存取模式的差異和用途,請參閱「永久磁碟區存取模式」。- 如果選擇使用
ReadWriteMany
,也必須將volumeMode: Block
新增至PersistentVolumeClaim
,如下列範例所示:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteMany volumeMode: Block storageClassName: balanced-ha-storage resources: requests: storage: 20Gi ```
套用參照您稍早建立的 StorageClass 的 PersistentVolumeClaim:
kubectl apply -f pvc-example.yaml
手動佈建
請按照 Compute Engine 說明文件,手動建立 Hyperdisk Balanced High Availability 磁碟區。
將下列 PersistentVolume 資訊清單儲存至名為
pv-example.yaml
的檔案。資訊清單會參照您剛建立的 Hyperdisk Balanced High Availability 磁碟區:apiVersion: v1 kind: PersistentVolume metadata: name: pv-demo spec: capacity: storage: 500Gi accessModes: - ACCESS_MODE claimRef: namespace: default name: podpvc csi: driver: pd.csi.storage.gke.io volumeHandle: projects/PROJECT_ID/regions/REGION/disks/gce-disk-1 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.gke.io/zone operator: In values: - ZONE1 - ZONE2
更改下列內容:
PROJECT_ID
:您建立的磁碟區專案 ID。REGION
:您建立的磁碟區域。如需最新區域供應情形,請參閱 Compute Engine 說明文件。ZONE1
、ZONE2
:您建立的磁碟區所複製的區域。ACCESS_MODE
:Hyperdisk Balanced High Availability 支援ReadWriteOnce
、ReadWriteMany
和ReadWriteOncePod
。如要瞭解各存取模式的差異和用途,請參閱「永久磁碟區存取模式」。
建立永久磁碟區,參照先前建立的 Hyperdisk 已平衡高可用性磁碟區:
kubectl apply -f pv-example.yaml
將以下 PersistentVolumeClaim 資訊清單儲存至名為
pvc-example.yaml
的檔案:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ACCESS_MODE storageClassName: balanced-ha-storage resources: requests: storage: 20Gi
更改下列內容:
ACCESS_MODE
:Hyperdisk Balanced High Availability 支援ReadWriteOnce
、ReadWriteMany
和ReadWriteOncePod
。必須與上一步驟中 PersistentVolume 指定的存取權模式相同。如要瞭解各存取模式的差異和用途,請參閱「永久磁碟區存取模式」。
套用參照您先前建立 PersistentVolume 的 PersistentVolumeClaim:
kubectl apply -f pvc-example.yaml
以區塊模式使用多寫入端磁碟區
如要在區塊模式下使用磁碟區,您必須在耗用 Pod 中指定 volumeBlock
,而不是 volumeMounts
。使用先前介紹的 PersistenVolumeClaim
的 Pod 範例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
volumeDevices:
- mountPath: /dev/my-device
name: mypvc
volumes:
- name: mypvc
persistentVolumeClaim:
claimName: podpvc
readOnly: false
區域性永久磁碟
與可用區永久磁碟相同,地區永久磁碟可以視需求動態佈建,或由叢集管理員事先手動佈建,但建議使用動態佈建。
如要使用 pd-standard
類型的地區永久磁碟,請將 PersistentVolumeClaim 的 spec.resources.requests.storage
屬性設為至少 200 GiB。如果您的使用案例需要較小的音量,請考慮改用 pd-balanced
或 pd-ssd
。
動態佈建
如要啟用地區永久磁碟的動態佈建,請使用 replication-type
參數建立 StorageClass
,並在 allowedTopologies
中指定區域限制。
舉例來說,下列資訊清單說明使用標準永久磁碟的 StorageClass
,並將資料複製到 europe-west1-b
和 europe-west1-c
區域:regionalpd-storageclass
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-balanced
replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: topology.gke.io/zone
values:
- europe-west1-b
- europe-west1-c
如果使用區域叢集,可以不指定 allowedTopologies
。如果您這麼做,當您建立使用這個 StorageClass
的 Pod 時,系統會佈建兩個可用區的地區永久磁碟。PersistentVolumeClaim
其中一個可用區與 Pod 排定時間的可用區相同。系統會從叢集可用的區域中隨機挑選其他區域。
使用可用區叢集時,必須設定 allowedTopologies
。
建立 StorageClass
後,請使用 storageClassName
欄位參照 StorageClass
,接著建立 PersistentVolumeClaim
物件。舉例來說,下列資訊清單會建立名為 regional-pvc
的 PersistentVolumeClaim
,並參照 regionalpd-storageclass
:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: regional-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Gi
storageClassName: regionalpd-storageclass
由於 StorageClass
是使用 volumeBindingMode: WaitForFirstConsumer
設定,因此在建立使用 PersistentVolumeClaim
的 Pod 之前,不會佈建 PersistentVolume
。
下列資訊清單是使用先前建立的 PersistentVolumeClaim
的 Pod 範例:
kind: Pod
apiVersion: v1
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: regional-pvc
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
手動佈建
首先,使用 gcloud compute disks create
指令建立地區永久磁碟。下列範例會建立名為 gce-disk-1
的磁碟,並將資料複製到 europe-west1-b
和 europe-west1-c
區域:
gcloud compute disks create gce-disk-1 \
--size 500Gi \
--region europe-west1 \
--replica-zones europe-west1-b,europe-west1-c
然後,您可以建立 PersistentVolume
,參照您剛建立的地區永久磁碟。除了「使用既有的永久磁碟做為 PersistentVolumes」一文中的物件,地區永久磁碟的 PersistentVolume
也應指定 node-affinity
。如果您使用 StorageClass
,則應指定永久磁碟 CSI 驅動程式。
以下是 StorageClass
資訊清單範例,該資訊清單使用標準永久磁碟,並將資料複製到 europe-west1-b
和 europe-west1-c
區域:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-balanced
replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: topology.gke.io/zone
values:
- europe-west1-b
- europe-west1-c
以下是建立名為 pv-demo
的 PersistentVolume
並參照 regionalpd-storageclass
的資訊清單範例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-demo
spec:
storageClassName: "regionalpd-storageclass"
capacity:
storage: 500Gi
accessModes:
- ReadWriteOnce
claimRef:
namespace: default
name: pv-claim-demo
csi:
driver: pd.csi.storage.gke.io
volumeHandle: projects/PROJECT_ID/regions/europe-west1/disks/gce-disk-1
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.gke.io/zone
operator: In
values:
- europe-west1-b
- europe-west1-c
請注意 PersistentVolume
範例的下列事項:
volumeHandle
欄位包含gcloud compute disks create
呼叫的詳細資料,包括PROJECT_ID
。- 即使設為
default
,也必須指定claimRef.namespace
欄位。
為永久磁碟命名
Kubernetes 無法區分具有相同名稱的區域和地區永久磁碟。解決方法是,請確保永久磁碟使用不重複的名稱。使用動態佈建的永久磁碟時,不會發生這個問題。
後續步驟
- 請參閱教學課程,瞭解如何使用 Persistent Disk 和 Cloud SQL 在 GKE 中部署 WordPress。