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 eseguire il pool e condividere capacità di archiviazione, velocità effettiva e IOPS su più 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 Google Cloud Hyperdisk all'interno di questi pool di archiviazione, che creano sostanzialmente pool di archiviazione Hyperdisk. I pool di archiviazione Hyperdisk offeriscono 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 a costi contenuti. Ciò ti consente di sfruttare tecnologie per l'efficienza come la deduplicazione 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:

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 restrizione non si applica se disponi del provisioning automatico dei nodi in un bucket in cui è abilitato il controllo delle versioni. Se necessario, il provisioning automatico dei nodi può creare automaticamente pool di nodi nelle zone corrette.
  • Assicurati che il tipo di macchina che esegue il pod supporti il collegamento di Hyperdisk Tipo di disco bilanciato. La velocità effettiva Hyperdisk non è supportata come disco di avvio. Consulta la documentazione di assistenza per i tipi di macchine Hyperdisk.
  • Puoi eseguire il provisioning dei dischi di avvio nei pool di archiviazione solo nelle istanze create manualmente o pool di nodi aggiornato.
  • Quando i nodi vengono creati automaticamente utilizzando il provisioning automatico dei nodi, i dischi di avvio per 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:

  • Versione GKE minima richiesta per il provisioning dei dischi collegati nei pool di archiviazione è 1.29.2-gke.1035000 e successivi.
  • 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 località dei nodi del delle località del cluster e dei nodi del pool di nodi.
  • Puoi eseguire il provisioning solo della velocità effettiva Hyperdisk e Dischi collegati bilanciati nei pool di archiviazione. Il tipo di disco collegato deve che corrispondano al tipo di pool di archiviazione. Per saperne di più, 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 Hyperdisk Balanced:

  • 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 il numero di IOPS con il provisioning delle prestazioni avanzato.
  • 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 con velocità effettiva Hyperdisk:

  • HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region: per aumentare la capacità con il provisioning avanzato della capacità.
  • 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 per i 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 attività:

  • 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, scarica la versione più recente 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 del collegamento i dischi permanenti in quel pool di archiviazione. Per maggiori informazioni, vedi Creare pool di archiviazione Hyperdisk.

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

Ad esempio, utilizza il comando seguente per creare un pool di archiviazione bilanciato Hyperdisk con Capacità avanzata e prestazioni avanzate ed provisioning di 10 TB di capacità, 10.000 IOPS/s e una velocità effettiva di 1024 Mbps 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 Standard con provisioning automatico dei nodi attivata, 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 vuoi creare 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 durante una qualsiasi delle le seguenti:

  • Quando crei un nuovo cluster GKE
  • Durante la creazione di un nuovo pool di nodi
  • Quando si aggiorna un pool di nodi esistente

Durante la creazione di un cluster

Per creare un cluster GKE con dischi di avvio di cui è stato eseguito il provisioning in un pool di archiviazione, utilizza questo 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 dei percorsi delle risorse del pool di archiviazione (esempio, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) in cui 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 nel tuo cluster. Usa il flag —region per creare un cluster a livello di regione.

Durante la creazione di 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 questo 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 dei 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 nel pool di archiviazione percorsi delle risorse corrispondano ai valori in --node-locations.
  • ZONE,[...]: un elenco separato da virgole di zone in cui l'impronta del tuo nodo deve essere replicata. 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 crei il pool di nodi.

Durante l'aggiornamento di 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 elemento 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.

GKE aggiorna il pool di nodi in base alla strategia di upgrade del pool di nodi.

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

In questa sezione:

  • Crei 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 utilizzi risorse condivise del pool di archiviazione, specifica il pool di archiviazione utilizzando l'storage-pools nel tuo oggetto StorageClass. StorageClass viene quindi utilizzato in una PVC per il provisioning il volume bilanciato Hyperdisk che verrà utilizzato dal pod.
  • Crea una PVC per richiedere un volume permanente, ovvero una porzione di Hyperdisk per un pod del 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, esamina 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 di zona standard utilizzando gcloud CLI, consulta Creazione di un cluster di zona.

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. Usa il flag —region per creare un cluster a livello di regione.
  • PROJECT_ID: il tuo account Google Cloud dell'ID progetto.
  • MACHINE_TYPE: il tipo di macchina supportato che vuoi utilizzare per i 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 il volume permanente deve essere creato all'interno di un pool di archiviazione, un oggetto StorageClass. Per saperne di più, vedi 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 archiviazione Hyperdisk Balanced.
  • 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 Esprimi il valore della velocità effettiva in MiBps usando il valore "Mi" qualificatore; ad esempio, se la velocità effettiva richiesta è 250 MiBps, specifica "250Mi" durante la creazione dell'oggetto StorageClass.
provisioned-iops-on-create Hyperdisk bilanciato, Hyperdisk IOPS Il valore IOPS deve essere espresso senza qualificatori. ad esempio, se hai bisogno di 7000 IOPS, specifica "7000" quando crei l'oggetto StorageClass.

Per indicazioni sui valori consentiti per la velocità effettiva o il numero di IOPS, vedi Pianificare il livello delle 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

Utilizzando l'volumeBindingMode: WaitForFirstConsumer in questo oggetto StorageClass, l'associazione e il provisioning di una PVC vengono ritardati fino a quando Viene creato il pod che utilizza la PVC. Questo approccio garantisce che il provisioning dell'oggetto PV non venga eseguito prematuramente, e esiste una corrispondenza tra le zone tra il volume permanente e il pod che lo utilizza. Se le rispettive zone non corrispondono, il pod rimane nello stato Pending.

Crea un PersistentVolumeClaim (PVC)

Crea una PVC che faccia riferimento al valore StorageClass 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 pod con oggetti PersistentVolume, usa un controller dei carichi di lavoro ad esempio un deployment Deployment o uno StatefulSet.

garantire che i pod possano essere pianificati su un pool di nodi con una serie di macchine che supporti Hyperdisk Bilanciato, configura un deployment con cloud.google.com/machine-family selettore di nodi. Per ulteriori informazioni, consulta la sezione sul supporto del tipo di macchina per gli Hyperdisk. Nel seguente deployment di esempio utilizzi la serie di macchine c3.

Crea e applica il manifest seguente per configurare un pod per il deployment di un Postgres server web 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. Controlla 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 di un pool di archiviazione, ricrea il disco da uno snapshot. Per ulteriori informazioni, consulta Cambiare il tipo di disco.

In questa sezione:

Crea un file di test

Per creare e verificare un file di test:

  1. Ottieni 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 un oggetto VolumeSnapshotClass che specifichi come viene creato lo snapshot dei tuoi volumi devono essere presi e gestiti:

    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 oggetto VolumeSnapshot e acquisisci lo snapshot dal volume associato il PersistentVolumeClaim di 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'
    

Ripristinare 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 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 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
    

    Ciò garantisce che il volume ripristinato tragga vantaggio dalle risorse e dalle 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:

  • La nuova PVC pvc-restore fa riferimento a un oggetto StorageClass che specifica Il parametro storage-pools, che rimanda al pool di archiviazione su cui vuoi spostare il volume in cui viene eseguito il deployment.
  • Il volume permanente di origine di cui viene eseguito lo snapshot deve essere associato a un PVC con un StorageClass 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 ed eliminare 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 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 la PVC che utilizza il pool di archiviazione Hyperdisk StorageClass.

    kubectl delete pvc my-pvc
    

    Verifica che l'oggetto PVC pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 sia stato eliminato:

    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