אופטימיזציה של ביצועי עומסי עבודה של Redis ב-GKE

במאמר הזה מוסבר איך לשפר את הביצועים של עומסי העבודה ב-Redis ב-Google Kubernetes Engine ‏ (GKE), על ידי יצירת הגדרות אופטימליות ברמת האפליקציה וברמת הצומת. למידע נוסף, קראו את המאמר אופטימיזציה של עומסי עבודה ב-GKE.

האופטימיזציות ל-Redis נקבעו למכונה של Redis 7 שמשמשת כמטמון look-aside של צומת יחיד עם יחס קריאה-כתיבה של 4:1 (4 קריאות לכתיבה אחת), כשהביצועים נמדדים באמצעות Memtier 2.2.1. חשבו איך עומס העבודה של Redis משמש באשכול שלכם בהשוואה לתרחיש לדוגמה הזה. אם תרחיש השימוש שלכם שונה, יכול להיות שתצטרכו להתאים את האופטימיזציות המומלצות להקשר שלכם.

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:

  • מפעילים את GKE Recommender API ואת Google Kubernetes Engine API.
  • הפעלת ממשקי ה-API
  • כדי להשתמש ב-Google Cloud CLI למשימה הזו, מתקינים ואז מאתחלים את ה-CLI של gcloud. אם כבר התקנתם את ה-CLI של gcloud, הריצו את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שבגרסאות קודמות של ה-CLI של gcloud אי אפשר להריץ את הפקודות שבמסמך הזה.

דרישות

צריך להשתמש בגרסה ‎1.31.1-gke.12000 או בגרסה חדשה יותר של GKE.

אופטימיזציה לעומסי עבודה של 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. מומלץ להשתמש בגרסה 1.31.1-gke.12000 ומעלה של GKE.
      • ‫MACHINE_TYPE: סוג המכונה הרצוי.

      הדגל --output-path=/tmp/manifests.yaml הוא אופציונלי. אם לא מציינים את הדגל, המניפסטים מודפסים במסוף אבל לא נשמרים בקובץ.

      הפקודה הזו יוצרת קובץ YAML אחד שמכיל שני משאבים ב-Kubernetes:

      • ‫ConfigMap שמציין הגדרת Redis בשם redis.conf.
      • אובייקט ComputeClass. ההגדרה הזו מציינת את המכונות שבהן Redis יפעל, והיא אופציונלית. מידע נוסף על האופן שבו מציינים סוגי מכונות זמין במאמר מידע על ComputeClasses בהתאמה אישית.

      הנה דוגמה למניפסט שנוצר:

      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 שמשמשת כמטמון look-aside של צומת יחיד עם יחס קריאה-כתיבה של 4:1 (4 קריאות לכתיבה אחת), כשהביצועים נמדדים באמצעות 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.

כשפורסים את עומס העבודה, האשכול יוצר מאגר צמתים חדש שתואם להגדרות האופטימליות, ומקצה את ה-Pods למאגרי הצמתים האלה.

פודים שכבר קיימים לא משתנים. רק פודים שמפנים להגדרות שעברו אופטימיזציה עוברים אופטימיזציה. אם כבר פרסתם עומסי עבודה של Redis באשכול, תצטרכו לפרוס אותם מחדש כדי להריץ אותם עם ההגדרות המותאמות.

המאמרים הבאים