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

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

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

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

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

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

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

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

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

הפעלת PodDisruptionBudget למשך 30 דקות

אם צריך לתקן צומת, הוא לא מתרוקן ונוצר מחדש באופן מיידי. במקום זאת, התכונה לתיקון אוטומטי של הצומת מכבדת את ההגדרות של 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: הגודל הרצוי של נפח האחסון הבסיסי של כל צומת, ב-GB
  • ‫NODEPOOL_PROFILE: פרופיל מופע IAM למכונות וירטואליות במאגר הצמתים
  • ‫NODE_VERSION: גרסת Kubernetes להתקנה בכל צומת במאגר הצמתים (לדוגמה, ‎1.35.3-gke.300)
  • ‫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 ב-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."
    }
  ],
}

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