תיקון אוטומטי של צמתים

התכונה 'תיקון אוטומטי של צמתים' עוקבת באופן רציף אחרי התקינות של כל צומת במאגר הצמתים. אם צומת מסוים לא תקין, התכונה 'תיקון אוטומטי של צמתים' מתקנת אותו באופן אוטומטי. התכונה הזו מפחיתה את הסיכוי להפסקות בשירות של אשכולות ולפגיעה בביצועים, ומצמצמת את הצורך בתחזוקה ידנית של האשכולות.

אפשר להפעיל תיקון אוטומטי של צמתים כשיוצרים או מעדכנים מאגר צמתים. שימו לב שאפשר להפעיל או להשבית את התכונה הזו במאגרי צמתים ולא בצמתים ספציפיים.

תנאים לא תקינים של צומת

התיקון האוטומטי של הצמתים בודק את סטטוס התקינות של כל צומת כדי לקבוע אם הוא צריך תיקון. צומת נחשב תקין אם הוא מדווח על סטטוס Ready. אחרת, אם המכשיר מדווח ברציפות על סטטוס לא תקין למשך זמן מסוים, מתחילים בתיקונים.

סטטוס לא תקין יכול לנבוע ממצב NotReady, שזוהה בבדיקות רצופות במשך כ-15 דקות. לחלופין, סטטוס לא תקין יכול להיות תוצאה של נפח אחסון מלא בדיסק האתחול, שזוהה במהלך תקופה של כ-30 דקות.

אפשר לבדוק באופן ידני את אותות התקינות של הצומת בכל שלב על ידי הפעלת הפקודה kubectl get nodes.

אסטרטגיות לתיקון צמתים

תיקון אוטומטי של צמתים מתבצע לפי אסטרטגיות מסוימות כדי להבטיח את התקינות הכללית של האשכול ואת הזמינות של האפליקציות במהלך תהליך התיקון. בקטע הזה מוסבר איך התכונה 'תיקון אוטומטי של צמתים' פועלת בהתאם להגדרות של PodDisruptionBudget, מכבדת את Pod Termination Grace Period ונוקטת באמצעים אחרים שמצמצמים את השיבושים באשכולות בזמן תיקון הצמתים.

הפעלת מצב 'נא לא להפריע' למשך 30 דקותPodDisruptionBudget

אם צריך לתקן צומת, הוא לא מתרוקן ונוצר מחדש באופן מיידי. במקום זאת, התכונה לתיקון אוטומטי של הצומת מכבדת את ההגדרות של PodDisruptionBudget (PDB) למשך עד 30 דקות, ולאחר מכן כל ה-Pods בצומת נמחקים. (הגדרת PDB מגדירה, בין היתר, את המספר המינימלי של רפליקות של Pod מסוים שצריכות להיות זמינות בכל זמן נתון).

התכונה לתיקון אוטומטי של הצמתים מאפשרת ל-Pods להיות מתוזמנים מחדש ומופצים מחדש בצורה בטוחה בצמתים תקינים אחרים באשכול, על ידי כיבוד הערך PodDisruptionBudget למשך כ-30 דקות. כך אפשר לשמור על רמת הזמינות הרצויה של האפליקציה במהלך תהליך התיקון.

אחרי מגבלת הזמן של 30 דקות, התיקון האוטומטי של הצומת ימשיך בתהליך התיקון, גם אם המשמעות היא הפרה של PodDisruptionBudget. אם לא מגדירים מגבלת זמן, תהליך התיקון עלול להיעצר ללא הגבלת זמן אם ההגדרה של PodDisruptionBudget מונעת את ההסרות שנדרשות לתיקון.

התחשבות בתקופת החסד לסיום של Pod

תכונת התיקון האוטומטי של הצומת מכבדת גם תקופת חסד לסיום של Pod של כ-30 דקות. תקופת החסד לסיום הפעלה של Pod מספקת ל-Pods חלון זמן לכיבוי מבוקר במהלך סיום הפעולה. במהלך תקופת החסד, ה-kubelet בצומת אחראי להפעלת משימות ניקוי ולשחרור משאבים שמשויכים ל-Pods בצומת הזה. התכונה 'תיקון אוטומטי של צמתים' מאפשרת ל-kubelet להשלים את הניקוי הזה תוך 30 דקות. אם חולפות 30 דקות, הצומת נאלץ לסיים את הפעולה, גם אם הפודים סיימו את הפעולה בצורה תקינה.

שיטות נוספות לתיקון צמתים

בנוסף, התיקון האוטומטי של הצמתים מטמיע את האסטרטגיות הבאות:

  • אם צריך לתקן כמה צמתים, הם מתוקנים אחד בכל פעם כדי לצמצם את השיבושים באשכול ולהגן על עומסי העבודה.
  • אם משביתים את התיקון האוטומטי של הצומת במהלך תהליך התיקון, התיקונים שכבר מתבצעים ממשיכים עד שהפעולה מצליחה או נכשלת.

איך מפעילים ומשביתים תיקון אוטומטי של צמתים

אפשר להפעיל או להשבית תיקון אוטומטי של צומת כשיוצרים או מעדכנים מאגר צמתים. מפעילים או משביתים את התכונה הזו במאגרי צמתים ולא בצמתים בודדים.

הפעלת תיקון אוטומטי למאגר צמתים חדש

gcloud container aws node-pools create NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --instance-type INSTANCE_TYPE \
   --root-volume-size ROOT_VOLUME_SIZE \
   --iam-instance-profile NODEPOOL_PROFILE \
   --node-version NODE_VERSION \
   --min-nodes MIN_NODES \
   --max-nodes MAX_NODES \
   --max-pods-per-node MAX_PODS_PER_NODE \
   --location GOOGLE_CLOUD_LOCATION \
   --subnet-id NODEPOOL_SUBNET \
   --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
   --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
   --tags "Name=CLUSTER_NAME-NODE_POOL_NAME" \
   --enable-autorepair

מחליפים את מה שכתוב בשדות הבאים:

  • NODE_POOL_NAME: שם שתבחרו למאגר הצמתים. כדי לקבל את השמות של מאגרי הצמתים, מריצים את הפקודה gcloud container aws node-pools list --cluster CLUSTER_NAME --location GOOGLE_CLOUD_LOCATION
  • CLUSTER_NAME: השם של האשכול שאליו רוצים לצרף את מאגר הצמתים
  • INSTANCE_TYPE: סוג מכונת ה-AWS הרצוי למאגר הצמתים הזה – לדוגמה, m5.large
  • ROOT_VOLUME_SIZE: הגודל הרצוי של נפח האחסון הבסיסי של כל צומת, בגיגה-בייט
  • NODEPOOL_PROFILE: פרופיל מופע IAM למכונות וירטואליות במאגר הצמתים
  • NODE_VERSION: גרסת Kubernetes להתקנה בכל צומת במאגר הצמתים (לדוגמה, ‎1.34.1-gke.4700)
  • MIN_NODES: המספר המינימלי של הצמתים שיכולים להיות במאגר הצמתים
  • MAX_NODES: המספר המקסימלי של הצמתים שיכולים להיות במאגר הצמתים
  • MAX_PODS_PER_NODE: המספר המקסימלי של פודים שאפשר ליצור בכל צומת יחיד במאגר
  • GOOGLE_CLOUD_LOCATION: השם של Google Cloud המיקום שממנו ינוהל מאגר הצמתים הזה
  • NODEPOOL_SUBNET: המזהה של רשת המשנה שבה יפעל מאגר הצמתים.
    • לא יכול להיות חפיפה בין טווחי כתובות ה-IP של ה-Pod או השירות של האשכול לבין רשת המשנה של מאגר הצמתים. מידע נוסף על בחירת טווחים של כתובות IP של Pod ושל שירות לאשכול זמין במאמר בחירת טווחי CIDR לאשכול
    • אם רשת המשנה הזו נמצאת מחוץ לבלוק ה-CIDR הראשי של ה-VPC, צריך לבצע כמה שלבים נוספים. מידע נוסף זמין במאמר בנושא קבוצות אבטחה.
  • SSH_KEY_PAIR_NAME: השם של זוג מפתחות ה-SSH ב-AWS שנוצר לגישת SSH (אופציונלי)
  • CONFIG_KMS_KEY_ARN: שם משאב Amazon‏ (ARN) של מפתח AWS KMS שמצפין את נתוני המשתמש

הפעלת תיקון אוטומטי למאגר צמתים קיים

כדי להפעיל תיקון אוטומטי של צמתים במאגר צמתים קיים, מריצים את הפקודה הבאה:

gcloud container aws node-pools update NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --enable-autorepair

מחליפים את מה שכתוב בשדות הבאים:

  • NODE_POOL_NAME: שם ייחודי למאגר הצמתים – לדוגמה, node-pool-1
  • CLUSTER_NAME: השם של האשכול
  • GOOGLE_CLOUD_LOCATION: האזור Google Cloud שמנהל את האשכול

השבתת התיקון האוטומטי של מאגר צמתים קיים

gcloud container aws node-pools update NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --no-enable-autorepair

מחליפים את מה שכתוב בשדות הבאים:

  • NODE_POOL_NAME: שם ייחודי למאגר הצמתים – לדוגמה, node-pool-1
  • CLUSTER_NAME: השם של האשכול
  • GOOGLE_CLOUD_LOCATION: האזור Google Cloud שמנהל את האשכול

שימו לב: ב-GKE ב-AWS, השבתה של תיקון אוטומטי של צמתים מתבצעת בצורה מסודרת. כשמשביתים את התיקון האוטומטי של צמתים במאגר צמתים קיים, GKE on AWS מפעיל פעולה של עדכון מאגר הצמתים. הפעולה ממתינה לסיום של תיקונים קיימים של צמתים לפני שהיא ממשיכה.

בדיקה אם התיקון האוטומטי של הצומת מופעל

מריצים את הפקודה הבאה כדי לבדוק אם תיקון אוטומטי של הצומת מופעל:

gcloud container aws node-pools describe NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION

מחליפים את מה שכתוב בשדות הבאים:

  • NODE_POOL_NAME: שם ייחודי למאגר הצמתים – לדוגמה, node-pool-1
  • CLUSTER_NAME: השם של האשכול
  • GOOGLE_CLOUD_LOCATION: האזור Google Cloud שמנהל את האשכול

היסטוריית התיקונים של הצומת

כדי לראות את היסטוריית התיקונים שבוצעו במאגר צמתים, מריצים את הפקודה הבאה:

gcloud container aws operations list \
   --location GOOGLE_CLOUD_LOCATION \
   --filter="metadata.verb=repair AND metadata.target=projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/awsClusters/CLUSTER_NAME/awsNodePools/NODEPOOL_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • GOOGLE_CLOUD_LOCATION: האזור הנתמך Google Cloud שמנהל את האשכול – לדוגמה, us-west1
  • PROJECT_ID: הפרויקט ב- Google Cloud
  • CLUSTER_NAME: השם של האשכול
  • NODE_POOL_NAME: שם ייחודי למאגר הצמתים – לדוגמה, node-pool-1

סיכום של תקינות מאגר הצמתים

אחרי שמפעילים את התיקון האוטומטי של הצמתים, אפשר ליצור סיכום של תקינות מאגר הצמתים על ידי הפעלת הפקודה הבאה:

gcloud container aws node-pools describe NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION

סיכום תקינות של מאגר צמתים נראה כמו בדוגמה הזו:

{
  "name": "some-np-name",
  "version": "some-version",
  "state": "RUNNING",

  ...

  "errors": [
    {
      "message": "1 node(s) is/are identified as unhealthy among 2 total node(s) in the node pool. No node is under repair."
    }
  ],
}

סיכום תקינות מאגר הצמתים עוזר לכם להבין את המצב הנוכחי של מאגר הצמתים. בדוגמה הזו, הסיכום מכיל הודעת שגיאה שבה מצוין שאחד משני הצמתים במאגר הצמתים לא תקין. הוא גם מדווח שאין כרגע צמתים בתהליך התיקון.