פתרון בעיות בפעולות מקבילות

כשמנסים לשנות את אשכול Google Kubernetes Engine (GKE) או את מאגרי הצמתים שלו, יכול להיות שהפעולה תיחסם באופן זמני כי פעולה אחרת פועלת. הבעיה הזו עלולה לגרום לעיכובים בעדכונים קריטיים, בניהול אשכולות ובפריסת אפליקציות.

בדף הזה מוסבר איך לזהות את הפעולה שמופעלת. הבנת הפעולה הפעילה עוזרת להעריך את העיכוב ולקבוע מתי לנסות שוב לבצע את הפעולה.

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

הסבר על שגיאות שקשורות לפעולות שמתבצעות בו-זמנית

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

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

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

Cluster is running incompatible operation OPERATION_NAME
Cluster is currently being created, deleted, updated or repaired and cannot be updated
Operation OPERATION_NAME is currently ACTIONING cluster CLUSTER_NAME. Please wait and try again once it is done

השגיאות האלה יכולות לכלול את הערכים הבאים:

  • ‫OPERATION_NAME: המזהה הייחודי של פעולה שכבר פועלת באשכול. משתמשים בשם הזה כדי לעקוב אחרי הסטטוס של הפעולה הקיימת שמונעת את התחלת הפעולה החדשה.
  • ‫ACTIONING: הפעולה שמבוצעת באשכול. לדוגמה, Creating או Updating.
  • ‫CLUSTER_NAME: שם האשכול שהפעולה מטרגטת.

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

פתרון שגיאות שקשורות לפעולות בו-זמניות

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

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

     gcloud container operations list \
         --location=LOCATION \
         --filter '(targetLink~/clusters/CLUSTER_NAME$ OR targetLink~/clusters/CLUSTER_NAME/) AND status!=DONE' \
         --format json
    

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

    • ‫LOCATION: האזור או התחום של Compute Engine (לדוגמה, us-central1 או us-central1-a) של האשכול, בהתאם לסוג האשכול (אזורי או של תחום מוגדר).
    • ‫CLUSTER_NAME: שם האשכול שבו הפעולה נכשלה.

      הפלט אמור להיראות כך:

      {
         "name": "operation-0978307200000-00112233-4455-6677-8899-aabbccddeeff",
         "operationType": "UPDATE_CLUSTER",
         "selfLink": "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/operation-0978307200000-00112233-4455-6677-8899-aabbccddeeff",
         "startTime": "2001-01-01T00:00:00.000000000Z",
         "status": "RUNNING",
         "targetLink": "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME/nodePools/NODE_POOL_NAME",
         "zone": "LOCATION"
      }
      

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

      מידע נוסף על השדות האחרים בפלט מופיע במסמכי העזרה בנושא ממשק ה-API של projects.locations.operations.

  2. מחכים שהפעולה תסתיים:

    gcloud container operations wait OPERATION_NAME \
        --location=LOCATION
    

    מחליפים את OPERATION_NAME בשם של פעולה חוסמת מהודעת שגיאה או מהשלב הקודם.

    הפקודה הזו עוקבת אחרי הפעולה ויוצאת כשהיא מסתיימת.

  3. אחרי שהסטטוס של פעולת החסימה הוא DONE, מנסים שוב לבצע את הפעולה שגרמה לשגיאה.

המאמרים הבאים