שחזור עומס עבודה מתמונת מצב של Pod

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

לפני שמתחילים

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

  • מפעילים את Google Kubernetes Engine API.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-Google Cloud CLI למשימה הזו, מתקינים ואז מאתחלים את ה-CLI של gcloud. אם כבר התקנתם את ה-CLI של gcloud, הריצו את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שבגרסאות קודמות של ה-CLI של gcloud אי אפשר להריץ את הפקודות שבמסמך הזה.

ניהול תמונות המצב

כשיוצרים קובץ snapshot של Pod, נוצר משאב בהתאמה אישית מסוג PodSnapshot כדי לשמור את המצב של ה-Pod באותו זמן. השדה status של המשאב הזה מציין אם פעולת ה-snapshot הצליחה ואם ה-snapshot זמין לשחזורים.

כדי להציג את כל המשאבים של PodSnapshot במרחב שמות, מריצים את הפקודה הבאה:

kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE

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

NAME                                   STATUS                  POLICY           AGE
de334898-1e7a-4cdb-9f2e-7cc2181c29e4   AllSnapshotsAvailable   example-policy   47h

שחזור עומס עבודה מתמונת מצב

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

בשלבים הבאים מוסבר איך לשחזר Pod מתמונת מצב תואמת על ידי מחיקה ופריסה מחדש של ה-Pod:

  1. מוחקים את ה-Pod:

    kubectl delete -f POD_NAME.yaml
    

    מחליפים את POD_NAME בשם של ה-Pod, לדוגמה my-app.

  2. מצמידים מחדש את הפוד:

    kubectl apply -f POD_NAME.yaml
    
  3. כדי לוודא ששחזור תמונת המצב בוצע, בודקים את היומנים:

    kubectl logs my-app --namespace NAMESPACE
    

    הפלט תלוי באופן שבו הגדרתם את האפליקציה. באפליקציית Python לדוגמה, היומנים מציגים את הערך GKE Pod Snapshot: restore כשמתרחשת פעולת שחזור.

שחזור מתמונת מצב ספציפית

כברירת מחדל, GKE משחזר עומסי עבודה מהמשאב PodSnapshot הכי עדכני שתואם ל-Pod. כשנוצרת תמונת מצב, GKE יוצר באופן אוטומטי שם ייחודי (UUID) למשאב PodSnapshot, שאפשר לראות על ידי הפעלת kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.

כדי לשחזר עומס עבודה ממשאב PodSnapshot ישן יותר או ספציפי, מוסיפים את ההערה podsnapshot.gke.io/ps-name למפרט ה-Pod של עומס העבודה, ומציינים את שם המשאב PodSnapshot שבו רוצים להשתמש כדי לשחזר את עומס העבודה:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
  namespace: NAMESPACE
  labels:
    app: my-app
  annotations:
    podsnapshot.gke.io/ps-name: "POD_SNAPSHOT_NAME"
spec:
  serviceAccountName: KSA_NAME
  runtimeClassName: gvisor
  containers:
  ...

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

  • ‫POD_SNAPSHOT_NAME: שם קובץ ה-snapshot שרוצים לשחזר ממנו. כדי לקבל את שמות הסנאפשוטים, מריצים את הפקודה kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.
  • ‫NAMESPACE: מרחב השמות של ה-Pod.
  • ‫KSA_NAME: השם של ה-KSA.

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

התאמה ותאימות של תמונות מצב

כש-GKE משחזר Pod מתמונת מצב, הוא צריך לקבוע איזו תמונת מצב תואמת. התאימות נקבעת לפי כללים כמו סדר הבחירה, קריטריונים להתאמה (על סמך ההיקף של whole-pod לעומת rootfs-only) והתאמה של כללי הקיבוץ.

במאמר התאמה ותאימות של קובץ Pod snapshot מפורט מידע על דרישות ההתאמה, הקריטריונים לתאימות ושדות המפרט שמשפיעים על התאימות.

השבתת תמונות המצב

הסרת ה-CRD של PodSnapshotPolicy מונעת את האפשרות ליצור תמונת מצב של Pods ולשחזר אותם. פודים שפועלים לא מושפעים ממחיקת המשאבים. אבל אם תמחקו את המדיניות בזמן ש-Pod נשמר או משוחזר, יכול להיות שה-Pod ייכנס למצב של כשל.

כדי להשבית את היצירה והשחזור של קובצי snapshot לפודים חדשים שכפופים למדיניות, מוחקים את PodSnapshotPolicy באמצעות הפקודה הבאה:

kubectl delete podsnapshotpolicies.podsnapshot.gke.io SNAPSHOT_POLICY --namespace=NAMESPACE

מחליפים את SNAPSHOT_POLICY בשם של PodSnapshotPolicy שרוצים למחוק, לדוגמה example-pod-snapshot-policy.

אפשר גם למחוק משאב PodSnapshot ספציפי כדי שה-Pods לא ישוחזרו יותר מאותו קובץ snapshot ספציפי. מחיקת המשאב PodSnapshot מסירה גם את הקבצים שמאוחסנים ב-Cloud Storage.

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

kubectl delete podsnapshots.podsnapshot.gke.io POD_SNAPSHOT_NAME --namespace=NAMESPACE

מחליפים את POD_SNAPSHOT_NAME בשם של קובץ ה-snapshot שרוצים למחוק, לדוגמה example-podsnapshot.

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

פתרון בעיות בתמונות מצב של Pod