本文档介绍了如何通过生成经过优化的应用级和节点级配置,提高 Google Kubernetes Engine (GKE) 上的 Redis 工作负载的性能。如需了解详情,请参阅针对 GKE 上的工作负载进行优化。
Redis 的优化是针对用作单节点旁路缓存且读写比为 4:1(4 次读取对应 1 次写入)的 Redis 7 实例确定的,性能使用 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 工作负载的性能,请执行以下操作:
通过执行以下操作,创建针对 Redis 工作负载进行了优化的清单:
通过运行以下命令,生成包含建议优化的清单:
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.conf的 Redis 配置的 ConfigMap。 - 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查看建议并修改清单,使其包含您首选的优化。如需评估建议,您可以执行以下操作:
- 查看 Redis 文档,评估适合您上下文的推荐配置。
- 请考虑与以下应用场景相比,Redis 工作负载在集群上的使用方式。如果您的应用场景不同,则可能需要根据您的具体情况调整建议的优化措施。
Redis 的优化是针对用作单节点旁路缓存且读写比为 4:1(4 次读取对应 1 次写入)的 Redis 7 实例确定的,性能使用 Memtier 2.2.1 进行测量。
如果您想修改配置或向配置添加内容,请修改清单文件。
使用以下命令将清单应用于集群:
kubectl create -f /tmp/manifests.yaml
部署引用这些优化的 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确认 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 工作负载,则需要重新部署这些工作负载,以便使用优化后的配置运行它们。
后续步骤
- 详细了解 GKE 上的工作负载优化。
- 详细了解如何在 GKE 上部署 Redis 集群
- 详细了解 GKE ComputeClass。
- 如需针对 MySQL 工作负载进行优化,请参阅在 GKE 上优化 MySQL 工作负载性能。