כאן מוסבר איך לשחזר עומס עבודה מתמונת מצב שמורה של 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 של עומס העבודה. למידע נוסף, קראו את המאמרים הבאים:
ניהול תמונות המצב
כשיוצרים קובץ 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:
מוחקים את ה-Pod:
kubectl delete -f POD_NAME.yamlמחליפים את
POD_NAMEבשם של ה-Pod, לדוגמהmy-app.מצמידים מחדש את הפוד:
kubectl apply -f POD_NAME.yamlכדי לוודא ששחזור תמונת המצב בוצע, בודקים את היומנים:
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