优化 GKE 上的 Redis 工作负载性能

本文档介绍如何通过生成优化的应用级和节点级配置,提高 Redis 工作负载在 Google Kubernetes Engine (GKE) 上的性能。如需了解详情,请参阅针对 GKE 上的工作负载进行优化

Redis 的优化是针对以下情况确定的:Redis 7 实例用作读写比为 4:1(4 次读取与 1 次写入)的单节点旁路缓存,并使用 Memtier 2.2.1 测量性能。考虑一下您的集群上 Redis 工作负载的使用情况与此使用情形的对比。如果您的使用情形有所不同,则可能需要根据您的具体情况调整推荐的优化措施。

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 GKE Recommender API 和 Google Kubernetes Engine API。
  • 启用 API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。如果您之前安装了 gcloud CLI,请通过运行 gcloud components update 命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。

要求

使用 GKE 1.31.1-gke.12000 版或更高版本。

针对 Redis 工作负载进行优化

我们建议您为 Redis 工作负载使用专用节点池。默认情况下,完成以下步骤后,系统会创建新的节点池。

如需优化 Redis 工作负载的性能,请执行以下操作:

  1. 通过执行以下操作,创建针对 Redis 工作负载进行优化的清单:

    1. 运行以下命令,生成包含推荐优化的清单:

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

      替换以下内容:

      • CLUSTER_VERSION:GKE 版本。 建议使用 GKE 1.31.1-gke.12000 版或更高版本。
      • MACHINE_TYPE:所需的机器类型。

      --output-path=/tmp/manifests.yaml 标志是可选的。如果未指定,则清单会打印到终端,但不会保存到文件中。

      此命令会生成一个包含两个 Kubernetes 资源的 YAML 文件:

      • 指定 Redis 配置的 ConfigMap,名为 redis.conf
      • ComputeClass 对象。 此参数用于指定 Redis 运行的机器,是可选参数。 如需详细了解如何指定机器类型,请参阅自定义 ComputeClass 简介

      以下是生成的清单示例:

      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. 查看建议并修改清单,使其包含您偏好的优化。如需评估建议,您可以执行以下操作:

      • 查看 Redis 文档,评估适合您情况的推荐配置。
      • 请考虑您的集群上 Redis 工作负载的使用方式与以下使用情形有何不同。如果您的使用情形有所不同,则可能需要根据您的具体情况调整建议的优化措施。

      Redis 的优化是针对以下情况确定的:Redis 7 实例用作读写比为 4:1(4 次读取与 1 次写入)的单节点旁路缓存,并使用 Memtier 2.2.1 测量性能。

    3. 如果您想修改配置或向配置中添加内容,请修改清单文件。

    4. 使用以下命令将清单应用于集群:

      kubectl create -f /tmp/manifests.yaml
      
  2. 部署引用优化的 Pod。例如:

    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
    

    然后,将您的 Pod 清单应用到集群:

    kubectl apply -f pod.yaml
    
  3. 确认 Redis 是否正在使用优化配置。为此,您可以运行以下命令,确保 Redis 使用的是优化后的配置:

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

    您应该会看到类似于如下内容的输出:

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

    您还可以使用 redis-cli 命令查询在优化配置中设置的各个指令,例如 io-threads

部署工作负载时,集群会创建一个符合优化配置的新节点池,并将您的 Pod 分配给这些节点池。

现有 Pod 不会发生变化。只有引用优化配置的 Pod 才会得到优化。如果您之前已在集群中部署 Redis 工作负载,则需要重新部署这些工作负载,以便使用优化后的配置来运行它们。

后续步骤