במדריך הזה נסביר איך להתאים את גודל עומסי העבודה (workload) ב-Google Kubernetes Engine (GKE) באמצעות המלצות של VPA ומדדי שימוש.
למה חשוב להתאים את גודל המשאבים
הקצאת משאבים נמוכה מדי עלולה לגרום לכך שלא יהיו לקונטיינרים מספיק משאבים להרצת האפליקציות, והם יהיו איטיים ולא אמינים. הקצאת יתר לא משפיעה על הביצועים של האפליקציות, אבל היא עלולה להגדיל את החיוב החודשי.
בטבלה הבאה מוסברות ההשלכות של הקצאת משאבים נמוכה מדי והקצאת משאבים גבוהה מדי של CPU וזיכרון:
| משאב | סטטוס של ניהול תצורה | סיכון | הסבר |
|---|---|---|---|
| CPU | אובר | עלות | הגדלת העלות של עומסי העבודה על ידי הזמנת משאבים מיותרים. |
| מתחת | ביצועים | יכול לגרום לעומסי עבודה לפעול לאט או להפסיק להגיב. | |
| לא מוגדר | אמינות | יכול להיות שה-CPU יוגבל ל-0, מה שיגרום לעומסי העבודה לא להגיב. | |
| זיכרון | אובר | עלות | הגדלת העלות של עומסי העבודה על ידי הזמנת משאבים מיותרים. |
| מתחת | אמינות | יכול לגרום לסיום של אפליקציות עם שגיאה של חוסר בזיכרון (OOM). | |
| לא מוגדר | אמינות | kubelet יכול להפסיק את ה-Pods שלכם בכל שלב ולסמן אותם כ'נכשלו'. |
מטרות
במדריך הזה תלמדו איך:
- פורסים אפליקציה לדוגמה.
- ייצוא מדדי המלצות ל-GKE מ-Monitoring ל-BigQuery.
- אפשר להשתמש ב-BigQuery וב-Data Studio כדי לראות המלצות לגבי קונטיינרים של GKE בפרויקטים שונים.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
הגדרת הפרויקט
ב-Cloud Shell מותקן מראש התוכנה שדרושה לכם כדי לבצע את ההדרכה הזו, כולל Docker, kubectl, gcloud CLI ו-Terraform.
אם אתם לא משתמשים ב-Cloud Shell, אתם צריכים להתקין את gcloud CLI.
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run ו-Cloud Build:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של שימוש בשירות' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable cloudresourcemanager.googleapis.com
container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run ו-Cloud Build:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של שימוש בשירות' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable cloudresourcemanager.googleapis.com
container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com -
נותנים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/serviceusage.serviceUsageAdmin, roles/container.clusterAdmin, roles/iam.serviceAccountAdmin, roles/iam.securityAdmin, roles/container.admingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
מגדירים את הסביבה
כדי להגדיר את הסביבה, מבצעים את השלבים הבאים
הגדרת משתני סביבה:
export PROJECT_ID=PROJECT_ID export REGION=us-central1 export ZONE=us-central1-f export IMAGE=$REGION-docker.pkg.dev/$PROJECT_ID/main/vpa-recs-image:latestמחליפים את
PROJECT_IDבמזהה הפרויקט. Google Cloudמגדירים את משתני הסביבה שמוגדרים כברירת מחדל:
gcloud config set project $PROJECT_ID gcloud config set compute/region $REGION gcloud config set compute/zone $ZONEמשכפלים את מאגר הקוד.
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesעוברים לספריית העבודה.
cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendations
(אופציונלי) הגדרת אפליקציה לדוגמה
זהו קטע אופציונלי שבו אפשר לפרוס אפליקציה לדוגמה. כדי להשתמש באשכול קיים, צריך לוודא שCloud Monitoring מוגדר באשכול.
כדי לדמות סביבה ריאליסטית, תשתמשו בסקריפט הגדרה כדי לפרוס את Online Boutique.
בשלבים הבאים מוסבר איך להתקין את האפליקציה לדוגמה ולשנות את הגדרות ברירת המחדל. לדוגמה, ההוראות מגדירות את Horizontal Pod Autoscaler (HPA) עבור חלק מעומסי העבודה, ומשנות את בקשות המשאבים והמגבלות.
מריצים את סקריפט ההגדרה:
./scripts/setup.shסקריפט ההגדרה מבצע את הפעולות הבאות:
- יוצרת אשכול GKE.
- פריסת אפליקציית הדוגמה Online Boutique.
- עדכון בקשות למשאבי זיכרון ומעבד (CPU) של Pod.
- הגדרת משאב HorizontalPodAutoscaler עבור
adserviceעומסי העבודה כדי לדמות סביבה מציאותית.
יכול להיות שיחלפו עד 10 דקות עד שסקריפט ההגדרה יושלם.
מוודאים שהאפליקציה לדוגמה מוכנה:
kubectl get deploymentהפלט אמור להיראות כך:
NAME READY UP-TO-DATE AVAILABLE AGE adservice 2/2 2 2 4m54s cartservice 1/1 1 1 4m55s checkoutservice 1/1 1 1 4m56s currencyservice 1/1 1 1 4m55s emailservice 1/1 1 1 4m56s frontend 1/1 1 1 4m55s loadgenerator 1/1 1 1 4m55s paymentservice 1/1 1 1 4m55s productcatalogservice 1/1 1 1 4m55s recommendationservice 1/1 1 1 4m56s redis-cart 1/1 1 1 4m54s shippingservice 1/1 1 1 4m54s
יצירת מאגר
יוצרים את המאגר לאחסון התמונה של כלי הייצוא של המדדים.
יוצרים מאגר Docker חדש:
gcloud artifacts repositories create main --repository-format=docker \ --location=$REGION \ --description="docker repository"הגדרת אימות למאגרי Docker:
gcloud auth configure-docker $REGION-docker.pkg.devמפעילים את הפקודה הבאה כדי לפרוס את האימג':
gcloud builds submit metrics-exporter --region=$REGION --tag $IMAGE
פריסת האפליקציה
בקטע הבא, משתמשים ב-Terraform כדי לבצע את המשימות הבאות:
- יוצרים חשבון שירות ומקצים לו את ההרשאות שנדרשות לניהול משאבים ולביצוע פעולות במשאבים Google Cloud .
- מעניקים לחשבון השירות את התפקידים: בעל הרשאת צפייה בנתוני המעקב, עריכת נתונים ב-BigQuery, בעלות על נתונים ב-BigQuery, משתמש ב-BigQuery לצורך הפעלת משימות ומשתמש ב-Cloud Run לצורך הפעלת שירותים.
- פריסת עבודה (job) ב-Cloud Run ששולפת קובץ אימג' של Docker מ-Artifact Registry ומריצה אותו עם ההגדרה שצוינה.
- יצירת משימה ב-Cloud Scheduler שמפעילה את שירות Cloud Run מדי יום.
- יוצרים מערך נתונים, טבלה ותצוגה ב-BigQuery כדי לאחסן את נתוני המדדים וההמלצות.
הגדרת Terraform
מגדירים משתני סביבה של תצורה:
export TF_VAR_BIGQUERY_DATASET=gke_metrics_dataset export TF_VAR_BIGQUERY_TABLE=gke_metrics export TF_VAR_RECOMMENDATION_WINDOW_SECONDS=1209600 export TF_VAR_RECOMMENDATION_DISTANCE=86400 export TF_VAR_LATEST_WINDOW_SECONDS=600 export TF_VAR_METRIC_WINDOW=259200 export TF_VAR_METRIC_DISTANCE=600הפקודה הזו כוללת את הפריטים הבאים:
-
TF_VAR_BIGQUERY_DATASETו-TF_VAR_BIGQUERY_TABLE: מחזיקים את נתוני המדדים של GKE. -
TF_VAR_RECOMMENDATION_WINDOW_SECONDS: מסגרת הזמן להמלצות VPA. ברירת המחדל היא 1,209,600 שניות, או 14 ימים. -
TF_VAR_RECOMMENDATION_DISTANCE: המרווח שבו מוחזרות נקודות נתונים של המלצות VPA. ברירת המחדל היא 86,400 שניות, או כל יום. -
TF_VAR_LATEST_WINDOW_SECONDS: מסגרת הזמן לקבלת הערכים העדכניים ביותר של משאבים מבוקשים ומשאבי מגבלה. ברירת המחדל היא 600 שניות, או 10 דקות. -
METRIC_WINDOW: מגדיר את מסגרת הזמן למדדי השימוש והניצול של GKE. ברירת המחדל היא 259,200 שניות, או 3 ימים. -
METRIC_DISTANCE: המרווח שבו מוחזרות נקודות הנתונים. ברירת המחדל היא 600 שניות, או כל 10 דקות.
אפשר לשנות את הערכים האלה בהתאם לצרכים של עומסי העבודה. לדוגמה, אם יש לכם עומסי עבודה של אצווה שמופעלים פעם בחודש, צריך לעדכן את
TF_VAR_RECOMMENDATION_WINDOW_SECONDSואתMETRIC_WINDOWל-2592000שניות (30 ימים).-
פריסת התצורה של Terraform
מאתחלים, מאמתים ומחילים את ההגדרות:
terraform -chdir=terraform init terraform -chdir=terraform validate terraform -chdir=terraform apply -var project_id=$PROJECT_ID -var region=$REGION -var image=$IMAGEהפקודה הזו מספקת תוכנית ביצוע ומבקשת את האישור שלכם לפני ביצוע שינויים. בודקים את התוכנית, ואם הכול תקין, מקלידים
yesכדי להמשיך.אחרי שהפקודה apply מסתיימת בהצלחה, המשאבים נוצרים ומנוהלים על ידי Terraform.
מריצים את המשימה ב-Cloud Scheduler באופן ידני:
gcloud scheduler jobs run recommendation-schedule --location ${REGION}
אימות הפריסה
לוחצים על הכרטיסייה יומנים בדף הפרטים של
workload-recommendations.מוודאים שיומני המדדים מעובדים במסוף Cloud Run:
ביומנים מוצגים מדדים שנכתבים ב-BigQuery. הפלט אמור להיראות כך:
INFO - Building Row INFO - Successfully wrote 12 rows to BigQuery table [PROJECT_ID].gke_metric_dataset.gke_metrics. INFO - Run Completedאם הפלט לא תואם, מחכים חמש דקות ומריצים את הפקודה
gcloud scheduler jobs run recommendation-schedule --location $REGION.
הצגת ההמלצה לגבי מאגר התגים ב-BigQuery
נכנסים לדף BigQuery במסוף Google Cloud :
מוודאים שהנתונים מוצגים בטבלה
gke_metricsובתצוגהcontainer_recommendations. בהתאם למספר עומסי העבודה, יכול להיות שיחלפו כמה דקות עד שכל המדדים ייכתבו ב-BigQuery.בעורך השאילתות, בוחרים את כל השורות בתצוגה
container_recommendations:SELECT * FROM `PROJECT_ID.gke_metrics_dataset.container_recommendations`התוכנית הזו מחלצת את המדדים הבאים מ-Cloud Monitoring:
פרטי עומס העבודה: מזהה הפרויקט, שם האשכול, שם הבקר ושם הקונטיינר.
שימוש במעבד (CPU) ובזיכרון וניצול שלהם: כמות המעבד (CPU) והזיכרון שבהם נעשה שימוש בעומס העבודה, וגם אחוז המעבד (CPU) והזיכרון שמנוצלים.
Requested and limits (בקשה ומגבלות): כמות המעבד והזיכרון שהוקצו לעומס העבודה, וגם הכמות המקסימלית של המעבד והזיכרון שמותרת לעומס העבודה.
המלצות לגבי עומס עבודה על המעבד (CPU) והזיכרון: המלצות לגבי כמות המעבד (CPU) והזיכרון שצריך להקצות לעומס העבודה כדי להבטיח שהוא יפעל בצורה חלקה, על סמך המלצות של VPA לגבי פריסות ועל סמך שימוש בפועל ושיעורי ניצול משאבים ללא פריסה.
המחשה ויזואלית של ההמלצות ב-Data Studio
Data Studio היא פלטפורמת בינה עסקית (BI) חינמית בשירות עצמי, שמאפשרת לכם ליצור ולצרוך תרשימים וטבלאות של הנתונים, מרכזי בקרה ודוחות. בעזרת Data Studio תוכלו להתחבר לנתונים, ליצור תצוגות חזותיות ולשתף את התובנות שלכם עם אחרים.
אפשר להשתמש ב-Data Studio כדי להציג את הנתונים בתצוגה חזותית בתצוגה של BigQuery container_recommendations:
- פותחים את Workload Rightsizing dashboard template
- לוחצים על שימוש בנתונים שלי.
- בוחרים את הפרויקט הרצוי.
- בקטע Dataset (מערך נתונים), בוחרים באפשרות
gke_metric_dataset. - בקטע Table (טבלה), בוחרים באפשרות
container_recommendations. - לוחצים על הוספה.
- לוחצים על הוספה לדוח.
פרטי התבנית של Data Studio
בדף הפרטים של תבנית Data Studio מופיע המידע הבא:
- סקירה כללית של התאמת גודל עומס העבודה ב-GKE: סקירה כללית של האשכולות, כולל:
- מספר עומסי העבודה מסוג Best Effort ו-Burstable שעלולים לגרום לבעיות באמינות ובביצועים.
- חיסכון פוטנציאלי במשאבי המעבד (CPU) והזיכרון. ערכים חיוביים מציינים הקצאת יתר, וערכים שליליים מציינים הקצאת חסר.
- המלצות לגבי עומס עבודה: מספק המלצות לגבי בקשות ומגבלות של CPU וזיכרון של עומס עבודה.
- GKE Workloads at Risk: מציג עומסי עבודה שנמצאים בסיכון הגבוה ביותר לחוות בעיות של מהימנות וביצועים.
- History - Workload Rightsizing - How are we doing?: הדוח מספק תצוגה היסטורית של מידת ההצלחה של הטמעה של התאמת גודל עומס העבודה וצמצום מספר עומסי העבודה מסוג Best Effort.
המלצה לגבי בקשת מעבד (CPU) ומגבלת מאגר
אם ערכי המגבלה והבקשה של המעבד עבור עומסי העבודה שווים, איכות השירות נחשבת למובטחת, וההמלצה לגבי המעבד מוגדרת למקסימום בתוך תקופת החלון של 14 ימים. אחרת, נעשה שימוש באחוזון ה-95 של ההמלצה לגבי בקשת מעבד (CPU) תוך 14 ימים.
כשהערכים של בקשת ה-CPU והמגבלה שווים, ההמלצה למגבלת ה-CPU מוגדרת כהמלצה המקסימלית של VPA לבקשת ה-CPU רק לאובייקטים של פריסה, ושימוש ה-CPU מוגדר עם יעד ניצול של 70%. אם הבקשה והמגבלה של עומס העבודה לא זהות, נעשה שימוש ביחס המגבלה הקיים.
המלצה לגבי מאגר הזיכרון המבוקש והמגבלה
ההמלצות לזיכרון מבוססות על ההמלצה המקסימלית של VPA לאובייקטים של פריסות בלבד, ועל השימוש המקסימלי בזיכרון עם יעד ניצול של 80% כדי להבטיח את מהימנות עומסי העבודה. אפשר לעדכן את ערכי היעד של הניצול בשאילתה של התצוגה container_recommendation.
מומלץ להשתמש באותו נפח זיכרון לבקשות ולמגבלות, כי זיכרון הוא משאב שלא ניתן לדחוס. כשנגמר הזיכרון, צריך להשבית את ה-Pod. כדי למנוע את השבתת ה-Pods ולמנוע חוסר יציבות בסביבה, צריך להגדיר את הזיכרון הנדרש למגבלת הזיכרון.
מתן עדיפות להמלצות
לכל שורה מוקצה ערך עדיפות כדי להציג עומסי עבודה שדורשים טיפול מיידי על סמך ההמלצות. יחידות המידה של המעבד והזיכרון שונות. כדי לנרמל את היחידות, נעשה שימוש ביחס בין מעבד (CPU) מוגדר מראש לזיכרון במחיר לפי דרישה של סוג מכונה E2 כקירוב להמרה של יחידות זיכרון ליחידות מעבד.
העדיפות מחושבת לפי הנוסחה הבאה:
priority = (CPU requested - CPU recommendation) + ((memory requested -
memory recommendation) / (vCPUs on-demand pricing /memory on-demand pricing ))
ב-Autopilot, סך המשאבים שנדרשים בהגדרת הפריסה צריך להיות בטווח הערכים המינימליים והמקסימליים הנתמכים.
הצגת המלצות ל-VPA למספר פרויקטים
כדי לראות המלצות לגבי קונטיינרים של VPA בכמה פרויקטים, משתמשים בפרויקט חדש כפרויקט להגדרת היקף.
כשפורסים את הפרויקט הזה בסביבת הייצור, צריך להוסיף את כל הפרויקטים שרוצים לנתח להיקף המדדים של הפרויקט החדש.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
הדרך הקלה ביותר להימנע מחיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
המאמרים הבאים
- מידע נוסף על אופטימיזציה של עלויות ב-GKE זמין במאמר שיטות מומלצות להרצה של אפליקציות Kubernetes שעברו אופטימיזציה של עלויות ב-GKE.
- איך מאיצים את הפעלת האפליקציה באמצעות הגברת מהירות ההפעלה של המעבד
- מידע נוסף על אופטימיזציה של העלויות של האשכול בתקופות של ביקוש נמוך