Ottimizza le prestazioni del workload Redis su GKE

Questo documento descrive come migliorare le prestazioni dei workload Redis su Google Kubernetes Engine (GKE) generando configurazioni ottimizzate a livello di applicazione e di nodo. Per maggiori dettagli, consulta Ottimizza per i workload su GKE.

Le ottimizzazioni per Redis sono state determinate per un'istanza Redis 7 utilizzata come cache look-aside a nodo singolo con un rapporto di lettura-scrittura di 4:1 (4 letture per 1 scrittura), con prestazioni misurate utilizzando Memtier 2.2.1. Considera come viene utilizzato il workload Redis sul tuo cluster rispetto a questo caso d'uso. Se il tuo caso d'uso è diverso, le ottimizzazioni consigliate potrebbero dover essere adattate al tuo contesto.

Prima di iniziare

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

  • Abilita l'API GKE Recommender e l'API Google Kubernetes Engine.
  • Abilita le API
  • Per 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 comando gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.

Requisiti

Utilizza GKE 1.31.1-gke.12000 o versioni successive.

Ottimizza per i workload Redis

Ti consigliamo di utilizzare un pool di nodi dedicato per il tuo workload Redis. Per impostazione predefinita, quando completi i passaggi seguenti viene creato un nuovo pool di nodi.

Per ottimizzare le prestazioni di un workload Redis, segui questi passaggi:

  1. Crea i manifest con le ottimizzazioni per il workload Redis nel seguente modo:

    1. Genera i manifest con le ottimizzazioni consigliate eseguendo il seguente comando:

      gcloud container workload profiles manifests create \
         --workload=redis-7-caching \
         --cluster-version=CLUSTER_VERSION \
         --options=machineType=MACHINE_TYPE \
         --output-path=/tmp/manifests.yaml
      

      Sostituisci quanto segue:

      • CLUSTER_VERSION: la versione di GKE. La versione consigliata di GKE è 1.31.1-gke.12000 o successiva.
      • MACHINE_TYPE: il tipo di macchina desiderato.

      Il flag --output-path=/tmp/manifests.yaml è facoltativo. Se non viene specificato, i manifest vengono stampati nel terminale, ma non vengono salvati in un file.

      Questo comando genera un singolo file YAML contenente due risorse Kubernetes:

      • Un ConfigMap che specifica una configurazione Redis denominata redis.conf.
      • Un oggetto ComputeClass. Specifica le macchine su cui eseguire Redis, il che è facoltativo. Per informazioni dettagliate su come vengono specificati i tipi di macchine, consulta Informazioni sulle ComputeClass personalizzate

      Di seguito è riportato un esempio del manifest generato:

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: redis.conf
      data:
        redis.conf: |
          io-threads 2
          io-threads-do-reads yes
          save ""
      ---
      apiVersion: cloud.google.com/v1
      kind: ComputeClass
      metadata:
        generateName: optimized-gke-redis-7-caching-
      spec:
        nodePoolAutoCreation:
          enabled: true
        priorities:
        - machineType: c4-standard-4
        whenUnsatisfiable: DoNotScaleUp
      
    2. Esamina i suggerimenti e modifica i manifest in modo che includano le ottimizzazioni che preferisci. Per valutare i suggerimenti, puoi procedere nel seguente modo:

      • Consulta la documentazione di Redis per valutare la configurazione consigliata per il tuo contesto.
      • Considera il modo in cui il workload Redis viene utilizzato nel tuo cluster rispetto al seguente caso d'uso. Se il tuo caso d'uso è diverso, le ottimizzazioni consigliate potrebbero dover essere adattate al tuo contesto.

      Le ottimizzazioni per Redis sono state determinate per un'istanza Redis 7 utilizzata come cache look-aside a nodo singolo con un rapporto di lettura-scrittura di 4:1 (4 letture per 1 scrittura), con prestazioni misurate utilizzando Memtier 2.2.1.

    3. Modifica il file manifest se vuoi modificare o aggiungere elementi alla configurazione.

    4. Applica i manifest al cluster utilizzando il seguente comando:

      kubectl create -f /tmp/manifests.yaml
      
  2. Esegui il deployment di un pod che fa riferimento alle ottimizzazioni. Ad esempio:

    apiVersion: v1
    kind: Pod
    metadata:
      name: redis
    spec:
      containers:
        - name: redis
          image: redis:7
          args:
            - /etc/gke/optimization/redis.conf
          volumeMounts:
            - name: gke-optimized-workload-config
              subPath: redis.conf
              mountPath: /etc/gke/optimization/redis.conf
              readOnly: true
      volumes:
        - name: gke-optimized-workload-config
          configMap:
            name: redis.conf
      nodeSelector:
        cloud.google.com/compute-class: optimized-gke-redis-7-caching-abc123
    

    Quindi, applica il manifest del pod al cluster:

    kubectl apply -f pod.yaml
    
  3. Verifica che Redis utilizzi la configurazione ottimizzata. Per farlo, puoi eseguire il seguente comando per assicurarti che Redis utilizzi la configurazione ottimizzata:

    kubectl exec redis -- redis-cli INFO server | grep config_file
    

    Dovresti vedere un output simile al seguente:

    config_file:/etc/gke/optimization/redis.conf
    

    Puoi anche utilizzare il comando redis-cli per eseguire query sulle singole istruzioni impostate nella configurazione ottimizzata, ad esempio io-threads.

Quando esegui il deployment del workload, il cluster crea un nuovo pool di nodi che rispetta la configurazione ottimizzata e assegna i pod a questi node pool.

I pod già esistenti non vengono modificati. Vengono ottimizzati solo i pod che fanno riferimento alle configurazioni ottimizzate. Se in precedenza hai eseguito il deployment di workload Redis nel cluster, devi rifare il deployment di questi workload per eseguirli con le configurazioni ottimizzate.

Passaggi successivi