במאמר הזה נסביר איך לשפר את הביצועים של עומסי העבודה של 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
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-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
- מידע נוסף על ComputeClasses ב-GKE
- כדי לבצע אופטימיזציה של עומסי עבודה ב-MySQL, אפשר לעיין במאמר אופטימיזציה של ביצועי עומסי עבודה ב-MySQL ב-GKE.