Migliora le prestazioni di lettura dei carichi di lavoro stateful con GKE Data Cache

Questa guida descrive come migliorare le prestazioni delle applicazioni stateful con molte operazioni di lettura utilizzando GKE Data Cache nei cluster Google Kubernetes Engine (GKE). GKE Data Cache è una soluzione di archiviazione a blocchi gestita che velocizza le operazioni di lettura per le applicazioni stateful, come i database, in esecuzione su GKE.

Puoi utilizzare Data Cache solo con i cluster GKE Standard. Questa guida ti illustra come abilitare GKE Data Cache quando crei un nuovo cluster GKE Standard o un pool di nodi e come eseguire il provisioning dei dischi collegati a GKE con l'accelerazione di Data Cache.

Informazioni su GKE Data Cache

Con GKE Data Cache, puoi utilizzare gli SSD locali sui nodi GKE come livello di cache per l'archiviazione permanente, come i dischi permanenti o gli Hyperdisk. L'utilizzo degli SSD locali riduce la latenza di lettura del disco e aumenta le query al secondo (QPS) per i carichi di lavoro stateful, riducendo al minimo i requisiti di memoria. GKE Data Cache supporta tutti i tipi di dischi permanenti o Hyperdisk come dischi di backup.

Per utilizzare GKE Data Cache per la tua applicazione, configura il pool di nodi GKE con gli SSD locali collegati. Puoi configurare GKE Data Cache in modo che utilizzi tutto o parte dell'SSD locale collegato. Gli SSD locali utilizzati dalla soluzione GKE Data Cache vengono criptati at-rest utilizzando la crittografia standard Google Cloud standard.

Vantaggi

GKE Data Cache offre i seguenti vantaggi:

  • Aumento della frequenza delle query gestite al secondo per i database convenzionali, come MySQL o Postgres, e per i database vettoriali.
  • Miglioramento delle prestazioni di lettura per le applicazioni stateful riducendo al minimo la latenza del disco.
  • Idratazione e reidratazione dei dati più rapide perché gli SSD sono locali al nodo. L'idratazione dei dati si riferisce al processo iniziale di caricamento dei dati necessari dall'archiviazione permanente sull'SSD locale. La reidratazione dei dati si riferisce al processo di ripristino dei dati sugli SSD locali dopo il riciclo di un nodo.

Architettura di deployment

Il seguente diagramma mostra un esempio di configurazione di GKE Data Cache con due pod che eseguono ciascuno un'app. I pod vengono eseguiti sullo stesso nodo GKE. Ogni pod utilizza un SSD locale separato e un disco permanente di backup.

Architettura di deployment per GKE Data Cache
Figura 1. Architettura di deployment per GKE Data Cache.

Modalità di deployment

Puoi configurare GKE Data Cache in una delle due modalità seguenti:

  • Writethrough (consigliata): quando l'applicazione scrive i dati, questi vengono scritti in modo sincrono sia nella cache sia nel disco permanente sottostante. La modalità writethrough impedisce la perdita di dati ed è adatta alla maggior parte dei carichi di lavoro di produzione.
  • Writeback: quando l'applicazione scrive i dati, questi vengono scritti solo nella cache. I dati vengono quindi scritti sul disco permanente in modo asincrono (in background). La modalità writeback migliora le prestazioni di scrittura ed è adatta ai carichi di lavoro che si basano sulla velocità. Tuttavia, questa modalità influisce sull'affidabilità. Se il nodo si arresta in modo imprevisto, i dati della cache non scaricati andranno persi.

Obiettivi

In questa guida imparerai a:

Requisiti e pianificazione

Assicurati di soddisfare i seguenti requisiti per l'utilizzo di GKE Data Cache:

  • Il cluster GKE deve eseguire la versione 1.32.3-gke.1440000 o successive.
  • I node pool devono utilizzare tipi di macchine che supportano gli SSD locali. Per ulteriori informazioni, consulta Supporto per le serie di macchine.

Pianificazione

Quando pianifichi la capacità di archiviazione per GKE Data Cache, tieni presente i seguenti aspetti:

  • Il numero massimo di pod per nodo che utilizzeranno GKE Data Cache contemporaneamente.
  • I requisiti di dimensione della cache previsti per i pod che utilizzeranno GKE Data Cache.
  • La capacità totale degli SSD locali disponibili sui nodi GKE. Per informazioni sui tipi di macchine con SSD locali collegati per impostazione predefinita e sui tipi di macchine per cui devi collegare gli SSD locali, consulta Scegli un numero valido di dischi SSD locali.
  • Per i tipi di macchine di terza generazione o successive (che hanno un numero predefinito di SSD locali collegati), tieni presente che gli SSD locali per Data Cache sono riservati agli SSD locali totali disponibili sulla macchina.
  • L'overhead del file system che può ridurre lo spazio utilizzabile sugli SSD locali. Ad esempio, anche se hai un nodo con due SSD locali con una capacità totale non elaborata di 750 GiB, lo spazio disponibile per tutti i volumi Data Cache potrebbe essere inferiore a causa dell'overhead del file system. Una parte della capacità degli SSD locali è riservata all'utilizzo del sistema.

Limitazioni

Incompatibilità con Backup per GKE

Per mantenere l'integrità dei dati in scenari come ripristino di emergenza o la migrazione delle applicazioni, potrebbe essere necessario eseguire il backup e il ripristino dei dati. Se utilizzi Backup per GKE per ripristinare un PVC configurato per l'utilizzo di Data Cache, la procedura di ripristino non riesce. Questo errore si verifica perché la procedura di ripristino non propaga correttamente i parametri della cache dei dati necessari dalla StorageClass originale.

Prezzi

Ti viene addebitato l'importo per la capacità di provisioning totale degli SSD locali e dei dischi permanenti collegati. Ti viene addebitato un importo per GiB al mese.

Per ulteriori informazioni, consulta la sezione Prezzi dei dischi nella documentazione di Compute Engine.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installala e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo il gcloud components update comando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.

Configurare i nodi GKE per l'utilizzo di Data Cache

Per iniziare a utilizzare GKE Data Cache per l'archiviazione accelerata, i nodi devono disporre delle risorse SSD locali necessarie. Questa sezione mostra i comandi per eseguire il provisioning degli SSD locali e abilitare GKE Data Cache quando crei un nuovo cluster GKE o aggiungi un nuovo pool di nodi a un cluster esistente. Non puoi aggiornare un pool di nodi esistente per utilizzare Data Cache. Se vuoi utilizzare Data Cache su un cluster esistente, aggiungi un nuovo pool di nodi al cluster.

Su un nuovo cluster

Per creare un cluster GKE con Data Cache configurato, utilizza il seguente comando:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --machine-type=MACHINE_TYPE \
    --data-cache-count=DATA_CACHE_COUNT \
    # Optionally specify additional Local SSDs, or skip this flag
    --ephemeral-storage-local-ssd count=LOCAL_SSD_COUNT

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster. Fornisci un nome univoco per il cluster GKE che stai creando.
  • LOCATION: la Google Cloud regione o la zona del nuovo cluster.
  • MACHINE_TYPE: il tipo di macchina da utilizzare da una serie di macchine di seconda, terza o generazione successiva per il cluster, ad esempio n2-standard-2 o c3-standard-4-lssd. Questo campo è obbligatorio perché l'SSD locale non può essere utilizzato con il tipo e2-medium predefinito. Per ulteriori informazioni, consulta le serie di macchine disponibili.
  • DATA_CACHE_COUNT: il numero di volumi SSD locali da dedicare esclusivamente a Data Cache su ogni nodo nel pool di nodi predefinito. Ognuno di questi SSD locali ha una capacità di 375 GiB. Il numero massimo di volumi varia in base al tipo di macchina e alla regione. Tieni presente che una parte della capacità degli SSD locali è riservata all'utilizzo del sistema.
  • (Facoltativo) LOCAL_SSD_COUNT: il numero di volumi SSD locali di cui eseguire il provisioning per altre esigenze di archiviazione temporanea. Utilizza il --ephemeral-storage-local-ssd count flag se vuoi eseguire il provisioning di SSD locali aggiuntivi non utilizzati per Data Cache.

    Tieni presente quanto segue per i tipi di macchine di terza generazione o successive:

    • I tipi di macchine di terza generazione o successive hanno un numero specifico di SSD locali collegati per impostazione predefinita. Il numero di SSD locali collegati a ogni nodo dipende dal tipo di macchina specificato.
    • Se prevedi di utilizzare il flag --ephemeral-storage-local-ssd count per ulteriore spazio di archiviazione temporanea, assicurati di impostare il valore di DATA_CACHE_COUNT su un numero inferiore al numero di dischi SSD locali totali disponibili sulla macchina. Il conteggio totale degli SSD locali disponibili include i dischi collegati predefiniti e tutti i nuovi dischi aggiunti utilizzando il flag --ephemeral-storage-local-ssd count.

Questo comando crea un cluster GKE in esecuzione su un tipo di macchina di seconda, terza o generazione successiva per il pool di nodi predefinito, esegue il provisioning degli SSD locali per Data Cache e, se specificato, esegue il provisioning di SSD locali aggiuntivi per altre esigenze di archiviazione temporanea.

Queste impostazioni si applicano solo al pool di nodi predefinito.

Su un cluster esistente

Per utilizzare Data Cache su un cluster esistente, devi creare un nuovo node pool con Data Cache configurato.

Per creare un pool di nodi GKE con Data Cache configurato, utilizza il seguente comando:

gcloud container node-pool create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --machine-type=MACHINE_TYPE \
    --data-cache-count=DATA_CACHE_COUNT \
    # Optionally specify additional Local SSDs, or skip this flag
    --ephemeral-storage-local-ssd count=LOCAL_SSD_COUNT

Sostituisci quanto segue:

  • NODE_POOL_NAME: il nome del pool di nodi. Fornisci un nome univoco per il pool di nodi che stai creando.
  • CLUSTER_NAME: il nome di un cluster GKE esistente in cui vuoi creare il pool di nodi.
  • LOCATION: la stessa Google Cloud regione o zona del cluster.
  • MACHINE_TYPE: il tipo di macchina da utilizzare da una serie di macchine di seconda, terza o generazione successiva per il cluster, ad esempio n2-standard-2 o c3-standard-4-lssd. Questo campo è obbligatorio perché l'SSD locale non può essere utilizzato con il tipo e2-medium predefinito. Per ulteriori informazioni, consulta le serie di macchine disponibili.
  • DATA_CACHE_COUNT: il numero di volumi SSD locali da dedicare esclusivamente a Data Cache su ogni nodo nel pool di nodi. Ognuno di questi SSD locali ha una capacità di 375 GiB. Il numero massimo di volumi varia in base al tipo di macchina e alla regione. Tieni presente che una parte della capacità degli SSD locali è riservata all'utilizzo del sistema.
  • (Facoltativo) LOCAL_SSD_COUNT: il numero di volumi SSD locali di cui eseguire il provisioning per altre esigenze di archiviazione temporanea. Utilizza il --ephemeral-storage-local-ssd count flag se vuoi eseguire il provisioning di SSD locali aggiuntivi non utilizzati per Data Cache.

    Tieni presente quanto segue per i tipi di macchine di terza generazione o successive:

    • I tipi di macchine di terza generazione o successive hanno un numero specifico di SSD locali collegati per impostazione predefinita. Il numero di SSD locali collegati a ogni nodo dipende dal tipo di macchina specificato.
    • Se prevedi di utilizzare il flag --ephemeral-storage-local-ssd count per ulteriore spazio di archiviazione temporanea, assicurati di impostare DATA_CACHE_COUNT su un numero inferiore al numero di dischi SSD locali totali disponibili sulla macchina. Il conteggio totale degli SSD locali disponibili include i dischi collegati predefiniti e tutti i nuovi dischi aggiunti utilizzando il flag --ephemeral-storage-local-ssd count.

Questo comando crea un pool di nodi GKE in esecuzione su un tipo di macchina di seconda, terza o generazione successiva, esegue il provisioning degli SSD locali per Data Cache e, se specificato, esegue il provisioning di SSD locali aggiuntivi per altre esigenze di archiviazione temporanea.

Eseguire il provisioning di Data Cache per l'archiviazione permanente su GKE

Questa sezione fornisce un esempio di come abilitare i vantaggi in termini di prestazioni di GKE Data Cache per le applicazioni stateful.

Creare un pool di nodi con SSD locali per Data Cache

Inizia creando un nuovo pool di nodi con gli SSD locali collegati nel cluster GKE. GKE Data Cache utilizza gli SSD locali per accelerare le prestazioni dei dischi permanenti collegati.

Il seguente comando crea un pool di nodi che utilizza una macchina di seconda generazione, n2-standard-2:

gcloud container node-pools create datacache-node-pool \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --num-nodes=2 \
    --data-cache-count=1 \
    --machine-type=n2-standard-2

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster. Specifica il cluster GKE in cui stai creando il nuovo pool di nodi.
  • LOCATION: la stessa Google Cloud regione o zona del tuo cluster.

Questo comando crea un pool di nodi con le seguenti specifiche:

  • --num-nodes=2: imposta il numero iniziale di nodi in questo pool su due.
  • --data-cache-count=1: specifica un SSD locale per nodo dedicato a GKE Data Cache.

Il numero totale di SSD locali di cui è stato eseguito il provisioning per questo pool di nodi è pari a due, perché per ogni nodo viene eseguito il provisioning di un SSD locale.

Creare una StorageClass di Data Cache

Crea una StorageClass Kubernetes che indichi a GKE come eseguire il provisioning dinamico di un volume permanente che utilizza Data Cache.

Utilizza il seguente manifest per creare e applicare una StorageClass denominata pd-balanced-data-cache-sc:

kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-balanced-data-cache-sc
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-balanced
  data-cache-mode: writethrough
  data-cache-size: "100Gi"
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
EOF

I parametri StorageClass per Data Cache includono quanto segue:

  • type: specifica il tipo di disco sottostante per il volume permanente. Per ulteriori opzioni, consulta i tipi di dischi permanenti supportati o i tipi di Hyperdisk.
  • data-cache-mode: utilizza la modalità writethrough consigliata. Per ulteriori informazioni, consulta Modalità di deployment.
  • data-cache-size: imposta la capacità dell'SSD locale su 100 GiB, che viene utilizzata come cache di lettura per ogni PVC.

Richiedere spazio di archiviazione con un PersistentVolumeClaim (PVC)

Crea un PVC che faccia riferimento alla StorageClass pd-balanced-data-cache-sc che hai creato. Il PVC richiede un volume permanente con Data Cache abilitato.

Utilizza il seguente manifest per creare un PVC denominato pvc-data-cache che richieda un volume permanente di almeno 300 GiB con accesso ReadWriteOnce.

kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-data-cache
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 300Gi
  storageClassName: pd-balanced-data-cache-sc
EOF

Creare un deployment che utilizzi il PVC

Crea un deployment denominato postgres-data-cache che esegua un pod che utilizza il PVC pvc-data-cache creato in precedenza. Il selettore di nodi cloud.google.com/gke-data-cache-count garantisce che il pod venga pianificato su un nodo che dispone delle risorse SSD locali necessarie per l'utilizzo di GKE Data Cache.

Crea e applica il seguente manifest per configurare un pod che esegua il deployment di un server web Postgres utilizzando il PVC:

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
 name: postgres-data-cache
 labels:
   name: database
   app: data-cache
spec:
 replicas: 1
 selector:
   matchLabels:
     service: postgres
     app: data-cache
 template:
   metadata:
     labels:
       service: postgres
       app: data-cache
   spec:
     nodeSelector:
       cloud.google.com/gke-data-cache-disk: "1"
     containers:
     - name: postgres
       image: postgres:14-alpine
       volumeMounts:
       - name: pvc-data-cache-vol
         mountPath: /var/lib/postgresql/data2
         subPath: postgres
       env:
       - name: POSTGRES_USER
         value: admin
       - name: POSTGRES_PASSWORD
         value: password
     restartPolicy: Always
     volumes:
     - name: pvc-data-cache-vol
       persistentVolumeClaim:
         claimName: pvc-data-cache
EOF

Verifica che il deployment sia stato creato correttamente:

kubectl get deployment

Il completamento del provisioning del container Postgres e la visualizzazione dello stato READY potrebbero richiedere alcuni minuti.

Verificare il provisioning di Data Cache

Dopo aver creato il deployment, verifica che il provisioning dell'archiviazione permanente con Data Cache sia stato eseguito correttamente.

  1. Per verificare che pvc-data-cache sia associato correttamente a un volume permanente, esegui il seguente comando:

    kubectl get pvc pvc-data-cache
    

    L'output è simile al seguente:

    NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                VOLUMEATTRIBUTESCLASS   AGE
    pvc-data-cache   Bound    pvc-e9238a16-437e-45d7-ad41-410c400ae018   300Gi      RWO            pd-balanced-data-cache-sc   <unset>                 10m
    
  2. Per verificare che il gruppo Logical Volume Manager (LVM) per Data Cache sia stato creato sul nodo:

    1. Recupera il nome del pod del driver PDCSI su quel nodo:

      NODE_NAME=$(kubectl get pod --output json |  jq '.items[0].spec.nodeName' | sed 's/\"//g')
      kubectl get po -n kube-system -o wide | grep ^pdcsi-node | grep $NODE_NAME
      

      Nell'output, copia il nome del pod pdcsi-node.

    2. Visualizza i log del driver PDCSI per la creazione del gruppo LVM:

      PDCSI_POD_NAME="PDCSI-NODE_POD_NAME"
      kubectl logs -n kube-system $PDCSI_POD_NAME gce-pd-driver | grep "Volume group creation"
      

      Sostituisci PDCSI-NODE_POD_NAME con il nome effettivo del pod che hai copiato nel passaggio precedente.

      L'output è simile al seguente:

      Volume group creation succeeded for LVM_GROUP_NAME
      

Questo messaggio conferma che la configurazione LVM per Data Cache è impostata correttamente sul nodo.

Libera spazio

Per evitare che ti vengano addebitati costi, elimina le risorse di archiviazione che hai creato in questa guida. Google Cloud

  1. Elimina il deployment.

    kubectl delete deployment postgres-data-cache
    
  2. Elimina il PersistentVolumeClaim.

    kubectl delete pvc pvc-data-cache
    
  3. Elimina il pool di nodi.

    gcloud container node-pools delete datacache-node-pool \
        --cluster CLUSTER_NAME
    

    Sostituisci CLUSTER_NAME con il nome del cluster in cui hai creato il pool di nodi che utilizza Data Cache.

Passaggi successivi