במאמר הזה מוסבר איך לשפר את הביצועים של עומסי העבודה ב-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:
כדי ליצור את המניפסטים עם אופטימיזציות לעומס העבודה של 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. מומלץ להשתמש בגרסה 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-
בודקים את ההמלצות ומשנים את המניפסטים כך שיכללו את האופטימיזציות המועדפות. כדי לבדוק את ההמלצות:
- כדאי לעיין במסמכי התיעוד של Redis כדי להעריך את ההגדרות המומלצות בהקשר שלכם.
- חשבו איך עומס העבודה של Redis משמש באשכול שלכם בהשוואה לתרחיש לדוגמה הבא. אם תרחיש השימוש שלכם שונה, יכול להיות שתצטרכו להתאים את האופטימיזציות המומלצות להקשר שלכם.
האופטימיזציות ל-Redis נקבעו למכונה של Redis 7 שמשמשת כמטמון look-aside של צומת יחיד עם יחס קריאה-כתיבה של 4:1 (4 קריאות לכתיבה אחת), כשהביצועים נמדדים באמצעות 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.
כשפורסים את עומס העבודה, האשכול יוצר מאגר צמתים חדש שתואם להגדרות האופטימליות, ומקצה את ה-Pods למאגרי הצמתים האלה.
פודים שכבר קיימים לא משתנים. רק פודים שמפנים להגדרות שעברו אופטימיזציה עוברים אופטימיזציה. אם כבר פרסתם עומסי עבודה של Redis באשכול, תצטרכו לפרוס אותם מחדש כדי להריץ אותם עם ההגדרות המותאמות.
המאמרים הבאים
- מידע נוסף על אופטימיזציה של עומסי עבודה ב-GKE
- איך פורסים אשכול Redis ב-GKE
- מידע נוסף על GKE ComputeClasses
- כדי לבצע אופטימיזציה של עומסי עבודה ב-MySQL, קראו את המאמר אופטימיזציה של ביצועי עומסי עבודה ב-MySQL ב-GKE.