Redis-Arbeitslastleistung in GKE optimieren

In diesem Dokument wird beschrieben, wie Sie die Leistung Ihrer Redis-Arbeitslasten in der Google Kubernetes Engine (GKE) verbessern können, indem Sie optimierte Konfigurationen auf Anwendungs- und Knotenebene generieren. Weitere Informationen finden Sie unter Für Arbeitslasten in GKE optimieren.

Die Optimierungen für Redis wurden für eine Redis 7-Instanz ermittelt, die als Look-Aside-Cache mit einem einzelnen Knoten und einem Lese-Schreib-Verhältnis von 4:1 (4 Lesevorgänge pro Schreibvorgang) verwendet wird. Die Leistung wurde mit Memtier 2.2.1 gemessen. Überlegen Sie, wie die Redis-Arbeitslast in Ihrem Cluster im Vergleich zu diesem Anwendungsfall verwendet wird. Wenn Ihr Anwendungsfall abweicht, müssen die empfohlenen Optimierungen möglicherweise an Ihren Kontext angepasst werden.

Hinweis

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die GKE Recommender API und die Google Kubernetes Engine API.
  • APIs aktivieren
  • Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl gcloud components update ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.

Voraussetzungen

Verwenden Sie die GKE-Version 1.31.1-gke.12000 oder höher.

Für Redis-Arbeitslasten optimieren

Wir empfehlen, einen dedizierten Knotenpool für Ihre Redis-Arbeitslast zu verwenden. Wenn Sie die folgenden Schritte ausführen, wird standardmäßig ein neuer Knotenpool erstellt.

So optimieren Sie die Leistung einer Redis-Arbeitslast:

  1. Erstellen Sie die Manifeste mit Optimierungen für die Redis-Arbeitslast so:

    1. Generieren Sie Manifeste mit empfohlenen Optimierungen, indem Sie den folgenden Befehl ausführen:

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

      Ersetzen Sie Folgendes:

      • CLUSTER_VERSION: die GKE-Version. Empfohlen wird die GKE-Version 1.31.1-gke.12000 oder höher.
      • MACHINE_TYPE: der gewünschte Maschinentyp.

      Das Flag --output-path=/tmp/manifests.yaml ist optional. Wenn er nicht angegeben ist, werden die Manifeste im Terminal ausgegeben, aber nicht in einer Datei gespeichert.

      Mit diesem Befehl wird eine einzelne YAML-Datei mit zwei Kubernetes-Ressourcen generiert:

      • Eine ConfigMap, die eine Redis-Konfiguration mit dem Namen redis.conf angibt.
      • Ein ComputeClass-Objekt. Hier werden die Maschinen angegeben, auf denen Redis ausgeführt werden soll. Dies ist optional. Weitere Informationen zur Angabe von Maschinentypen finden Sie unter Benutzerdefinierte ComputeClasses.

      Hier ein Beispiel für das generierte Manifest:

      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. Prüfen Sie die Empfehlungen und ändern Sie die Manifeste so, dass sie Ihre bevorzugten Optimierungen enthalten. So können Sie die Empfehlungen prüfen:

      • Lesen Sie die Redis-Dokumentation, um die empfohlene Konfiguration für Ihren Kontext zu ermitteln.
      • Überlegen Sie, wie die Redis-Arbeitslast in Ihrem Cluster im Vergleich zum folgenden Anwendungsfall verwendet wird. Wenn Ihr Anwendungsfall anders ist, müssen die empfohlenen Optimierungen möglicherweise an Ihren Kontext angepasst werden.

      Die Optimierungen für Redis wurden für eine Redis 7-Instanz ermittelt, die als Look-Aside-Cache mit einem einzelnen Knoten und einem Lese-Schreib-Verhältnis von 4:1 (4 Lesevorgänge pro Schreibvorgang) verwendet wird. Die Leistung wurde mit Memtier 2.2.1 gemessen.

    3. Bearbeiten Sie die Manifestdatei, wenn Sie die Konfiguration ändern oder ergänzen möchten.

    4. Wenden Sie die Manifeste mit dem folgenden Befehl auf den Cluster an:

      kubectl create -f /tmp/manifests.yaml
      
  2. Stellen Sie einen Pod bereit, der auf die Optimierungen verweist. Beispiel:

    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
    

    Wenden Sie dann das Pod-Manifest auf den Cluster an:

    kubectl apply -f pod.yaml
    
  3. Prüfen Sie, ob Redis die optimierte Konfiguration verwendet. Führen Sie dazu den folgenden Befehl aus, um sicherzustellen, dass Redis die optimierte Konfiguration verwendet:

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

    Die Ausgabe sollte in etwa so aussehen:

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

    Sie können auch den Befehl redis-cli verwenden, um die einzelnen Anweisungen abzufragen, die in der optimierten Konfiguration festgelegt sind, z. B. io-threads.

Wenn Sie die Arbeitslast bereitstellen, erstellt der Cluster einen neuen Knotenpool, der der optimierten Konfiguration entspricht, und weist Ihre Pods diesen Knotenpools zu.

Bereits vorhandene Pods werden nicht geändert. Nur Pods, die auf die optimierten Konfigurationen verweisen, werden optimiert. Wenn Sie zuvor Redis-Arbeitslasten in Ihrem Cluster bereitgestellt haben, müssen Sie diese Arbeitslasten noch einmal bereitstellen, um sie mit den optimierten Konfigurationen auszuführen.

Nächste Schritte