Ottimizza le prestazioni e i costi di archiviazione con i pool di archiviazione Hyperdisk


Questa pagina descrive in che modo i cluster Google Kubernetes Engine (GKE) possono raggruppare e condividere la capacità di archiviazione, il throughput e le IOPS tra i dischi utilizzando i pool di archiviazione Hyperdisk di GKE.

Panoramica

I pool di archiviazione raggruppano logicamente i dispositivi di archiviazione fisici, consentendoti di segmentare le risorse. Puoi eseguire il provisioning di Hyperdisk di Google Cloud all'interno di questi pool di archiviazione, creando in sostanza pool di archiviazione Hyperdisk. I pool di archiviazione Hyperdisk offrono capacità, velocità effettiva e IOPS pre-provisioned che i dischi del cluster GKE possono condividere.

Puoi utilizzare i pool di archiviazione Hyperdisk per gestire le risorse di archiviazione in modo più efficiente e con un buon rapporto costi/benefici. In questo modo puoi sfruttare tecnologie di efficienza come la deduplica e il thin provisioning.

In questa guida utilizzerai la zona us-east4-c per creare il pool di archiviazione Hyperdisk Balanced e altre risorse.

Considerazioni sulla pianificazione

Tieni presente i seguenti requisiti e limitazioni prima di eseguire il provisioning e utilizzare il pool di archiviazione Hyperdisk.

Creazione e gestione dei pool di archiviazione

Si applicano i seguenti requisiti e limitazioni:

Eseguire il provisioning dei dischi di avvio nei pool di archiviazione

Si applicano i seguenti requisiti e limitazioni:

  • Assicurati che le località dei nodi del cluster e le località dei nodi del pool di nodi corrispondano esattamente alle zone del pool di archiviazione. Questa limitazione non si applica se hai attivato il provisioning automatico dei nodi. Se necessario, il provisioning automatico dei nodi può creare automaticamente pool di nodi nelle zone corrette.
  • Assicurati che il tipo di macchina su cui è in esecuzione il pod supporti l'attacco del tipo di disco Hyperdisk bilanciato. Hyperdisk Throughput non è supportato come disco di avvio. Consulta la documentazione relativa al supporto dei tipi di macchine Hyperdisk.
  • Puoi eseguire il provisioning dei dischi di avvio nei pool di archiviazione solo nei pool di nodi creati o aggiornati manualmente.
  • Quando i nodi vengono creati automaticamente tramite il provisioning automatico dei nodi, i dischi di avvio di questi nodi non possono essere inseriti in un pool di archiviazione.

Eseguire il provisioning del disco collegato nei pool di archiviazione

Si applicano i seguenti requisiti e limitazioni:

  • La versione minima di GKE richiesta per il provisioning dei dischi collegati nei pool di archiviazione è 1.29.2-gke.1035000 e successive.
  • Assicurati che il driver CSI per il disco permanente di Compute Engine sia abilitato. Il driver per i dischi permanenti di Compute Engine è attivo per impostazione predefinita nei nuovi cluster Autopilot e standard e non può essere disattivato o modificato nei cluster Autopilot. Per attivare il driver, consulta Attivare il driver CSI del disco permanente di Compute Engine in un cluster esistente.
  • Assicurati che il pool di archiviazione si trovi in almeno una delle sedi dei nodi del cluster e del pool di nodi.
  • Puoi eseguire il provisioning solo dei dischi Hyperdisk Throughput e Hyperdisk Balanced collegati nei pool di archiviazione. Il tipo di disco collegato deve corrispondere al tipo del pool di archiviazione. Per ulteriori informazioni, vedi Tipi di pool di archiviazione Hyperdisk.
  • Assicurati che il tipo di macchina su cui è in esecuzione il pod supporti il collegamento del tipo di disco che utilizzi dal pool di archiviazione. Per ulteriori informazioni, consulta Supporto del tipo di macchina Hyperdisk.

Quota

Quando crei un pool di archiviazione Hyperdisk, puoi configurarlo con provisioning standard o avanzato per la capacità e le prestazioni. Se vuoi aumentare la quota per capacità, throughput o IOPS, richiedi una quota più alta per il filtro della quota pertinente.

Per ulteriori informazioni, consulta Visualizzare le quote per il progetto e Richiedere una quota superiore.

Utilizza i seguenti filtri di quota per i pool di archiviazione bilanciati Hyperdisk:

  • HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region: per aumentare la capacità con il provisioning della capacità avanzata.
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-IOPS-per-project-region: per aumentare le IOPS con il provisioning delle prestazioni avanzate.
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region: per aumentare la velocità effettiva con il provisioning del rendimento avanzato.
  • HDB-TOTAL-GB-per-project-region: per aumentare la capacità con il provisioning della capacità standard.
  • HDB-TOTAL-IOPS-per-project-region: per aumentare le IOPS con il provisioning delle prestazioni standard.
  • HDB-TOTAL-THROUGHPUT-per-project-region: per aumentare la velocità effettiva con il provisioning delle prestazioni standard.

Utilizza i seguenti filtri di quota per i pool di archiviazione Hyperdisk Throughput:

  • HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region: per aumentare la capacità con il provisioning della capacità avanzata.
  • HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region: per aumentare la velocità effettiva con il provisioning del rendimento avanzato.
  • HDT-TOTAL-GB-per-project-region: per aumentare la capacità con il provisioning della capacità standard.
  • HDT-TOTAL-THROUGHPUT-per-project-region: per aumentare la velocità effettiva con il provisioning delle prestazioni standard.

Ad esempio, se vuoi aumentare la capacità totale dei pool di archiviazione bilanciati Hyperdisk con provisioning della capacità avanzata, per progetto e per regione, richiedi una quota maggiore per il seguente filtro:

hdb-storage-pool-total-advanced-capacity-per-project-region.

Prezzi

Per i dettagli sui prezzi, consulta Prezzi dei pool di archiviazione Hyperdisk .

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Creare un pool di archiviazione Hyperdisk

Crea un pool di archiviazione Hyperdisk prima di eseguire il provisioning dei dischi di avvio o dei dischi collegati in quel pool di archiviazione. Per ulteriori informazioni, consulta Creare pool di archiviazione Hyperdisk.

Assicurati di creare pool di archiviazione in una delle zone supportate.

Ad esempio, utilizza il seguente comando per creare un pool di archiviazione Hyperdisk bilanciato con capacità avanzata e prestazioni avanzate e per eseguire il provisioning di una capacità di 10 TB, 10000 IOPS/s e una velocità effettiva di 1024 MB/s nella zona us-east4-c:

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

Sostituisci PROJECT_ID con l'ID progetto del tuo account Google Cloud.

Ispeziona le zone del pool di archiviazione

  • Per i cluster Autopilot e i cluster standard con il provisioning automatico dei nodi attivo, puoi creare un pool di archiviazione in qualsiasi zona all'interno della regione del cluster. Se non esiste un pool di nodi nella zona in cui hai creato il pool di archiviazione, i pod rimangono nello stato Pending finché il gestore della scalabilità automatica del cluster GKE non può eseguire il provisioning di un nuovo pool di nodi nella zona.

  • Per i cluster standard senza provisioning automatico dei nodi, crea pool di archiviazione nelle zone dei nodi predefinite del cluster, poiché i pool di archiviazione sono risorse zonali. Puoi impostare le zone dei nodi del tuo cluster utilizzando il flag --node-locations.

    • Per i cluster di zona, se non specifichi --node-locations, tutti i nodi vengono creati nella zona principale del cluster.
    • Per i cluster regionali, se non specifichi --node-locations, GKE distribuisce i nodi worker in tre zone scelte in modo casuale all'interno della regione.

Per controllare le zone dei nodi predefinite di un cluster, esegui il comando seguente:

gcloud container clusters describe CLUSTER_NAME  | yq '.locations'

Sostituisci CLUSTER_NAME con il nome del cluster che stai creando durante il provisioning di un disco di avvio o di un disco collegato.

Esegui il provisioning di un disco di avvio GKE in un pool dello spazio di archiviazione Hyperdisk

Puoi eseguire il provisioning di un disco di avvio GKE in un pool di archiviazione Hyperdisk quando esegui una delle seguenti operazioni:

  • Quando crei un nuovo cluster GKE
  • Quando crei un nuovo pool di nodi
  • Durante l'aggiornamento di un pool di nodi esistente

Quando crei un cluster

Per creare un cluster GKE con dischi di avvio di cui è stato eseguito il provisioning in un pool di archiviazione, utilizza il seguente comando:

gcloud container clusters create CLUSTER_NAME \
    --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
    --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
    --zone=ZONE

Sostituisci quanto segue:

  • CLUSTER_NAME: fornisci un nome univoco per il cluster che stai creando.
  • DISK_TYPE: impostalo su hyperdisk-balanced. Se non viene inserito nulla, il tipo di disco predefinito è Hyperdisk bilanciato.
  • STORAGE_POOL,[...]: un elenco separato da virgole di percorsi delle risorse del pool di archiviazione (ad esempio projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) dove verrà eseguito il provisioning dei dischi di avvio del cluster. Assicurati che le zone nei percorsi delle risorse del pool di archiviazione corrispondano a quelle in --node-locations.
  • ZONE,[...]: un elenco separato da virgole delle zone in cui deve essere replicata l'impronta del tuo nodo. Per i cluster regionali, puoi specificare le regioni. Tutte le zone devono trovarsi nella stessa regione del cluster, specificata dagli indicatori -location, --zone o --region.
  • MACHINE_TYPE: il tipo di macchina supportato che vuoi utilizzare per i tuoi nodi.
  • ZONE: la zona in cui vuoi creare il tuo cluster. Utilizza il flag —region per creare un cluster a livello di area geografica.

Quando crei un pool di nodi

Per creare un pool di nodi GKE con dischi di avvio di cui è stato eseguito il provisioning in un pool di archiviazione, utilizza il seguente comando:

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

Sostituisci quanto segue:

  • NODE_POOL_NAME: fornisci un nome univoco per il pool di nodi che stai creando.
  • DISK_TYPE: impostalo su hyperdisk-balanced. Se non viene inserito nulla, il tipo di disco predefinito è Hyperdisk bilanciato.
  • STORAGE_POOL,[...]: un elenco separato da virgole di percorsi delle risorse del pool di archiviazione (ad esempio projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) dove verrà eseguito il provisioning dei dischi di avvio del cluster. Assicurati che le zone nei percorsi delle risorse del pool di archiviazione corrispondano ai valori in --node-locations.
  • ZONE,[...]: un elenco separato da virgole delle zone in cui deve essere replicata l'impronta del tuo nodo. Tutte le zone devono trovarsi nella stessa regione del cluster, specificata dagli indicatori -location, --zone o --region.
  • MACHINE_TYPE: il tipo di macchina supportato che vuoi utilizzare per i tuoi nodi.
  • ZONE: la zona in cui vuoi creare il pool di nodi.
  • CLUSTER_NAME: un cluster esistente in cui stai creando il pool di nodi.

Quando aggiorni un pool di nodi

Puoi utilizzare un comando update per aggiungere o sostituire i pool di archiviazione in un pool di nodi. Questo comando non può essere utilizzato per rimuovere i pool di archiviazione da un pool di nodi.

Per aggiornare un pool di nodi GKE in modo che i relativi dischi di avvio vengano configurati in un pool di archiviazione, utilizza il seguente comando.

gcloud container node-pools update NODE_POOL_NAME \
  --storage-pools=STORAGE_POOL,[...] \
  --zone=ZONE --cluster=CLUSTER_NAME
  • NODE_POOL_NAME: il nome di un pool di nodi esistente che vuoi aggiornare per utilizzare un pool di archiviazione.
  • STORAGE_POOL,[...]: un elenco separato da virgole di percorsi delle risorse del pool di archiviazione esistenti (ad esempio projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c). Assicurati che le zone nei percorsi delle risorse del pool di archiviazione corrispondano alla zona del pool di nodi che stai aggiornando.
  • ZONE: la zona in cui si trova il pool di nodi.
  • CLUSTER_NAME: il nome del cluster GKE a cui appartiene questo pool di nodi.

Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni dei carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, individua la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi senza rispettare i criteri di manutenzione. Per scoprire di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni per gli aggiornamenti dei nodi.

Esegui il provisioning di un disco collegato a GKE in un pool dello spazio di archiviazione Hyperdisk

In questa sezione:

  • Crea un nuovo cluster GKE con dischi collegati provisionati in un pool di archiviazione.
  • Crea un StorageClass per il provisioning dinamico di un PersistentVolume (PV) quando un pod lo richiede tramite un PersistentVolumeClaim (PVC). Affinché un PV possa utilizzare le risorse condivise del pool di archiviazione, devi specificare il pool di archiviazione utilizzando il parametro storage-pools nel valore StorageClass. StorageClass viene poi utilizzato in un PVC per eseguire il provisioning del volume Hyperdisk bilanciato che verrà utilizzato dal pod.
  • Crea un PVC per richiedere un PV, ovvero uno spazio di archiviazione Hyperdisk, per un pod dal tuo cluster GKE. In questo modo puoi usufruire delle risorse condivise del pool di archiviazione.
  • Crea un deployment che utilizzi un PVC per assicurarti che la tua applicazione abbia accesso allo spazio di archiviazione permanente anche dopo i riavvii e la riprogrammazione dei pod.

Crea un cluster GKE

Prima di iniziare, consulta le considerazioni per il provisioning di un disco collegato.

Autopilot

Per creare un cluster Autopilot utilizzando gcloud CLI, consulta Creare un cluster Autopilot.

Esempio:

gcloud container clusters create-auto CLUSTER_NAME --region=REGION

Sostituisci quanto segue:

  • CLUSTER_NAME: fornisci un nome univoco per il cluster che stai creando.
  • REGION: la regione in cui stai creando il cluster.

Per selezionare un tipo di macchina supportato, specifica cloud.google.com/compute-class: Performance nodeSelector durante la creazione di un deployment. Per un elenco delle serie di macchine Compute Engine disponibili con la classe di calcolo Performance, consulta Serie di macchine supportate.

Standard

Per creare un cluster zonale standard utilizzando gcloud CLI, consulta Creare un cluster zonale.

Per creare un cluster a livello di area geografica standard utilizzando gcloud CLI, consulta Creare un cluster a livello di area geografica.

Esempio:

gcloud container clusters create CLUSTER_NAME --zone=ZONE --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"

Sostituisci quanto segue:

  • CLUSTER_NAME: fornisci un nome univoco per il cluster che stai creando.
  • ZONE: la zona in cui stai creando il cluster. Utilizza il flag —region per creare un cluster a livello di area geografica.
  • PROJECT_ID: l'ID progetto del tuo account Google Cloud.
  • MACHINE_TYPE: il tipo di macchina supportato che vuoi utilizzare per i tuoi nodi.
  • DISK_TYPE: impostalo su hyperdisk-balanced. Se non viene inserito nulla, il tipo di disco predefinito è Hyperdisk bilanciato.

Crea una classe StorageClass

In Kubernetes, per indicare che vuoi che il PV venga creato all'interno di un pool di archiviazione, usa una classe di archiviazione. Per saperne di più, consulta StorageClasses.

Per creare un nuovo StorageClass con il livello di throughput o IOPS desiderato:

  • Utilizza pd.csi.storage.gke.io nel campo del provisioning.
  • Specifica il tipo di spazio di archiviazione Hyperdisk bilanciato.
  • Specifica il parametro storage-pools con il valore come elenco di pool di archiviazione specifici che vuoi utilizzare. Ogni pool di archiviazione nell'elenco deve essere specificato nel formato: projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
  • (Facoltativo) Specifica i parametri di rendimento provisioned-throughput-on-create e provisioned-iops-on-create.

Ogni tipo di hyperdisk ha valori predefiniti per le prestazioni determinati dalle dimensioni iniziali del disco di cui è stato eseguito il provisioning. Quando crei un StorageClass, puoi specificare facoltativamente i seguenti parametri a seconda del tipo di hyperdisk. Se ometti questi parametri, GKE utilizza i valori predefiniti del tipo di disco in base alla capacità.

Parametro Tipo di Hyperdisk Utilizzo
provisioned-throughput-on-create Hyperdisk bilanciato, Hyperdisk Throughput Esprimere il valore della velocità effettiva in MiBps utilizzando il qualificatore "Mi". Ad esempio, se la velocità effettiva richiesta è 250 MiBps, specifica "250Mi" quando crei StorageClass.
provisioned-iops-on-create Hyperdisk bilanciato, IOPS Hyperdisk Il valore IOPS deve essere espresso senza alcun qualificatore. Ad esempio, se hai bisogno di 7000 IOPS, specifica "7000" durante la creazione di StorageClass.

Per indicazioni sui valori consentiti per il throughput o le IOPS, consulta Pianificare il livello di prestazioni per il volume HyperDisk.

Utilizza il seguente manifest per creare e applicare una classe di archiviazione denominata storage-pools-sc per eseguire il provisioning dinamico di un PV nel pool di archiviazione projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c:

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

Se utilizzi volumeBindingMode: WaitForFirstConsumer in questo StorageClass, l'associazione e il provisioning di un PVC vengono ritardati fino a quando non viene creato un pod che utilizza il PVC. Questo approccio garantisce che il provisioning del PV non venga eseguito prematuramente e che esista una corrispondenza tra le zone del PV e del pod che lo utilizza. Se le zone non corrispondono, il pod rimane in stato Pending.

Crea un PersistentVolumeClaim (PVC)

Crea un PVC che fa riferimento alla classe di archiviazione storage-pools-sc che hai creato.

Utilizza il seguente manifest per creare un PVC denominato my-pvc con 2048 GiB come capacità di archiviazione target per il volume Hyperdisk bilanciato:

kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: storage-pools-sc
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2048Gi
EOF

Crea un deployment che utilizza la PVC

Best practice:

Quando utilizzi i pod con i volumi permanenti, utilizza un controller del carico di lavoro come un deployment o un StatefulSet.

Per assicurarti che i pod possano essere pianificati in un pool di nodi con una serie di macchine che supporta Hyperdisk Balanced, configura un deployment con il selettore di nodi cloud.google.com/machine-family. Per ulteriori informazioni, consulta Supporto dei tipi di macchine per Hyperdisk. Nel seguente deployment di esempio utilizzi la serie di macchine c3.

Crea e applica il seguente manifest per configurare un pod per il deployment di un server web Postgres utilizzando la PVC creata nella sezione precedente:

Autopilot

Nei cluster Autopilot, specifica cloud.google.com/compute-class: Performance nodeSelector per eseguire il provisioning di un volume Hyperdisk bilanciato. Per ulteriori informazioni, consulta Richiedere un nodo dedicato per un pod.

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

Nei cluster standard senza il provisioning automatico dei nodi abilitato, assicurati che un pool di nodi con la serie di macchine specificata sia attivo e in esecuzione prima di creare il deployment. In caso contrario, la pianificazione del pod non va a buon fine.

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

Verifica che il deployment sia stato creato correttamente:

  kubectl get deployment

Potrebbero essere necessari alcuni minuti per il completamento del provisioning delle istanze Hyperdisk e la visualizzazione di uno stato READY.

Verifica se è stato eseguito il provisioning del disco collegato

  1. Controlla se il PVC denominato my-pvc è stato associato correttamente a un PV:

    kubectl get pvc my-pvc
    

    L'output è simile al seguente:

    
    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    my-pvc        Bound    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6   2Ti        RWO            storage-pools-sc   2m24s
    
  2. Verifica se è stato eseguito il provisioning del volume come specificato in StorageClass e PVC:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    L'output è simile al seguente:

    NAME                                      STATUS  PROVISIONED_IOPS  PROVISIONED_THROUGHPUT  SIZE_GB
    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6  READY   3000              140                     2048
    

Creare snapshot e ripristinare i dischi collegati nei pool di archiviazione

Non è consentito spostare i dischi all'interno o all'esterno di un pool di archiviazione. Per spostare un disco in un pool di archiviazione o al di fuori, ricrea il disco da uno snapshot. Per ulteriori informazioni, consulta Modificare il tipo di disco.

In questa sezione:

Crea un file di test

Per creare e verificare un file di test:

  1. Recupera il nome del pod del deployment Postgres:

    kubectl get pods -l app=postgres
    

    L'output è simile al seguente:

    NAME                         READY   STATUS    RESTARTS   AGE
    postgres-78fc84c9ff-77vx6   1/1     Running   0          44s
    
  2. Crea un file di test hello.txt nel pod:

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
    
  3. Verifica che il file di test sia stato creato:

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

Crea uno snapshot del volume ed elimina il file di test

Per creare e verificare uno snapshot:

  1. Crea una classe VolumeSnapshotClass che specifica come deve essere acquisito e gestito lo snapshot dei volumi:

    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. Crea un VolumeSnapshot e acquisisci lo snapshot dal volume associato al my-pvc PersistentVolumeClaim:

    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. Verifica che i contenuti dello snapshot del volume siano stati creati:

    kubectl get volumesnapshotcontents
    

    L'output è simile al seguente:

    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. Verifica che lo snapshot sia pronto per l'uso:

    kubectl get volumesnapshot \
      -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
    

    L'output è simile al seguente:

    NAME          READY
    my-snapshot   true
    
  5. Elimina il file di test originale hello.txt creato nel pod postgres-78fc84c9ff-77vx6:

    kubectl exec postgres-78fc84c9ff-77vx6 \
        -- sh -c 'rm /usr/share/data/hello.txt'
    

Ripristinare lo snapshot del volume

Per ripristinare l'istantanea del volume e i dati:

  1. Crea una nuova PVC che ripristina i dati da uno snapshot e assicurati che il nuovo volume sia eseguito nel medesimo pool di archiviazione (storage-pools-sc) del volume originale. Applica il seguente manifest:

    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. Aggiorna il deployment esistente denominato postgres in modo che utilizzi il PVC appena ripristinato che hai appena creato. Applica il seguente manifest:

    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. Ottieni il nome del pod appena creato che fa parte del deployment postgres:

    kubectl get pods -l app=postgres
    

    L'output è simile al seguente:

    NAME                         READY   STATUS        RESTARTS   AGE
    postgres-59f89cfd8c-42qtj   1/1     Running       0          40s
    
  4. Verifica che il file hello.txt, eliminato in precedenza, esista ora nel nuovo pod (postgres-59f89cfd8c-42qtj) dopo il ripristino del volume dallo snapshot:

    kubectl exec postgres-59f89cfd8c-42qtj \
     -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

    Ciò conferma che la procedura di snapshot e ripristino è stata completata correttamente e che i dati dello snapshot sono stati ripristinati nella nuova PV accessibile al pod.

  5. Verifica che il volume creato dallo snapshot si trovi all'interno del pool di archiviazione:

    kubectl get pvc pvc-restore
    

    L'output è simile al seguente:

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    pvc-restore   Bound    pvc-b287c387-bc51-4100-a00e-b5241d411c82   2Ti        RWO            storage-pools-sc   2m24s
    
  6. Verifica se il nuovo volume è stato eseguito come specificato in StorageClass e PVC:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    L'output è simile al seguente, dove puoi vedere il nuovo volume pvc-b287c387-bc51-4100-a00e-b5241d411c82 provisioned nello stesso pool di archiviazione.

    
    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
    

    In questo modo, il volume ripristinato beneficia delle risorse e delle funzionalità condivise del pool.

Esegui la migrazione dei volumi esistenti in un pool di archiviazione

Utilizza gli snapshot e il ripristino per eseguire la migrazione dei volumi esistenti al di fuori di un pool di archiviazione in un pool di archiviazione.

Assicurati che siano soddisfatte le seguenti condizioni:

  • Il nuovo PVC pvc-restore fa riferimento a una classe di archiviazione che specifica il parametro storage-pools, che rimanda al pool di archiviazione in cui vuoi spostare il volume.
  • Il PV di origine di cui viene acquisito lo snapshot deve essere associato a un PVC con una Classe di archiviazione che non specifica il parametro storage-pools.

Dopo aver eseguito il ripristino da uno snapshot in un nuovo volume, puoi eliminare il PVC e il PV di origine.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi, elimina le risorse di archiviazione che hai creato in questa guida. Elimina prima tutti i dischi all'interno del pool di archiviazione, quindi elimina il pool di archiviazione.

Elimina il disco di avvio

Quando elimini un nodo (riducendo il pool di nodi) o un intero pool di nodi, i dischi di avvio associati vengono eliminati automaticamente. Puoi anche eliminare il cluster per eliminare automaticamente i dischi di avvio di tutti i pool di nodi al suo interno.

Per ulteriori informazioni, vedi:

Elimina il disco collegato

Per eliminare il disco collegato sottoposto a provisioning in un pool di archiviazione Hyperdisk:

  1. Elimina il pod che utilizza la PVC:

    kubectl delete deployments postgres
    
  2. Elimina il PVC che utilizza la classe di archiviazione del pool di archiviazione Hyperdisk.

    kubectl delete pvc my-pvc
    

    Verifica che la PVC pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 sia stata eliminata:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

Elimina il pool di archiviazione Hyperdisk

Elimina il pool di archiviazione Hyperdisk con il seguente comando:

gcloud compute storage-pools delete pool-us-east4-c --zone=us-east4-c --project=my-project

Passaggi successivi