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

כשמנסים לשנות את אשכול 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, נסו שוב לבצע את הפעולה שגרמה לשגיאה.

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