הגדרת זמן קצוב לתפוגה של הפרת PDB

במאמר הזה מוסבר איך להגדיר ערך של זמן קצוב לתפוגה למקרה שריקון הצומת של אשכול מפר את התקציב לשיבוש Pod (PDB).

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

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

הגדרת ערך של זמן קצוב לתפוגה

כל צומת מיוצג על ידי אובייקט Machine.

מציגים ברשימה את אובייקטי המכונות באשכול:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

מחליפים את CLUSTR_KUBECONIFG בנתיב של קובץ ה-kubeconfig של האשכול.

פלט לדוגמה:

my-node-pool-7f864959cd-cw472
my-node-pool-7f864959cd-kh86m
my-node-pool-7f864959cd-wtpvx

פותחים אובייקט של מכונה לעריכה:

kubectl --kubeconfig CLUSTER_KUBECONFIG edit machine MACHINE_NAME

מחליפים את MACHINE_NAME בשם של אובייקט המכונה.

בעורך, מוסיפים את ההערה הבאה:

onprem.cluster.gke.io/pdb-violation-timeout: TIMEOUT

מחליפים את TIMEOUT במחרוזת שמציינת את משך הזמן של זמן קצוב לתפוגה. יחידות הזמן הקבילות הן s,‏ m ו-h. דוגמאות לערכי זמן: ‎1h,‏ ‎1h30m,‏ ‎10m ו-‎100s.

אם מגדירים את ערך הזמן הקצוב לתפוגה כ-"0s", לא יחול אף פעם זמן קצוב לתפוגה על הפרות של כללי המדיניות בנושא PDB. זהה להתנהגות ברירת המחדל.

דוגמה:

apiVersion: cluster.k8s.io/v1alpha1
kind: Machine
metadata:
  annotations:
    kubelet-version: 1.23.5-gke.1502
    onprem.cluster.gke.io/gke-on-prem-version: 1.12.0-gke.430
    vm-ip-address: 203.0.113.2
    onprem.cluster.gke.io/pdb-violation-timeout: "5m"

סוגרים את סשן העריכה.

עדכונים בהדרגה (rolling)

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