Speicherleistung und -kosten mit Hyperdisk Storage Pools optimieren


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:

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.

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.

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 auf hyperdisk-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 auf hyperdisk-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 auf hyperdisk-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 und provisioned-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

Best Practice:

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

  1. 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
    
  2. 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:

Eine Testdatei erstellen

So erstellen und prüfen Sie eine Testdatei:

  1. 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
    
  2. Erstellen Sie in einem Pod eine Testdatei hello.txt

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
    
  3. 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:

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. Löschen Sie die ursprüngliche Testdatei hello.txt, die im Pod postgres-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:

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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.

  5. 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
    
  6. 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 Parameter storage-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:

  1. Löschen Sie den Pod, der den PVC verwendet:

    kubectl delete deployments postgres
    
  2. 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