En este documento, se describe cómo mejorar el rendimiento de tus cargas de trabajo de Redis en Google Kubernetes Engine (GKE) generando configuraciones optimizadas a nivel de la aplicación y del nodo. Para obtener más detalles, consulta Optimiza las cargas de trabajo en GKE.
Las optimizaciones para Redis se determinaron para una instancia de Redis 7 que se usa como una caché de consulta de un solo nodo con una proporción de lectura y escritura de 4:1 (4 lecturas por 1 escritura), con el rendimiento medido con Memtier 2.2.1. Considera cómo se usa la carga de trabajo de Redis en tu clúster en comparación con este caso de uso. Si tu caso de uso es diferente, es posible que las optimizaciones recomendadas deban ajustarse a tu contexto.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de GKE Recommender y la API de Google Kubernetes Engine. Habilita las APIs
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando
gcloud components updatepara obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos que se indican en este documento.
Requisitos
Usa la versión 1.31.1-gke.12000 de GKE o una posterior.
Optimiza las cargas de trabajo de Redis
Te recomendamos que uses un grupo de nodos dedicado para tu carga de trabajo de Redis. De forma predeterminada, se crea un grupo de nodos nuevo cuando completas los siguientes pasos.
Para optimizar el rendimiento de una carga de trabajo de Redis, haz lo siguiente:
Para crear los manifiestos con optimizaciones para la carga de trabajo de Redis, haz lo siguiente:
Ejecuta el siguiente comando para generar manifiestos con optimizaciones recomendadas:
gcloud container workload profiles manifests create \ --workload=redis-7-caching \ --cluster-version=CLUSTER_VERSION \ --options=machineType=MACHINE_TYPE \ --output-path=/tmp/manifests.yamlReemplaza lo siguiente:
CLUSTER_VERSION: Es la versión de GKE. Se recomienda la versión 1.31.1-gke.12000 o posterior de GKE.MACHINE_TYPE: Es el tipo de máquina deseado.
La marca
--output-path=/tmp/manifests.yamles opcional. Si no se especifica, los manifiestos se imprimen en la terminal, pero no se guardan en un archivo.Este comando genera un solo archivo YAML que contiene dos recursos de Kubernetes:
- Un ConfigMap que especifica una configuración de Redis llamada
redis.conf. - Un objeto ComputeClass. Esto especifica las máquinas en las que se ejecutará Redis, lo cual es opcional. Para obtener detalles sobre cómo se especifican los tipos de máquinas, consulta Acerca de las ComputeClasses personalizadas.
A continuación, se muestra un ejemplo del manifiesto generado:
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: DoNotScaleUpRevisa las recomendaciones y modifica los manifiestos para que incluyan las optimizaciones que prefieras. Para evaluar las recomendaciones, puedes hacer lo siguiente:
- Revisa la documentación de Redis para evaluar la configuración recomendada para tu contexto.
- Considera cómo se usa la carga de trabajo de Redis en tu clúster en comparación con el siguiente caso de uso. Si tu caso de uso es diferente, es posible que debas ajustar las optimizaciones recomendadas para tu contexto.
Las optimizaciones para Redis se determinaron para una instancia de Redis 7 que se usa como una caché de consulta de un solo nodo con una proporción de lectura y escritura de 4:1 (4 lecturas por 1 escritura), con el rendimiento medido con Memtier 2.2.1.
Edita el archivo de manifiesto si deseas modificar la configuración o agregarle elementos.
Aplica los manifiestos al clúster con el siguiente comando:
kubectl create -f /tmp/manifests.yaml
Implementa un Pod que haga referencia a las optimizaciones. Por ejemplo:
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-abc123Luego, aplica el manifiesto del Pod al clúster:
kubectl apply -f pod.yamlConfirma que Redis esté usando la configuración optimizada. Para ello, puedes ejecutar el siguiente comando para asegurarte de que Redis use la configuración optimizada:
kubectl exec redis -- redis-cli INFO server | grep config_fileDeberías ver un resultado similar al siguiente:
config_file:/etc/gke/optimization/redis.confTambién puedes usar el comando
redis-clipara consultar las directivas individuales que se establecen en la configuración optimizada, comoio-threads.
Cuando implementas la carga de trabajo, el clúster crea un nuevo grupo de nodos que se ajusta a la configuración optimizada y asigna tus Pods a esos grupos de nodos.
No se modifican los Pods que ya existen. Solo se optimizan los Pods que hacen referencia a las configuraciones optimizadas. Si ya implementaste cargas de trabajo de Redis en tu clúster, debes volver a implementarlas para ejecutarlas con las configuraciones optimizadas.
¿Qué sigue?
- Obtén más información sobre la optimización de cargas de trabajo en GKE.
- Obtén más información para implementar un clúster de Redis en GKE
- Obtén más información sobre las ComputeClasses de GKE.
- Para optimizar las cargas de trabajo de MySQL, consulta Optimiza el rendimiento de las cargas de trabajo de MySQL en GKE.