GKE で Redis ワークロードのパフォーマンスを最適化する

このドキュメントでは、最適化されたアプリケーション レベルとノードレベルの構成を生成して、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 ワークロードのパフォーマンスを最適化するには、次の操作を行います。

  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 フラグは省略可能です。指定されていない場合、マニフェストはターミナルに出力されますが、ファイルには保存されません。

      このコマンドは、2 つの 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
      
    2. 推奨事項を確認し、マニフェストを変更して、推奨される最適化を含めます。推奨事項を評価するには、次の操作を行います。

      • Redis のドキュメントを確認して、コンテキストに推奨される構成を評価します。
      • 次のユースケースと比較して、クラスタで Redis ワークロードがどのように使用されているかを検討します。ユースケースが異なる場合は、推奨される最適化をコンテキストに合わせて調整する必要があります。

      Redis の最適化は、読み取り / 書き込み比率が 4:1(読み取り 4 回、書き込み 1 回)の単一ノードのルックアサイド キャッシュとして使用される Redis 7 インスタンスに対して決定されました。パフォーマンスは 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 ワークロードを以前にデプロイしたことがある場合は、最適化された構成で実行するために、これらのワークロードを再デプロイする必要があります。

次のステップ