סדרת המדריכים הזו מיועדת לאדמינים ולמפעילים בתחום ה-IT שרוצים לפרוס, להריץ ולנהל סביבות אפליקציות מודרניות שפועלות ב-Google Kubernetes Engine (GKE). בסדרת המדריכים הזו תלמדו איך להגדיר מעקב והתראות, לשנות את גודל עומסי העבודה ולבצע סימולציה של כשל, והכול באמצעות אפליקציית המיקרו-שירותים לדוגמה של Cymbal Bank:
- יצירת אשכול ופריסת אפליקציה לדוגמה
- מעקב באמצעות השירות המנוהל של Google Cloud ל-Prometheus
- התאמת עומסי עבודה (המדריך הזה)
- סימולציה של כשל
- ניהול שינויים מרכזי
סקירה כללית ומטרות
באפליקציה לצרכנים כמו Cymbal Bank, מספר המשתמשים משתנה לעיתים קרובות. האידיאל הוא שהאתר שלכם יוכל להתמודד עם עליות פתאומיות בתנועה בלי להאט או לגרום לבעיות אחרות, אבל בלי שהארגון יצטרך להוציא כסף על משאבי Cloud שהוא לא באמת צריך. פתרון ש Google Cloud מאפשר את זה הוא שינוי גודל אוטומטי.
במדריך הזה נלמד איך להגדיר אשכולות ועומסי עבודה באשכול GKE כדי לשנות את הגודל שלהם באמצעות מדדים מובנים של Kubernetes ומדדים מותאמים אישית מ-Cloud Monitoring ומ-Cloud Trace. תלמדו איך לבצע את המשימות הבאות:
- מפעילים מדדים מותאמים אישית ב-Cloud Monitoring עבור Trace.
- מדדים מותאמים אישית מאפשרים לכם להרחיב את המעקב באמצעות נתוני מעקב נוספים או נתונים חיצוניים שלא קשורים לאשכול Kubernetes, כמו תנועת רשת או קודי תגובה של HTTP.
- מגדירים את Horizontal Pod Autoscaler (HPA), תכונה של GKE שיכולה להגדיל או להקטין באופן אוטומטי את מספר ה-Pods לעומס עבודה, בהתאם למדדים שצוינו.
- מדמים עומס על האפליקציה וצופים בתגובה של המידרוג האוטומטי באשכול ושל Horizontal Pod Autoscaler.
עלויות
אם מפעילים את GKE ומפריסים את אפליקציית הדוגמה Cymbal Bank בסדרת המדריכים הזו, יחויבו עלויות לכל אשכול עבור GKE ב- Google Cloud , כפי שמפורט בדף התמחור, עד להשבתת GKE או למחיקת הפרויקט.
אתם אחראים גם לעלויות אחרות Google Cloud שנובעות מהפעלת אפליקציית הדוגמה Cymbal Bank, כמו חיובים על מכונות וירטואליות של Compute Engine ועל Trace.
לפני שמתחילים
כדי ללמוד איך לשנות את קנה המידה של הפריסות, צריך להשלים את המדריך הראשון כדי ליצור אשכול GKE שמשתמש ב-Autopilot ולפרוס את אפליקציית הדוגמה Cymbal Bank שמבוססת על מיקרו-שירותים.
מומלץ להשלים את סדרת המדריכים הזו לאפליקציות שניתנות להרחבה לפי הסדר. במהלך ההתקדמות בסדרת ההדרכות, תרכשו מיומנויות חדשות ותשתמשו ב Google Cloud מוצרים ובשירותים נוספים.
צריך גם להעניק הרשאות IAM כדי שעומסי העבודה ו-Horizontal Pod Autoscaler יוכלו לכתוב עקבות ולקרוא מדדים בהתאמה אישית:
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/cloudtrace.agent \
--member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
--condition=None
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/monitoring.metricWriter \
--member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
--condition=None
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud .
הגישה הבאה ניתנת לקבוצות Pod שמשתמשות ב-default Kubernetes
ServiceAccount במרחב השמות default:
-
roles/cloudtrace.agent: כתיבת נתוני מעקב כמו מידע על זמן האחזור אל Trace. -
roles/monitoring.metricWriter: כתיבת מדדים ל-Cloud Monitoring.
הגדרת איסוף של מדדים מותאמים אישית
אפשר להגדיר את Horizontal Pod Autoscaler כך שישתמש במדדי CPU וזיכרון בסיסיים מובנים של Kubernetes, או להשתמש במדדים מותאמים אישית מ-Cloud Monitoring, כמו בקשות HTTP לשנייה או כמות ההצהרות SELECT. אפשר להשתמש במדדים מותאמים אישית בלי לבצע שינויים באפליקציה, ולקבל תובנות נוספות לגבי הביצועים הכוללים והצרכים של האפליקציה. במדריך הזה נסביר איך להשתמש במדדים המובְנים ובמדדים מותאמים אישית.
כדי לאפשר ל-Horizontal Pod Autoscaler לקרוא מדדים מותאמים אישית מ-Monitoring, צריך להתקין את המתאם Custom Metrics - Stackdriver Adapter באשכול.
פורסים את המתאם של Stackdriver למדדים מותאמים אישית באשכול:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter.yamlכדי לאפשר למתאם Stackdriver לקבל מדדים בהתאמה אישית מהאשכול, צריך להקצות ל-
custom-metrics-stackdriver-adapterKubernetes ServiceAccount את התפקידroles/monitoring.viewerבאמצעות איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter" \ --role=roles/monitoring.viewer \ --condition=None
הגדרת Horizontal Pod Autoscaler
יש כמה דרכים שבהן אפשר להרחיב את GKE Autopilot. במדריך הזה נסביר איך אפשר לשנות את גודל האשכול בשיטות הבאות:
- Horizontal Pod Autoscaler (HPA): משנה את מספר ה-Pods של עומס עבודה.
- התאמה אוטומטית של גודל האשכול: משנה את גודל המשאבים של הצמתים שזמינים באשכול.
שתי השיטות האלה יכולות לפעול יחד, כך שככל שמספר ה-Pods של האפליקציות משתנה, משתנים גם משאבי הצומת שנדרשים לתמיכה ב-Pods האלה.
יש גם יישומים אחרים שזמינים להרחבת Pods שמבוססים על Horizontal Pod Autoscaler, ואפשר גם להשתמש ב-Vertical Pod Autoscaler כדי לשנות את בקשות המעבד והזיכרון של Pod במקום את מספר ה-Pods.
במדריך הזה נלמד איך להגדיר את הכלי Horizontal Pod Autoscaler עבור userserviceפריסה באמצעות מדדים מובנים, ועבור frontendפריסה באמצעות מדדים מותאמים אישית.
באפליקציות שלכם, כדאי לעבוד עם מפתחי האפליקציות ומהנדסי הפלטפורמה כדי להבין את הצרכים שלהם ולהגדיר את הכללים של Horizontal Pod Autoscaler (HPA).
שינוי הגודל של פריסת userservice
ככל שמספר המשתמשים באפליקציית הדוגמה Cymbal Bank גדל, כך שירות userservice צורך יותר משאבי CPU. משתמשים באובייקט HorizontalPodAutoscaler כדי לקבוע איך האפליקציה תגיב לטעינה. במניפסט YAML של HorizontalPodAutoscaler, מגדירים את הפריסה שצריך לשנות את הגודל שלה באמצעות Horizontal Pod Autoscaler, את המדדים שצריך לעקוב אחריהם ואת המספר המינימלי והמקסימלי של רפליקות שרוצים להריץ.
בודקים את המניפסט לדוגמה
HorizontalPodAutoscalerשלuserserviceDeployment:קובץ המניפסט הזה:
- ההגדרה הזו קובעת את המספר המקסימלי של העותקים במהלך הגדלה עד
50. - המספר המינימלי של מכונות במהלך הקטנת הקיבולת נקבע כ-
5. - משתמש במדד מובנה של Kubernetes כדי לקבל החלטות לגבי שינוי גודל. בדוגמה הזו, המדד הוא ניצול המעבד (CPU), וניצול היעד הוא 60%, כדי להימנע מניצול יתר ומתת-ניצול.
- ההגדרה הזו קובעת את המספר המקסימלי של העותקים במהלך הגדלה עד
החלת המניפסט על האשכול:
kubectl apply -f extras/postgres-hpa/hpa/userservice.yaml
שינוי הגודל של פריסת frontend
בקטע הקודם הגדרתם את Horizontal Pod Autoscaler ב-userservice Deployment על סמך מדדי Kubernetes מובנים לניצול CPU. בפריסה frontend, יכול להיות שתרצו להגדיל את הקיבולת לפי מספר בקשות ה-HTTP הנכנסות. בגישה הזו נעשה שימוש במתאם Stackdriver כדי לקרוא מדדים מותאמים אישית מ-Monitoring לאובייקט Ingress של מאזן עומסים מסוג HTTP(S).
בודקים את
HorizontalPodAutoscalerהמניפסט שלfrontendהפריסה:קובץ המניפסט הזה כולל את השדות הבאים:
-
spec.scaleTargetRef: משאב ב-Kubernetes לשינוי גודל. -
spec.minReplicas: מספר העותקים המינימלי, שהוא5בדוגמה הזו. -
spec.maxReplicas: המספר המקסימלי של העותקים, שהוא25בדוגמה הזו. -
spec.metrics.*: המדד שבו רוצים להשתמש. בדוגמה הזו, זהו מספר בקשות ה-HTTP לשנייה, שהוא מדד בהתאמה אישית מ-Monitoring שסופק על ידי המתאם שפרסתם. -
spec.metrics.external.metric.selector.matchLabels: תווית המשאב הספציפית שרוצים לסנן כשמשנים את קנה המידה.
-
מאתרים את השם של כלל ההעברה מהקטע
frontendIngress load balancer:export FW_RULE=$(kubectl get ingress frontend -o=jsonpath='{.metadata.annotations.ingress\.kubernetes\.io/forwarding-rule}') echo $FW_RULEהפלט אמור להיראות כך:
k8s2-fr-j76hrtv4-default-frontend-wvvf7381מוסיפים את כלל ההעברה למניפסט:
sed -i "s/FORWARDING_RULE_NAME/$FW_RULE/g" "extras/postgres-hpa/hpa/frontend.yaml"הפקודה הזו מחליפה את
FORWARDING_RULE_NAMEבכלל ההעברה ששמרתם.החלת המניפסט על האשכול:
kubectl apply -f extras/postgres-hpa/hpa/frontend.yaml
סימולציה של עומס
בקטע הזה, משתמשים בכלי ליצירת עומס כדי לדמות עליות פתאומיות בתנועה, ומתבוננים במספר העותקים ובמספר הצמתים שגדלים כדי להתאים לעומס המוגבר לאורך זמן. אחר כך אפשר להפסיק ליצור תנועה ולראות את מספר העותקים והצמתים מצטמצם בתגובה.
לפני שמתחילים, בודקים את הסטטוס של Horizontal Pod Autoscaler (HPA) ואת מספר הרפליקות שבשימוש.
קבלת המצב של משאבי
HorizontalPodAutoscaler:kubectl get hpaהפלט אמור להיראות כך, ולציין שיש רפליקה אחת של
frontendו-5 רפליקות שלuserservice:NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE frontend Deployment/frontend <unknown>/5 (avg) 5 25 1 34s userservice Deployment/userservice 0%/60% 5 50 5 4m56sהאפליקציה לדוגמה Cymbal Bank כוללת שירות
loadgenerator. השירות הזה שולח באופן רציף בקשות שמחקות משתמשים לקצה הקדמי, ויוצר מדי פעם חשבונות חדשים ומדמה עסקאות ביניהם.חשיפת ממשק האינטרנט
loadgeneratorבאופן מקומי. משתמשים בממשק הזה כדי לדמות עומס על האפליקציה לדוגמה של Cymbal Bank:kubectl port-forward svc/loadgenerator 8080אם מופיעה הודעת שגיאה, נסו שוב כשה-Pod פועל.
בדפדפן במחשב, פותחים את ממשק האינטרנט של מחולל העומסים:
- אם אתם משתמשים במעטפת מקומית, פותחים דפדפן ועוברים אל http://127.0.0.1:8080.
- אם אתם משתמשים ב-Cloud Shell, לוחצים על Web preview ואז על Preview on port 8080.
בממשק האינטרנט של מחולל העומסים, אם הערך של Failures הוא
100%, צריך לבצע את השלבים הבאים כדי לעדכן את הגדרות הבדיקה:- לוחצים על הלחצן עצירה לצד מונה שיעור הכשלים.
- בקטע סטטוס, לוחצים על האפשרות בדיקה חדשה.
- מעדכנים את הערך של Host לכתובת ה-IP של הכניסה ל-Cymbal Bank.
- לוחצים על התחלת ההתגודדות.
בממשק האינטרנט של מחולל העומסים, לוחצים על הכרטיסייה Charts כדי לראות את הביצועים לאורך זמן. בודקים את מספר הבקשות ואת ניצול המשאבים.
פותחים חלון טרמינל חדש וצופים במספר העותקים של הפודים
frontendו-userservice:kubectl get hpa -wמספר העותקים גדל ככל שהעומס גדל. יכול להיות שיחלפו כעשר דקות עד שהפעולות של הגדלת הקיבולת יתבצעו, כי האשכול מזהה שהמדדים שהוגדרו מגיעים לסף המוגדר, ומשתמש ב-Horizontal Pod Autoscaler כדי להגדיל את מספר ה-Pods.
בדוגמה הבאה של פלט אפשר לראות שמספר הרפליקות גדל בזמן שהכלי ליצירת עומס פועל:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS frontend Deployment/frontend 5200m/5 (avg) 5 25 13 userservice Deployment/userservice 71%/60% 5 50 17פותחים חלון טרמינל נוסף ובודקים את מספר הצמתים באשכול:
gcloud container clusters list \ --filter='name=scalable-apps' \ --format='table(name, currentMasterVersion, currentNodeVersion, currentNodeCount)' \ --location="CONTROL_PLANE_LOCATION"מחליפים את
CONTROL_PLANE_LOCATIONבמיקום של Compute Engine במישור הבקרה של האשכול. מציינים אזור לאשכולות אזוריים או אזור לאשכולות אזוריים.מספר הצמתים גדל גם הוא מהכמות ההתחלתית כדי להתאים את עצמו לשכפולים החדשים. העלייה הזו במספר הצמתים מתאפשרת על ידי GKE Autopilot. לא צריך להגדיר שום דבר לגבי שינוי הגודל של הצומת הזה.
פותחים את הממשק של מחולל העומסים ולוחצים על Stop (הפסקה) כדי לסיים את הבדיקה.
בודקים שוב את מספר העותקים ואת מספר הצמתים, ורואים שהמספרים קטנים יותר בעקבות העומס המופחת. יכול להיות שיעבור זמן עד שההקטנה תתבצע, כי חלון הייצוב שמוגדר כברירת מחדל עבור רפליקות במשאב
HorizontalPodAutoscalerשל Kubernetes הוא חמש דקות.
בסביבה אמיתית, גם מספר הצמתים וגם מספר ה-Pods בסביבה יגדלו או יקטנו באופן אוטומטי, כמו במקרה של העומס המדומה הזה. אפליקציית הדוגמה Cymbal Bank מיועדת להתאים לסוג כזה של שינוי גודל. כדאי לבדוק עם מפעילי האפליקציות, עם צוות ה-SRE (הנדסת אמינות אתרים) או עם מפתחי האפליקציות אם עומסי העבודה שלהם יכולים להפיק תועלת מתכונות ההתאמה האלה.
הסרת המשאבים
ההדרכות של Cymbal Bank מיועדות להשלמה אחת אחרי השנייה. במהלך ההתקדמות בסדרת ההדרכות, תרכשו מיומנויות חדשות ותשתמשו במוצרים ובשירותים נוספים Google Cloud .
אם אתם רוצים לקחת הפסקה לפני שתמשיכו למדריך הבא, ולא רוצים לצבור חיובים ב Google Cloud חשבון שלכם על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שיצרתם.
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
במדריך הבא מוסבר איך מדמים כשל ב-GKE.