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


Questa pagina descrive come i cluster Google Kubernetes Engine (GKE) possono raggruppare e condividere capacità di archiviazione, velocità effettiva e IOPS tra i dischi utilizzando i pool di archiviazione GKE Hyperdisk.

Panoramica

I pool di archiviazione raggruppano logicamente i dispositivi di archiviazione fisici, consentendoti di segmentare le risorse. Puoi eseguire il provisioning di Hyperdisk Google Cloud all'interno di questi pool di archiviazione, creando di fatto pool di archiviazione Hyperdisk. I pool di archiviazione Hyperdisk offrono capacità, throughput e IOPS di cui è stato eseguito il provisioning in anticipo e 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 ed economico. In questo modo, puoi sfruttare tecnologie di efficienza come la deduplicazione e il thin provisioning.

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

Considerazioni sulla pianificazione

Prima di eseguire il provisioning e l'utilizzo del pool di archiviazione Hyperdisk, tieni presente i seguenti requisiti e limitazioni.

Creazione e gestione dei pool di archiviazione

Si applicano i seguenti requisiti e limitazioni:

Provisioning dei dischi di avvio nei pool di archiviazione

Si applicano i seguenti requisiti e limitazioni:

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 versioni successive.
  • Assicurati che il driver CSI per il disco permanente di Compute Engine sia abilitato. Il driver del disco permanente Compute Engine è abilitato per impostazione predefinita nei nuovi cluster Autopilot e standard e non può essere disattivato o modificato nei cluster Autopilot. Per abilitare il driver, consulta Abilitazione del driver CSI per il disco permanente di Compute Engine in un cluster esistente.
  • Assicurati che il pool di archiviazione si trovi in almeno una delle posizioni dei nodi del cluster e in quelle del pool di nodi.
  • Puoi eseguire il provisioning solo dei dischi collegati Hyperdisk Throughput e Hyperdisk Balanced nei pool di archiviazione. Il tipo di disco collegato deve corrispondere al tipo di pool di archiviazione. Per saperne di più, consulta Tipi di pool di archiviazione Hyperdisk.
  • All'interno di una StorageClass, è consentito un solo pool di archiviazione per zona.
  • All'interno di una StorageClass, tutti i pool di archiviazione devono avere il tipo di pool di archiviazione.
  • Assicurati che il tipo di macchina che esegue il pod supporti il collegamento del tipo di disco che stai utilizzando dal pool di archiviazione. Per saperne di più, consulta Supporto dei tipi di macchine Hyperdisk.

Quota

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

Per ulteriori informazioni, consulta Visualizzare le quote per il tuo progetto e Richiedere un aggiustamento delle quote.

Utilizza i seguenti filtri per le quote per i pool di archiviazione Hyperdisk bilanciato:

  • 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 di Prestazioni avanzate.
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region: per aumentare il throughput con il provisioning di Prestazioni avanzate.
  • 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 di Prestazioni standard.
  • HDB-TOTAL-THROUGHPUT-per-project-region: per aumentare il throughput con il provisioning di Prestazioni standard.

Utilizza i seguenti filtri per le quote 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 il throughput con il provisioning di Prestazioni avanzate.
  • HDT-TOTAL-GB-per-project-region: per aumentare la capacità con il provisioning della capacità standard.
  • HDT-TOTAL-THROUGHPUT-per-project-region: per aumentare il throughput con il provisioning di Prestazioni standard.

Ad esempio, se vuoi aumentare la capacità totale per i pool di archiviazione Hyperdisk bilanciati con provisioning di capacità avanzato, 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 la pagina 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à, installala e poi inizializzala. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo gcloud components update.

Crea 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 saperne di più, consulta Crea pool di archiviazione Hyperdisk.

Assicurati di creare i 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 ed esegui il provisioning di 10 TB di capacità, 10.000 IOPS/s e 1024 MBps di throughput 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 Trusted Cloud by S3NS .

Ispeziona le zone del pool di archiviazione

  • Per i cluster Autopilot e i cluster standard con il provisioning automatico dei nodi abilitato, puoi creare un pool di archiviazione in qualsiasi zona all'interno della regione del cluster. Se non esiste alcun 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 in quella zona.

  • Per i cluster Standard senza il provisioning automatico dei nodi, crea pool di archiviazione nelle zone dei nodi predefinite del cluster, poiché i pool di archiviazione sono risorse di zona. Puoi impostare le zone dei nodi del 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 questo comando:

gcloud container clusters describe CLUSTER_NAME  | yq '.locations'

Sostituisci CLUSTER_NAME con il nome del cluster che creerai 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 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:

  • Durante la creazione di un nuovo cluster GKE
  • Quando crei un nuovo pool di nodi
  • Quando aggiorni 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 \
    --location=CONTROL_PLANE_LOCATION

Sostituisci quanto segue:

  • CLUSTER_NAME: fornisci un nome univoco per il cluster che stai creando.
  • DISK_TYPE: imposta questo valore su hyperdisk-balanced.. Se lasciato vuoto, il tipo di disco viene impostato per impostazione predefinita su Hyperdisk bilanciato.
  • STORAGE_POOL,[...]: un elenco separato da virgole dei percorsi delle risorse del pool di archiviazione (ad esempio, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) in cui verranno sottoposti a provisioning i 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 di zone in cui deve essere replicata l'impronta del nodo. Per i cluster regionali, puoi specificare le regioni. Tutte le zone devono trovarsi nella stessa regione del cluster, specificata dal flag --location.
  • MACHINE_TYPE: Il tipo di macchina supportato che vuoi utilizzare per i tuoi nodi.
  • CONTROL_PLANE_LOCATION: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.

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 \
    --location=CONTROL_PLANE_LOCATION --cluster=CLUSTER_NAME

Sostituisci quanto segue:

  • NODE_POOL_NAME: fornisci un nome univoco per il pool di nodi che stai creando.
  • DISK_TYPE: imposta questo valore su hyperdisk-balanced.. Se lasciato vuoto, il tipo di disco viene impostato per impostazione predefinita su Hyperdisk bilanciato.
  • STORAGE_POOL,[...]: un elenco separato da virgole dei percorsi delle risorse del pool di archiviazione (ad esempio, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) in cui verranno sottoposti a provisioning i 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 di zone in cui deve essere replicata l'impronta del nodo. Tutte le zone devono trovarsi nella stessa regione del cluster, specificata dal flag -location.
  • MACHINE_TYPE: Il tipo di macchina supportato che vuoi utilizzare per i tuoi nodi.
  • CONTROL_PLANE_LOCATION: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.
  • 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 sottoposti a provisioning in un pool di archiviazione, utilizza il seguente comando.

gcloud container node-pools update NODE_POOL_NAME \
  --storage-pools=STORAGE_POOL,[...] \
  --location=CONTROL_PLANE_LOCATION --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 di 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 di risorse del pool di archiviazione corrispondano alla zona del pool di nodi che stai aggiornando.
  • CONTROL_PLANE_LOCATION: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.
  • CLUSTER_NAME: il nome del cluster GKE a cui appartiene questopool di nodil.

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

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

In questa sezione:

  • Crea un nuovo cluster GKE con dischi collegati di cui è stato eseguito il provisioning in un pool di archiviazione.
  • Crea una StorageClass per il provisioning dinamico di un PersistentVolume (PV) quando un pod lo richiede tramite un PersistentVolumeClaim (PVC). Affinché un PV utilizzi le risorse condivise del pool di archiviazione, devi specificare il pool di archiviazione utilizzando il parametro storage-pools in StorageClass. L'oggetto StorageClass viene quindi utilizzato in un oggetto PVC per eseguire il provisioning del volume Hyperdisk bilanciato che verrà utilizzato dal pod.
  • Crea un PVC per richiedere un PV, ovvero una parte di 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 garantire che la tua applicazione abbia accesso all'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 Crea un cluster Autopilot.

Esempio:

gcloud container clusters create-auto CLUSTER_NAME --location=CONTROL_PLANE_LOCATION

Sostituisci quanto segue:

  • CLUSTER_NAME: fornisci un nome univoco per il cluster che stai creando.
  • CONTROL_PLANE_LOCATION: la regione di Compute Engine del piano di controllo del cluster.

Per selezionare un tipo di macchina supportato, specifica il 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 di zona standard utilizzando gcloud CLI, consulta Creazione di un cluster di zona.

Per creare un cluster regionale standard utilizzando gcloud CLI, consulta Creazione di un cluster regionale.

Esempio:

gcloud container clusters create CLUSTER_NAME --location=CONTROL_PLANE_LOCATION --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.
  • CONTROL_PLANE_LOCATION: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.
  • PROJECT_ID: l'ID progetto del tuo account Trusted Cloud by S3NS .
  • MACHINE_TYPE: Il tipo di macchina supportato che vuoi utilizzare per i tuoi nodi.
  • DISK_TYPE: imposta questo valore su hyperdisk-balanced.. Se lasciato vuoto, il tipo di disco viene impostato per impostazione predefinita su Hyperdisk bilanciato.

Crea una StorageClass

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

Per creare una nuova StorageClass con il livello di throughput o IOPS che preferisci:

  • Utilizza pd.csi.storage.gke.io nel campo del provisioner.
  • Specifica il tipo 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 determinate dalle dimensioni iniziali del disco di cui è stato eseguito il provisioning. Quando crei una 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 basato sulla capacità.

Parametro Tipo di Hyperdisk Utilizzo
provisioned-throughput-on-create Hyperdisk bilanciato, throughput Hyperdisk Esprimi il valore di throughput in MiB/s utilizzando il qualificatore "Mi". Ad esempio, se il throughput richiesto è 250 MiB/s, specifica "250Mi" quando crei StorageClass.
provisioned-iops-on-create Hyperdisk bilanciato, IOPS Hyperdisk Il valore IOPS deve essere espresso senza qualificatori. 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 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

Utilizzando volumeBindingMode: WaitForFirstConsumer in questo StorageClass, il binding e il provisioning di un PVC vengono ritardati fino alla creazione di un pod che utilizza il PVC. Questo approccio garantisce che il PV non venga sottoposto al provisioning prematuramente e che ci sia una corrispondenza di zona tra il PV e il pod che lo utilizza. Se le zone non corrispondono, il pod rimane nello stato Pending.

Crea un PersistentVolumeClaim (PVC)

Crea un PVC che faccia 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 di destinazione per il volume Hyperdisk Balanced:

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 PersistentVolume, utilizza un controller del carico di lavoro come un deployment o un StatefulSet.

Per assicurarti che i pod possano essere pianificati su un pool di nodi con una serie di macchine che supporta Hyperdisk bilanciato, configura un deployment con il selettore di nodi cloud.google.com/machine-family. Per saperne di più, consulta Supporto dei tipi di macchine per gli hyperdisk. Utilizzi la serie di macchine c3 nel seguente deployment di esempio.

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 andrà 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 prima che il provisioning delle istanze Hyperdisk venga completato e venga visualizzato lo stato READY.

Verifica se il disco collegato è sottoposto a provisioning

  1. Controlla se il tuo 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. Controlla se il volume è stato sottoposto a provisioning 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
    

Snapshot e ripristino dei 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 all'interno o all'esterno di un pool di archiviazione, ricrealo da uno snapshot. Per ulteriori informazioni, vedi Cambia il tipo di disco.

In questa sezione:

Creare 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 VolumeSnapshotClass che specifichi come devono essere acquisiti e gestiti gli 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 a PersistentVolumeClaim my-pvc:

    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'
    

Ripristina lo snapshot del volume

Per ripristinare lo snapshot e i dati del volume:

  1. Crea una nuova PVC che ripristina i dati da uno snapshot e assicura che il nuovo volume venga sottoposto a provisioning nello stesso 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 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, precedentemente eliminato, ora esista 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!
    

    In questo modo viene convalidato che il processo di snapshot e ripristino è stato completato correttamente e che i dati dello snapshot sono stati ripristinati nel nuovo PV accessibile al pod.

  5. Verifica che il volume creato dallo snapshot si trovi nel tuo 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. Controlla se il nuovo volume è stato sottoposto a provisioning 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, in cui puoi vedere il nuovo volume pvc-b287c387-bc51-4100-a00e-b5241d411c82 di cui è stato eseguito il provisioning 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 snapshot e ripristino per eseguire la migrazione dei volumi che si trovano 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 StorageClass che specifica il parametro storage-pools, che punta al pool di archiviazione in cui vuoi spostare il volume.
  • Il PV di origine di cui viene creato lo snapshot deve essere associato a un PVC con una StorageClass che non specifica il parametro storage-pools.

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

Esegui la pulizia

Per evitare che al tuo account Trusted Cloud by S3NS 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 e poi elimina il pool di archiviazione.

Elimina il disco di avvio

Quando elimini un nodo (riducendo le dimensioni del 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 di cui è stato eseguito il 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 StorageClass del pool di archiviazione Hyperdisk.

    kubectl delete pvc my-pvc
    

    Conferma che la PVC pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 è 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