Otimizar o desempenho da carga de trabalho do Redis no GKE

Este documento descreve como melhorar a performance das cargas de trabalho do Redis no Google Kubernetes Engine (GKE) gerando configurações otimizadas no nível do aplicativo e do nó. Para mais detalhes, consulte Otimizar cargas de trabalho no GKE.

As otimizações do Redis foram determinadas para uma instância do Redis 7 usada como um cache de look-aside de nó único com uma proporção de leitura/gravação de 4:1 (4 leituras para 1 gravação), com performance medida usando o Memtier 2.2.1. Considere como a carga de trabalho do Redis é usada no cluster em comparação com esse caso de uso. Se o caso de uso for diferente, as otimizações recomendadas poderão precisar ser ajustadas para o contexto.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ative a API GKE Recommender e a API Google Kubernetes Engine.
  • Ativar APIs
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.

Requisitos

Use o GKE versão 1.31.1-gke.12000 ou mais recente.

Otimizar cargas de trabalho do Redis

Recomendamos o uso de um pool de nós dedicado para a carga de trabalho do Redis. Por padrão, um novo pool de nós é criado quando você conclui as etapas a seguir.

Para otimizar a performance de uma carga de trabalho do Redis, faça o seguinte:

  1. Crie os manifestos com otimizações para a carga de trabalho do Redis fazendo o seguinte:

    1. Gere manifestos com otimizações recomendadas executando o seguinte comando:

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

      Substitua:

      • CLUSTER_VERSION: a versão do GKE. A recomendação é a versão 1.31.1-gke.12000 ou mais recente do GKE.
      • MACHINE_TYPE: o tipo de máquina desejado.

      A flag --output-path=/tmp/manifests.yaml é opcional. Se não for especificada, os manifestos serão impressos no terminal, mas não serão salvos em um arquivo.

      Esse comando gera um único arquivo YAML que contém dois recursos do Kubernetes:

      • Um ConfigMap que especifica uma configuração do Redis chamada redis.conf.
      • Um objeto ComputeClass. Isso especifica máquinas para o Redis ser executado, o que é opcional. Para detalhes sobre como os tipos de máquina são especificados, consulte Sobre as ComputeClasses personalizadas

      Confira a seguir um exemplo do manifesto gerado:

      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. Analise as recomendações e modifique os manifestos para que eles incluam as otimizações preferidas. Para avaliar as recomendações, faça o seguinte:

      • Analise a documentação do Redis para avaliar a configuração recomendada para seu contexto.
      • Considere como a carga de trabalho do Redis é usada no cluster em comparação com o caso de uso a seguir. Se o caso de uso for diferente, as otimizações recomendadas poderão precisar ser ajustadas para o contexto.

      As otimizações do Redis foram determinadas para uma instância do Redis 7 usada como um cache de look-aside de nó único com uma proporção de leitura/gravação de 4:1 (4 leituras para 1 gravação), com performance medida usando o Memtier 2.2.1.

    3. Edite o arquivo de manifesto se quiser modificar ou adicionar à configuração.

    4. Aplique os manifestos ao cluster usando o seguinte comando:

      kubectl create -f /tmp/manifests.yaml
      
  2. Implante um pod que faça referência às otimizações. Exemplo:

    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
    

    Em seguida, aplique o manifesto do pod ao cluster:

    kubectl apply -f pod.yaml
    
  3. Confirme se o Redis está usando a configuração otimizada. Para fazer isso, execute o comando a seguir para garantir que o Redis esteja usando a configuração otimizada:

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

    O resultado será semelhante a este:

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

    Também é possível usar o comando redis-cli para consultar as diretivas individuais definidas na configuração otimizada, como io-threads.

Quando você implanta a carga de trabalho, o cluster cria um novo pool de nós que segue a configuração otimizada e atribui seus pods a esses pools de nós.

Os pods que já existem não são modificados. Somente os pods que fazem referência às configurações otimizadas são otimizados. Se você já implantou cargas de trabalho do Redis no cluster, será necessário reimplantar essas cargas de trabalho para executá-las com as configurações otimizadas.

A seguir