כדי לשנות את גודל עומסי העבודה ב-GKE ב-AWS, אתם יכולים להגדיר את ה-AWSNodePools כך שהגודל שלהם ישתנה אוטומטית, או ליצור ולמחוק AWSNodePools באופן ידני כדי להגדיל או להקטין את הגודל.
Cluster Autoscaler
GKE ב-AWS מטמיע את המידרוג האוטומטי של אשכולות ב-Kubernetes. כשהביקוש לצמתים גבוה, Cluster Autoscaler מוסיף צמתים למאגר הצמתים. כשהביקוש נמוך, Cluster Autoscaler מצמצם את גודל האשכול לגודל מינימלי שאתם מגדירים. כך תוכלו להגדיל את הזמינות של עומסי העבודה כשאתם צריכים אותם, תוך שליטה בעלויות.
סקירה כללית
הכלי Cluster Autoscaler משנה באופן אוטומטי את מספר הצמתים במאגר צמתים נתון, בהתאם לדרישות של עומסי העבודה. אתם לא צריכים להוסיף או להסיר צמתים באופן ידני או להקצות יותר מדי משאבים למאגרי הצמתים. במקום זאת, מציינים גודל מינימלי ומקסימלי למאגר הצמתים, והקלאסטר מתרחב אוטומטית.
אם משאבים נמחקים או מועברים במהלך התאמה אוטומטית לעומס של האשכול, יכול להיות שיהיו שיבושים זמניים בעומסי העבודה. לדוגמה, אם עומס העבודה שלכם מורכב מרפליקה יחידה, יכול להיות שה-Pod של הרפליקה יתוזמן מחדש לצומת אחר אם הצומת הנוכחי שלו יימחק. לפני שמפעילים את Cluster Autoscaler ב-AWSNodePool, צריך לתכנן את עומסי העבודה כך שיוכלו להתמודד עם שיבושים פוטנציאליים, או לוודא שלא יהיו הפרעות לפודים קריטיים.
איך פועל המידרוג האוטומטי של האשכול
מידרוג אוטומטי של אשכול פועל על בסיס מאגר צמתים. כשיוצרים מאגר צמתים, מציינים גודל מינימלי ומקסימלי למאגר הצמתים במשאב Kubernetes AWSNodePool.
כדי להשבית את המידרוג האוטומטי באשכול, צריך להגדיר את spec.minNodeCount לערך spec.maxNodeCount ב-AWSNodePools.
הכלי Cluster Autoscaler מגדיל או מקטין את הגודל של מאגר הצמתים באופן אוטומטי, על סמך בקשות המשאבים (ולא על סמך ניצול המשאבים בפועל) של ה-Pods שפועלים בצמתים של מאגר הצמתים הזה. הוא בודק מעת לעת את הסטטוס של ה-Pods והצמתים, ופועל בהתאם:
אם אי אפשר לתזמן את הפודים כי אין מספיק צמתים במאגר הצמתים, Cluster Autoscaler מוסיף צמתים עד לגודל המקסימלי של מאגר הצמתים. אם הצמתים לא מנוצלים מספיק, ואפשר לתזמן את כל ה-Pods גם עם פחות צמתים במאגר הצמתים, Cluster Autoscaler מסיר צמתים, עד לגודל המינימלי של מאגר הצמתים. אם אי אפשר לנקז את הצומת בצורה תקינה אחרי תקופת המתנה (10 דקות), הצומת מסתיים בכפייה. אי אפשר להגדיר את תקופת החסד.
אם ה-Pods שלכם ביקשו מעט מדי משאבים (לדוגמה, אם ערכי ברירת המחדל לא מספיקים), Cluster Autoscaler לא יתקן את המצב. כדי לוודא שהמידרוג האוטומטי של האשכול פועל בצורה מדויקת ככל האפשר, מומלץ ליצור בקשות מתאימות למשאבים לכל עומסי העבודה.
קריטריונים להפעלה
ההנחות הבאות מבוססות על המידרוג האוטומטי של האשכול כשמשנים את הגודל של מאגר צמתים:
אפשר להפעיל מחדש את כל ה-Pods המשוכפלים בצומת אחר, מה שעשוי לגרום לשיבוש קצר. אם השירותים שלכם לא יכולים לסבול שיבושים, לא מומלץ להשתמש ב-Cluster Autoscaler.
לכל הצמתים במאגר צמתים יחיד יש את אותו סט של תוויות.
אם יש לכם AWSNodePools עם סוגים שונים של מופעים, Cluster Autoscaler לוקח בחשבון את העלות היחסית של הפעלת צמתים חדשים ומנסה להרחיב את מאגר הצמתים הכי זול.
תוויות שנוספו ידנית אחרי היצירה הראשונית של אשכול או מאגר צמתים לא נכללות במעקב. לצמתים שנוצרו על ידי Cluster Autoscaler מוקצות תוויות שצוינו באמצעות --node-labels בזמן יצירת מאגר הצמתים.
שינוי הגודל של מאגר צמתים
AWSNodePool כולל את השדות minNodeCount ו-maxNodeCount. בשדות האלה מצהירים על מספר מינימלי ומספר מקסימלי של צמתי עובדים במאגר. אפשר לערוך את הערכים האלה לפני או אחרי שיוצרים את ה-AWSNodePool.
לפני שמתחילים
מפעילים אשכול באמצעות ההוראות במאמר יצירת אשכול משתמשים. קובץ ה-YAML (לדוגמה, cluster-0.yaml) שיוצר את האשכול זמין.
הפעלת שינוי גודל אוטומטי של מאגר צמתים
בספרייה של
anthos-aws, משתמשים ב-anthos-gkeכדי להעביר את ההקשר לשירות הניהול.cd anthos-aws anthos-gke aws management get-credentials
כדי להפעיל את המידרוג האוטומטי של האשכול, עורכים את המניפסט של ה-AWSNodePool. עורכים את הקובץ
cluster-0.yamlומחפשים את הקטע AWSNodePool. משנים את הערכים שלspec.minNodeCountושלspec.maxNodeCount.בדוגמה שלמטה, הגודל המינימלי של מאגר הצמתים הזה הוא
3צמתים, אבל מופעלת התכונה 'מידרוג אוטומטי של אשכולות' כדי להגדיל את הגודל ל-10צמתים.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: cluster-0-pool-0 spec: clusterName: cluster-0 version: 1.25.5-gke.2100 minNodeCount: 3 maxNodeCount: 10 ...בשלב הבא, מחילים את קובץ ה-YAML כדי לשנות את הגודל של מאגר הצמתים.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yamlהמשאב AWSNodePool יעבור למצב
Resizing. כשהשינוי של גודל ה-AWSNodePool מסתיים, הוא עובר למצבProvisioned.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePoolsהפלט מראה שה-AWSNodePool הוא
Resizing. פעולות שינוי הגודל נמשכות כמה דקות.NAME CLUSTER STATE AGE VERSION cluster-0-pool-0 cluster-0 Resizing 3h 1.25.5-gke.2100
יצירה ידנית של AWSNodePool חדש
אפשר גם להגדיל את האשכול על ידי יצירת AWSNodePools חדשים. כשיוצרים AWSNodePool חדש, אפשר גם להגדיל או להקטין את גודלי המופעים.
אפשר לאחזר את מניפסט ההגדרה של AWSNodePool קיים באמצעות
kubectl get.env HTTPS_PROXY=http://localhost:8118 \ kubectl get awsnodepool cluster-0-pool-0 -o yaml > new_nodepool.yamlעורכים את
new_nodepool.yamlומסירים את הקטעים שלא מופיעים בדוגמה הבאה. שומרים את הקובץ.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: NODE_POOL_NAME spec: clusterName: AWSCLUSTER_NAME version: CLUSTER_VERSION # latest version is 1.25.5-gke.2100 region: AWS_REGION subnetID: AWS_SUBNET_ID minNodeCount: MINIMUM_NODE_COUNT maxNodeCount: MAXIMUM_NODE_COUNT maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT instanceType: AWS_NODE_TYPE keyName: KMS_KEY_PAIR_NAME iamInstanceProfile: NODE_IAM_PROFILE proxySecretName: PROXY_SECRET_NAME rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: VOLUME_TYPE # Optional iops: IOPS # Optional kmsKeyARN: NODE_VOLUME_KEY # Optionalכדי ליצור AWSNodePool חדש, מחילים את המניפסט על אשכול הניהול.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f new_nodepool.yaml
המאמרים הבאים
פריסת שירות שמגובה על ידי Ingress.
אפשרויות נוספות מפורטות במאמרי העזרה בנושא AWSNodePool.