在 GKE 上提升 Redis 工作負載效能

本文說明如何產生經過最佳化的應用程式層級和節點層級設定,進而提升 Google Kubernetes Engine (GKE) 上 Redis 工作負載的效能。詳情請參閱「針對 GKE 上的工作負載進行最佳化」。

我們是針對 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 是選用旗標。如果未指定,資訊清單會列印至終端機,但不會儲存至檔案。

      這項指令會產生單一 YAML 檔案,其中包含兩項 Kubernetes 資源:

      • 指定名為「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
      
    2. 查看建議並修改資訊清單,加入您偏好的最佳化項目。如要評估最佳化建議,請執行下列步驟:

      • 請參閱 Redis 說明文件,評估適合您情境的建議設定。
      • 請考量叢集上 Redis 工作負載的使用方式,與下列用途相比如何。如果您的用途不同,建議的調整項目可能需要配合您的情境。

      我們以 Redis 7 執行個體做為單一節點的旁置快取,讀取/寫入比率為 4:1 (4 次讀取對 1 次寫入),並使用 Memtier 2.2.1 測量效能,據此決定 Redis 的最佳化設定。

    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 工作負載,則需要重新部署這些工作負載,才能以最佳化設定執行。

後續步驟