Auf dieser Seite wird beschrieben, wie Sie mithilfe von GKE-Hyperdisk-Speicherpools (Google Kubernetes Engine) Speicherkapazität, Durchsatz und IOPS auf mehreren Laufwerken bündeln und freigeben können.
Übersicht
Speicherpools gruppieren physische Speichergeräte logisch, sodass Sie Ihre Ressourcen segmentieren können. Sie können Google Cloud-Hyperdisks in diesen Speicherpools bereitstellen, indem Sie Hyperdisk Storage Pools erstellen. Hyperdisk-Speicherpools bieten vorab bereitgestellte Kapazität, Durchsatz und IOPS, die Ihre GKE-Clusterlaufwerke gemeinsam nutzen können.
Sie können Hyperdisk Storage Pools verwenden, um Ihre Speicherressourcen effizienter und kostengünstiger zu verwalten. So können Sie Effizienztechnologien wie Deduplizierung und Thin Provisioning nutzen.
In dieser Anleitung verwenden Sie die Zone us-east4-c
, um den Hyperdisk Balanced Storage Pool und andere Ressourcen zu erstellen.
Überlegungen zur Planung
Beachten Sie die folgenden Anforderungen und Einschränkungen, bevor Sie Ihren Hyperdisk Storage Pool bereitstellen und nutzen.
Speicherpools erstellen und verwalten
Es gelten folgende Anforderungen und Einschränkungen:
- Es gelten alle Einschränkungen von Compute Engine Hyperdisk Storage Pools.
- Alle Einschränkungen, die für das Erstellen von Laufwerken in einem Hyperdisk Storage Pool gelten, sind zu beachten.
- Der von Ihnen erstellte Hyperdisk Storage Pool bestimmt den Typ der Laufwerke, die Sie im Speicherpool erstellen können. Weitere Informationen finden Sie unter Arten von Hyperdisk Storage Pools.
Bootlaufwerke in Speicherpools bereitstellen
Es gelten folgende Anforderungen und Einschränkungen:
- Die Knotenstandorte des Clusters und die Knotenstandorte des Knotenpools müssen genau mit den Zonen des Speicherpools übereinstimmen. Diese Einschränkung gilt nicht, wenn die automatische Knotenbereitstellung aktiviert ist. Die automatische Knotenbereitstellung kann Knotenpools bei Bedarf automatisch in den richtigen Zonen erstellen.
- Prüfen Sie, ob der Maschinentyp, auf dem der Pod ausgeführt wird, das Anhängen des Laufwerkstyps Hyperdisk Balanced unterstützt. Hyperdisk Throughput wird nicht als Bootlaufwerk unterstützt. Weitere Informationen finden Sie in der Dokumentation zur Unterstützung von Maschinentypen für Hyperdisk.
- Sie können Bootlaufwerke in Speicherpools nur in manuell erstellten oder aktualisierten Knotenpools bereitstellen.
- Wenn Knoten automatisch mithilfe der automatischen Knotenbereitstellung erstellt werden, können die Bootlaufwerke für diese Knoten nicht in einem Speicherpool platziert werden.
Angehängtes Laufwerk in Speicherpools bereitstellen
Es gelten folgende Anforderungen und Einschränkungen:
- Die mindestens erforderliche GKE-Version zur Bereitstellung von angehängten Laufwerken in Speicherpools ist 1.29.2-gke.1035000 und höher.
- Achten Sie darauf, dass der CSI-Treiber für Persistent Disk von Compute Engine aktiviert ist. Der Treiber für Persistent Disk von Compute Engine ist in neuen Autopilot- und Standardclustern standardmäßig aktiviert und kann in Autopilot-Clustern nicht deaktiviert oder bearbeitet werden. Informationen zum Aktivieren des Treibers finden Sie unter CSI-Treiber für Persistent Disk von Compute Engine auf einem vorhandenen Cluster aktivieren.
- Achten Sie darauf, dass sich der Speicherpool an mindestens einem der Knotenstandorte des Clusters und an den Knotenstandorten des Knotenpools befindet.
- Sie können mit Hyperdisk Throughput und Hyperdisk Balanced angehängte Laufwerke nur in Speicherpools bereitstellen. Der Typ des angehängten Laufwerks muss dem Typ des Speicherpools entsprechen. Weitere Informationen finden Sie unter Arten von Hyperdisk Storage Pools.
- Der Maschinentyp, auf dem Ihr Pod ausgeführt wird, muss das Anhängen des von Ihnen verwendeten Laufwerktyps aus dem Speicherpool unterstützen. Weitere Informationen finden Sie unter Unterstützung von Maschinentypen für Hyperdisk.
Kontingent
Beim Erstellen eines Hyperdisk Storage Pools können Sie ihn für Kapazität und Leistung entweder mit Standard- oder erweiterter Bereitstellung konfigurieren. Wenn Sie das Kontingent für Kapazität, Durchsatz oder IOPS erhöhen möchten, fordern Sie ein höheres Kontingent für den entsprechenden Kontingentfilter an.
Weitere Informationen finden Sie unter Kontingente für Ihr Projekt ansehen und Höheres Kontingent anfordern.
Verwenden Sie die folgenden Kontingentfilter für Hyperdisk Balanced Storage Pools:
HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: um die Kapazität mit erweiterter Kapazitätsbereitstellung zu erhöhen.HDB-STORAGE-POOL-TOTAL-ADVANCED-IOPS-per-project-region
: um die IOPS mit der erweiterten Leistungsbereitstellung zu erhöhen.HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region
: den Durchsatz mit der erweiterten Leistungsbereitstellung zu erhöhen.HDB-TOTAL-GB-per-project-region
: zum Erhöhen der Kapazität mit Standardbereitstellung der Kapazität.HDB-TOTAL-IOPS-per-project-region
: so die IOPS mit der Standard-Leistungsbereitstellung erhöhen.HDB-TOTAL-THROUGHPUT-per-project-region
: um den Durchsatz mit Standard-Leistungsbereitstellung zu erhöhen.
Verwenden Sie die folgenden Kontingentfilter für Hyperdisk Throughput Storage Pools:
HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: um die Kapazität mit erweiterter Kapazitätsbereitstellung zu erhöhen.HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region
: den Durchsatz mit der erweiterten Leistungsbereitstellung zu erhöhen.HDT-TOTAL-GB-per-project-region
: zum Erhöhen der Kapazität mit Standardbereitstellung der Kapazität.HDT-TOTAL-THROUGHPUT-per-project-region
: um den Durchsatz mit Standard-Leistungsbereitstellung zu erhöhen.
Wenn Sie beispielsweise die Gesamtkapazität für Hyperdisk Balanced Storage Pools mit erweiterter Kapazitätsbereitstellung pro Projekt und pro Region erhöhen möchten, fordern Sie für den folgenden Filter ein höheres Kontingent an:
hdb-storage-pool-total-advanced-capacity-per-project-region
.
Preise
Weitere Informationen zu den Preisen finden Sie unter Preise für Hyperdisk Storage Pools.
Vorbereitung
Führen Sie die folgenden Schritte durch, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit
gcloud components update
ab.
- Sehen Sie sich die unterstützten Regionen und Zonen an, in denen Sie einen Hyperdisk Balanced Storage Pool erstellen können.
Hyperdisk Storage Pool erstellen
Erstellen Sie einen Hyperdisk Storage Pool, bevor Sie Bootlaufwerke oder angeschlossene Laufwerke in diesem Speicherpool bereitstellen. Weitere Informationen finden Sie unter Hyperdisk Storage Pools erstellen.
Achten Sie darauf, dass Sie Speicherpools in einer der unterstützten Zonen erstellen.
Verwenden Sie beispielsweise den folgenden Befehl, um einen Hyperdisk Balanced Storage Pool mit erweiterter Kapazität und erweiterter Leistung zu erstellen und 10 TB Kapazität, 10.000 IOPS/s und einen Durchsatz von 1.024 Mbit/s in der Zone us-east4-c
bereitzustellen:
export PROJECT_ID=PROJECT_ID
export ZONE=us-east4-c
gcloud compute storage-pools create pool-$ZONE \
--provisioned-capacity=10tb --storage-pool-type=hyperdisk-balanced \
--zone=$ZONE --project=$PROJECT_ID --capacity-provisioning-type=advanced \
--performance-provisioning-type=advanced --provisioned-iops=10000 \
--provisioned-throughput=1024
Ersetzen Sie PROJECT_ID
durch die Google Cloud-Konto-Projekt-ID.
Speicherpoolzonen prüfen
Bei Autopilot-Clustern und Standardclustern mit aktivierter automatischer Knotenbereitstellung können Sie einen Speicherpool in jeder Zone innerhalb der Region des Clusters erstellen. Wenn in der Zone, in der Sie den Speicherpool erstellt haben, kein Knotenpool vorhanden ist, bleiben die Pods im Status
Pending
, bis der GKE Cluster Autoscaler einen neuen Knotenpool in dieser Zone bereitstellen kann.Erstellen Sie für Standardcluster ohne automatische Knotenbereitstellung Speicherpools in den Standardknotenzonen Ihres Clusters, da Speicherpools zonale Ressourcen sind. Sie können die Knotenzonen Ihres Clusters mit dem Flag
--node-locations
festlegen.- Wenn Sie bei zonalen Clustern
--node-locations
nicht angeben, werden alle Knoten in der primären Zone des Clusters erstellt. - Wenn Sie für regionale Cluster keinen
--node-locations
angeben, verteilt GKE Ihre Worker-Knoten auf drei zufällig ausgewählte Zonen innerhalb der Region.
- Wenn Sie bei zonalen Clustern
Führen Sie den folgenden Befehl aus, um die Standardknotenzonen eines Clusters zu prüfen:
gcloud container clusters describe CLUSTER_NAME | yq '.locations'
Ersetzen Sie CLUSTER_NAME
durch den Namen des Clusters, den Sie bei der Bereitstellung eines Bootlaufwerks oder eines angehängten Laufwerks erstellen möchten.
GKE-Bootlaufwerk in einem Hyperdisk Storage Pool bereitstellen
Sie können ein GKE-Bootlaufwerk in einem Hyperdisk Storage Pool bereitstellen, wenn Sie eines der folgenden Dinge tun:
- Beim Erstellen eines neuen GKE-Clusters
- Beim Erstellen eines neuen Knotenpools
- Beim Aktualisieren eines vorhandenen Knotenpools
Beim Erstellen eines Clusters
Verwenden Sie den folgenden Befehl, um einen GKE-Cluster mit Bootlaufwerken zu erstellen, die in einem Speicherpool bereitgestellt werden:
gcloud container clusters create CLUSTER_NAME \
--disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
--node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
--zone=ZONE
Ersetzen Sie dabei Folgendes:
CLUSTER_NAME
: Geben Sie einen eindeutigen Namen für den Cluster an, den Sie erstellen.DISK_TYPE
: Setzen Sie dies aufhyperdisk-balanced.
. Wenn Sie das Feld leer lassen, wird der Laufwerkstyp standardmäßig auf Hyperdisk Balanced gesetzt.STORAGE_POOL,[...]
: Eine durch Kommas getrennte Liste der Ressourcenpfade des Speicherpools (z. B.projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
), unter denen die Bootlaufwerke des Clusters bereitgestellt werden. Achten Sie darauf, dass die Zonen in den Ressourcenpfaden des Speicherpools mit den Zonen in--node-locations
übereinstimmen.ZONE,[...]
: Eine durch Kommas getrennte Liste von Zonen, in denen die Knoten-Footprints repliziert werden sollen. Für regionale Cluster können Sie stattdessen Regionen angeben. Alle Zonen müssen sich in derselben Region wie der Cluster befinden, angegeben durch die Flags-location
,--zone
oder--region
.MACHINE_TYPE
: Der unterstützte Maschinentyp, den Sie für Ihre Knoten verwenden möchten.ZONE
: Die Zone, in der Sie den Cluster erstellen möchten Verwenden Sie das Flag—region
, um einen regionalen Cluster zu erstellen.
Beim Erstellen eines Knotenpools
Verwenden Sie den folgenden Befehl, um einen GKE-Knotenpool mit Bootlaufwerken zu erstellen, die in einem Speicherpool bereitgestellt werden:
gcloud container node-pools create NODE_POOL_NAME \
--disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
--node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
--zone=ZONE --cluster=CLUSTER_NAME
Ersetzen Sie Folgendes:
NODE_POOL_NAME
: Geben Sie einen eindeutigen Namen für den Knotenpool an, den Sie erstellen.DISK_TYPE
: Setzen Sie dies aufhyperdisk-balanced.
. Wenn Sie das Feld leer lassen, wird der Laufwerkstyp standardmäßig auf Hyperdisk Balanced gesetzt.STORAGE_POOL,[...]
: Eine durch Kommas getrennte Liste der Ressourcenpfade des Speicherpools (z. B.projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
), unter denen die Bootlaufwerke des Clusters bereitgestellt werden. Die Zonen in den Ressourcenpfaden des Speicherpools müssen mit den Werten in--node-locations
übereinstimmen.ZONE,[...]
: Eine durch Kommas getrennte Liste von Zonen, in denen die Knoten-Footprints repliziert werden sollen. Alle Zonen müssen sich in derselben Region wie der Cluster befinden, angegeben durch die Flags-location
,--zone
oder--region
.MACHINE_TYPE
: Der unterstützte Maschinentyp, den Sie für Ihre Knoten verwenden möchten.ZONE
: Die Zone, in der Sie den Knotenpool erstellen möchten.CLUSTER_NAME
: Ein vorhandener Cluster, in dem Sie den Knotenpool erstellen.
Beim Aktualisieren eines Knotenpools
Mit dem Befehl update
können Sie Speicherpools in einem Knotenpool hinzufügen oder ersetzen.
Dieser Befehl kann nicht zum Entfernen von Speicherpools aus einem Knotenpool verwendet werden.
Verwenden Sie den folgenden Befehl, um einen GKE-Knotenpool so zu aktualisieren, dass seine Boot-Laufwerke in einem Speicherpool bereitgestellt werden.
gcloud container node-pools update NODE_POOL_NAME \
--storage-pools=STORAGE_POOL,[...] \
--zone=ZONE --cluster=CLUSTER_NAME
NODE_POOL_NAME
: Der Name eines vorhandenen Knotenpools, den Sie für die Verwendung eines Speicherpools aktualisieren möchten.STORAGE_POOL,[...]
: Eine durch Kommas getrennte Liste vorhandener Ressourcenpfade für Speicherpools (z. B.projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
). Die Zonen in den Ressourcenpfaden des Speicherpools müssen mit der Zone des Knotenpools übereinstimmen, den Sie aktualisieren.ZONE
: Die Zone, in der sich der Knotenpool befindet.CLUSTER_NAME
: Der Name des GKE-Clusters, zu dem dieser Knotenpool gehört.
GKE aktualisiert den Knotenpool gemäß der Upgradestrategie des Knotenpools.
GKE-Laufwerk in einem Hyperdisk Storage Pool bereitstellen
In diesem Abschnitt:
- Sie erstellen einen neuen GKE-Cluster mit angehängten Laufwerken, die in einem Speicherpool bereitgestellt werden.
- Erstellen Sie eine StorageClass, um ein PersistentVolume (PV) dynamisch bereitzustellen, wenn ein Pod sie über einen PersistentVolumeClaim (PVC) anfordert. Damit ein PV die freigegebenen Ressourcen des Speicherpools nutzen kann, müssen Sie den Speicherpool mit dem Parameter
storage-pools
in Ihrer StorageClass angeben. Die StorageClass wird dann in einem PVC verwendet, um das Hyperdisk Balanced-Volume zu provisionieren, das vom Pod verwendet wird. - Erstellen Sie ein PVC, um ein PV (ein Hyperdisk-Speicherplatz) für einen Pod aus Ihrem GKE-Cluster anzufordern. Dadurch können Sie von den freigegebenen Ressourcen des Speicherpools profitieren.
- Erstellen Sie ein Deployment, das einen PVC verwendet, damit Ihre Anwendung auch nach dem Neustart des Pods und der Neuplanung Zugriff auf den nichtflüchtigen Speicher hat.
GKE-Cluster erstellen
Lesen Sie sich zuerst die Hinweise zur Bereitstellung eines angeschlossenen Laufwerks durch.
Autopilot
Informationen zum Erstellen eines Autopilot-Clusters mit der gcloud CLI finden Sie unter Autopilot-Cluster erstellen.
Beispiel:
gcloud container clusters create-auto CLUSTER_NAME --region=REGION
Ersetzen Sie dabei Folgendes:
CLUSTER_NAME
: Geben Sie einen eindeutigen Namen für den Cluster an, den Sie erstellen.REGION
: Die Region, in der Sie den Cluster erstellen.
Wenn Sie einen unterstützten Maschinentyp auswählen möchten, geben Sie beim Erstellen eines Deployments den nodeSelector cloud.google.com/compute-class: Performance
an. Eine Liste der Compute Engine-Maschinenserien, die mit der Computingklasse "Leistung" verfügbar sind, finden Sie unter Unterstützte Maschinenserien.
Standard
Informationen zum Erstellen eines zonalen Standardclusters mit der gcloud CLI finden Sie unter Zonalen Cluster erstellen.
Informationen zum Erstellen eines regionalen Standardclusters mit der gcloud CLI finden Sie unter Regionalen Cluster erstellen.
Beispiel:
gcloud container clusters create CLUSTER_NAME --zone=ZONE --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"
Ersetzen Sie dabei Folgendes:
CLUSTER_NAME
: Geben Sie einen eindeutigen Namen für den zu erstellenden Cluster an.ZONE
: Die Zone, in der Sie den Cluster erstellen. Verwenden Sie das Flag—region
, um einen regionalen Cluster zu erstellen.PROJECT_ID
: Die Projekt-ID Ihres Google Cloud-Kontos.MACHINE_TYPE
: Der unterstützte Maschinentyp, den Sie für Ihre Knoten verwenden möchten.DISK_TYPE
: Setzen Sie dies aufhyperdisk-balanced.
. Wenn Sie das Feld leer lassen, wird der Laufwerkstyp standardmäßig auf Hyperdisk Balanced gesetzt.
StorageClass erstellen
Wenn Sie in Kubernetes angeben möchten, dass Ihr PV in einem Speicherpool erstellt werden soll, verwenden Sie eine StorageClass. Weitere Informationen finden Sie unter StorageClasses.
So erstellen Sie eine neue StorageClass mit dem gewünschten Durchsatz oder der gewünschten IOPS-Stufe:
- Verwenden Sie
pd.csi.storage.gke.io
im Feld „Provisioner“. - Geben Sie den Speichertyp Hyperdisk Balanced an.
- Geben Sie den Parameter
storage-pools
mit dem Wert als Liste bestimmter Speicherpools an, die Sie verwenden möchten. Jeder Speicherpool in der Liste muss im folgenden Format angegeben werden:projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
- Geben Sie optional die Leistungsparameter
provisioned-throughput-on-create
undprovisioned-iops-on-create.
an.
Für jeden Hyperdisk-Typ gibt es Standardwerte für die Leistung, die von der bereitgestellten ursprünglichen Laufwerksgröße abhängen. Beim Erstellen einer StorageClass können Sie je nach Hyperdisk-Typ optional die folgenden Parameter angeben. Wenn Sie diese Parameter weglassen, verwendet GKE die standardmäßigen sitzungsbasierten Speichertypen.
Parameter | Hyperdisk-Typ | Nutzung |
---|---|---|
provisioned-throughput-on-create |
Hyperdisk Balanced, Hyperdisk Throughput | Geben Sie den Durchsatzwert mit dem Qualifier "Mi" in MiB/s an. Wenn der erforderliche Durchsatz beispielsweise 250 MiB/s beträgt, geben Sie beim Erstellen der StorageClass "250Mi" an. |
provisioned-iops-on-create |
Hyperdisk Balanced, Hyperdisk IOPS | Der IOPS-Wert sollte ohne Qualifier ausgedrückt werden. Wenn Sie beispielsweise 7.000 IOPS benötigen, geben Sie beim Erstellen der StorageClass "7000" an. |
Informationen zu zulässigen Werten für den Durchsatz oder IOPS finden Sie unter Leistungsniveau für Ihr Hyperdisk-Volume planen.
Verwenden Sie das folgende Manifest, um eine StorageClass namens storage-pools-sc
zum dynamischen Bereitstellen eines PV im Speicherpool projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
zu erstellen und anzuwenden:
kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: storage-pools-sc
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: hyperdisk-balanced
provisioned-throughput-on-create: "140Mi"
provisioned-iops-on-create: "3000"
storage-pools: projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
EOF
Durch die Verwendung von volumeBindingMode: WaitForFirstConsumer
in dieser StorageClass wird die Bindung und Bereitstellung eines PVC verzögert, bis ein Pod mit dem PVC erstellt wird.
So wird sichergestellt, dass das PV nicht vorzeitig bereitgestellt wird und dass die Zonen des PV mit dem Pod übereinstimmen, der es nutzt. Wenn ihre Zonen nicht übereinstimmen, bleibt der Pod im Status Pending
.
PersistentVolumeClaim (PVC) erstellen
Erstellen Sie einen PVC, der auf die von Ihnen erstellte StorageClass storage-pools-sc
verweist.
Verwenden Sie das folgende Manifest, um ein PVC mit dem Namen my-pvc
und einer Zielspeicherkapazität von 2.048 GiB für das Hyperdisk Balanced-Volume zu erstellen:
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: storage-pools-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2048Gi
EOF
Bereitstellung erstellen, die das PVC verwendet
Verwenden Sie bei der Verwendung von Pods mit PersistentVolumes einen Workload-Controller wie ein Deployment oder ein StatefulSet.
Damit Pods auf einem Knotenpool mit einer Maschinenreihe geplant werden können, die Hyperdisk Balanced unterstützt, konfigurieren Sie eine Bereitstellung mit dem Knotenselektor cloud.google.com/machine-family
. Weitere Informationen finden Sie unter Unterstützung für Maschinentypen für Hyperdisks. Sie verwenden im folgenden Beispiel-Deployment die Maschinenserie c3
.
Erstellen und wenden Sie das folgende Manifest an, um einen Pod für die Bereitstellung eines Postgres-Webservers mit dem im vorherigen Abschnitt erstellten PVC zu konfigurieren:
Autopilot
Geben Sie in Autopilot-Clustern den cloud.google.com/compute-class: Performance
nodeSelector an, um ein Hyperdisk Balanced-Volume bereitzustellen. Weitere Informationen finden Sie unter Dedizierten Knoten für einen Pod anfordern.
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
nodeSelector:
cloud.google.com/machine-family: c3
cloud.google.com/compute-class: Performance
containers:
- name: postgres
image: postgres:14-alpine
args: [ "sleep", "3600" ]
volumeMounts:
- name: sdk-volume
mountPath: /usr/share/data/
volumes:
- name: sdk-volume
persistentVolumeClaim:
claimName: my-pvc
EOF
Standard
Achten Sie in Standardclustern ohne aktivierte automatische Knotenbereitstellung darauf, dass ein Knotenpool mit der angegebenen Maschinenserie ausgeführt wird, bevor Sie die Bereitstellung erstellen. Andernfalls kann der Pod nicht geplant werden.
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
nodeSelector:
cloud.google.com/machine-family: c3
containers:
- name: postgres
image: postgres:14-alpine
args: [ "sleep", "3600" ]
volumeMounts:
- name: sdk-volume
mountPath: /usr/share/data/
volumes:
- name: sdk-volume
persistentVolumeClaim:
claimName: my-pvc
EOF
Prüfen Sie, ob das Deployment erfolgreich erstellt wurde:
kubectl get deployment
Es kann einige Minuten dauern, bis Hyperdisk-Instanzen die Bereitstellung abgeschlossen haben und den Status READY
anzeigen.
Prüfen, ob das angehängte Laufwerk bereitgestellt wurde
Prüfen Sie, ob der PVC mit dem Namen
my-pvc
erfolgreich an ein PV gebunden wurde:kubectl get pvc my-pvc
Die Ausgabe sieht in etwa so aus:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-pvc Bound pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 2Ti RWO storage-pools-sc 2m24s
Prüfen Sie, ob das Volume wie in der StorageClass und dem PVC angegeben bereitgestellt wurde:
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
Die Ausgabe sieht in etwa so aus:
NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048
Snapshots von angehängten Laufwerken in Speicherpools erstellen und wiederherstellen
Das Verschieben von Laufwerken in einen oder aus einem Speicherpool ist nicht zulässig. Wenn Sie ein Laufwerk in einen oder aus einem Speicherpool verschieben möchten, erstellen Sie das Laufwerk aus einem Snapshot neu. Weitere Informationen finden Sie unter Laufwerkstyp ändern.
In diesem Abschnitt:
- Sie schreiben eine Testdatei auf das in Ihrem Pod bereitgestellte Laufwerk.
- Erstellen Sie einen Volume-Snapshot und löschen Sie die Testdatei von diesem Laufwerk.
- Wiederherstellen Sie den Snapshot auf einem neuen Laufwerk im selben Speicherpool, um die gelöschten Daten wiederherzustellen.
Eine Testdatei erstellen
So erstellen und prüfen Sie eine Testdatei:
Rufen Sie den Pod-Namen des Postgres-Deployments ab:
kubectl get pods -l app=postgres
Die Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE postgres-78fc84c9ff-77vx6 1/1 Running 0 44s
Erstellen Sie in einem Pod eine Testdatei
hello.txt
kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
Prüfen Sie, ob die Testdatei erstellt wurde:
kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
Volume-Snapshot erstellen und Testdatei löschen
So erstellen und prüfen Sie einen Snapshot:
Erstellen Sie eine VolumeSnapshotClass, die angibt, wie der Snapshot Ihrer Volumes erstellt und verwaltet werden soll:
kubectl apply -f - <<EOF apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: my-snapshotclass driver: pd.csi.storage.gke.io deletionPolicy: Delete EOF
Erstellen Sie einen VolumeSnapshot und erstellen Sie den Snapshot aus dem Volume, das mit dem
my-pvc
PersistentVolumeClaim verknüpft ist:kubectl apply -f - <<EOF apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: persistentVolumeClaimName: my-pvc EOF
Prüfen Sie, ob der Volume-Snapshot-Inhalt erstellt wurde:
kubectl get volumesnapshotcontents
Die Ausgabe sieht in etwa so aus:
NAME READYTOUSE RESTORESIZE DELETIONPOLICY DRIVER VOLUMESNAPSHOTCLASS VOLUMESNAPSHOT VOLUMESNAPSHOTNAMESPACE AGE snapcontent-e778fde2-5f1c-4a42-a43d-7f9d41d093da false 2199023255552 Delete pd.csi.storage.gke.io my-snapshotclass my-snapshot default 33s
Prüfen Sie, ob der Snapshot einsatzbereit ist:
kubectl get volumesnapshot \ -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
Die Ausgabe sieht in etwa so aus:
NAME READY my-snapshot true
Löschen Sie die ursprüngliche Testdatei
hello.txt
, die im Podpostgres-78fc84c9ff-77vx6
erstellt wurde:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'rm /usr/share/data/hello.txt'
Volume-Snapshot wiederherstellen
So stellen Sie den Volume-Snapshot und die Daten wieder her:
Erstellen Sie ein neues PVC, mit dem Daten aus einem Snapshot wiederhergestellt werden, und achten Sie darauf, dass das neue Volume im selben Speicherpool (
storage-pools-sc
) wie das ursprüngliche Volume bereitgestellt wird. Wenden Sie das folgende Manifest an:kubectl apply -f - <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: storage-pools-sc accessModes: - ReadWriteOnce resources: requests: storage: 2048Gi EOF
Aktualisieren Sie die vorhandene Bereitstellung mit dem Namen
postgres
, damit sie das neu wiederhergestellte PVC verwendet, das Sie gerade erstellt haben. Wenden Sie das folgende Manifest an:kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: postgres spec: selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: nodeSelector: cloud.google.com/machine-family: c3 containers: - name: postgres image: google/cloud-sdk:slim args: [ "sleep", "3600" ] volumeMounts: - name: sdk-volume mountPath: /usr/share/data/ volumes: - name: sdk-volume persistentVolumeClaim: claimName: pvc-restore EOF
Rufen Sie den Namen des neu erstellten Pods ab, der Teil des
postgres
-Deployments ist:kubectl get pods -l app=postgres
Die Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE postgres-59f89cfd8c-42qtj 1/1 Running 0 40s
Prüfen Sie, ob die zuvor gelöschte Datei
hello.txt
nach der Wiederherstellung des Volumes aus dem Snapshot jetzt im neuen Pod (postgres-59f89cfd8c-42qtj
) vorhanden ist:kubectl exec postgres-59f89cfd8c-42qtj \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
Dadurch wird bestätigt, dass der Snapshot und die Wiederherstellung erfolgreich abgeschlossen wurden und dass die Daten aus dem Snapshot auf dem neuen PV wiederhergestellt wurden, auf das der Pod zugreifen kann.
Prüfen Sie, ob sich das aus dem Snapshot erstellte Volume in Ihrem Speicherpool befindet:
kubectl get pvc pvc-restore
Die Ausgabe sieht in etwa so aus:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-restore Bound pvc-b287c387-bc51-4100-a00e-b5241d411c82 2Ti RWO storage-pools-sc 2m24s
Prüfen Sie, ob das neue Volume wie in StorageClass und PVC angegeben bereitgestellt wurde:
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
Die Ausgabe sieht in etwa so aus, wobei das neue Volume
pvc-b287c387-bc51-4100-a00e-b5241d411c82
im selben Speicherpool bereitgestellt wird.NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048 pvc-b287c387-bc51-4100-a00e-b5241d411c82 READY 3000 140 2048
So kann das wiederhergestellte Volume von den freigegebenen Ressourcen und Funktionen des Pools profitieren.
Vorhandene Volumes in einen Speicherpool migrieren
Verwenden Sie Snapshots und die Wiederherstellung, um Volumes, die sich außerhalb eines Speicherpools befinden, in einen Speicherpool zu migrieren.
Achten Sie darauf, dass die folgenden Bedingungen erfüllt sind:
- Ihr neuer PVC
pvc-restore
verweist auf eine StorageClass, die den Parameterstorage-pools
angegeben und auf den Speicherpool verweist, in den Sie das Volume verschieben möchten. - Das Quell-PV, von dem ein Snapshot erstellt wird, muss mit einem PVC mit einer StorageClass verknüpft sein, für die der Parameter
storage-pools
nicht angegeben ist.
Nachdem Sie einen Snapshot auf einem neuen Volume wiederhergestellt haben, können Sie den Quell-PVC und das PV löschen.
Bereinigen
Löschen Sie die in dieser Anleitung erstellten Speicherressourcen, um zu vermeiden, dass Ihrem Google Cloud-Konto Gebühren in Rechnung gestellt werden. Löschen Sie zuerst alle Laufwerke im Speicherpool und dann den Speicherpool.
Bootlaufwerk löschen
Wenn Sie einen Knoten (durch Herunterskalieren des Knotenpools) oder einen gesamten Knotenpool löschen, werden die zugehörigen Bootlaufwerke automatisch gelöscht. Sie können auch den Cluster löschen, um die Bootlaufwerke aller darin enthaltenen Knotenpools automatisch zu löschen.
Weitere Informationen finden Sie unter:
Angehängtes Laufwerk löschen
So löschen Sie das angehängte Laufwerk, das in einem Hyperdisk Storage Pool bereitgestellt ist:
Löschen Sie den Pod, der den PVC verwendet:
kubectl delete deployments postgres
Löschen Sie den PVC, der die Hyperdisk Storage Pool-StorageClass verwendet.
kubectl delete pvc my-pvc
Bestätigen Sie, dass der PVC
pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6
gelöscht wurde:gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
Hyperdisk Storage Pool löschen
Löschen Sie den Hyperdisk Storage Pool mit dem folgenden Befehl:
gcloud compute storage-pools delete pool-us-east4-c --zone=us-east4-c --project=my-project
Nächste Schritte
- Siehe Fehlerbehebung bei Speicher in GKE.
- Weitere Informationen zum CSI-Treiber für nichtflüchtigen Speicher auf GitHub