אסטרטגיית התאמה

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

באמצעות Config Connector, אתם יכולים ליצור ולעדכן משאבים בכל סדר, בלי קשר ליחסי התלות. ‫GKE מעביר את ההגדרה שהצהרתם עליה לכיוון מודל עקביות הדרגתי עם המצב הרצוי.

לדוגמה, אם יוצרים PubSubSubscription לפני PubSubTopic התואם, Config Connector ימתין עד ליצירת הנושא לפני יצירת המינוי המשויך.

משך הזמן שבו ההתקנה של Config Connector נשארת לא עקבית תלוי במספר המשאבים שהוא מנהל ובסוגים שלהם. בדרך כלל השינויים באשכול GKE מתבצעים תוך שניות. עם זאת, הזמן שנדרש ליצירת משאבים משתנה בהתאם לסוג המשאב.Google Cloud לדוגמה, יצירת משאב PubSubTopic בודד אורכת שניות. Google Cloudמשאבים לא מגיעים למצב עקבי עד שהם נוצרים. לדוגמה, כשיוצרים SQLInstance ו-SQLDatabase, המערכת לא עקבית למשך כמה דקות בזמן יצירת מסד הנתונים.

‫GKE ו-Config Connector מבצעים התאמה של כל משאב עם כל עדכון או אחרי תקופת תנודה עם ממוצע שמבוסס על מרווח ברירת המחדל שהוגדר מראש. אפשר למצוא את מרווח ברירת המחדל בהגדרה Config Connector Default Average Reconcile Interval In Seconds (מרווח ברירת המחדל הממוצע של Config Connector לתיאום בשניות) בדף ההפניה של כל משאב. קישורים לכל משאב מופיעים במאמר סקירה כללית של משאבים. אם יש שגיאה בתיאום, Config Connector מנסה שוב עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff), וההשהיה המקסימלית היא שתי דקות. אפשר לראות את השגיאות באירועים של משאב מסוים.

הגדרת מרווח הזמן להתאמה

החל מ-Config Connector 1.102, אפשר להגדיר את מרווח הזמן הממוצע בין סנכרון המשאבים שמנוהלים על ידי Config Connector באמצעות ההערה cnrm.cloud.google.com/reconcile-interval-in-seconds. הערך של ההערה מחליף את ערך ברירת המחדל של 'Config Connector Default Average Reconcile Interval In Seconds' מהדף resource reference. הערך של ההערה צריך להיות מספר שלם לא שלילי שמייצג זמן בשניות. אם הערך מוגדר כ-0, ‏ Config Connector מפסיק ליזום תהליכי סנכרון של המשאב ברגע שהוא מגיע לסטטוס UpToDate.

לדוגמה, אם רוצים ש-Config Connector יבצע התאמה של משאב בתדירות נמוכה יותר כדי להימנע מ Google Cloud בעיות במכסת ה-API, אפשר להגדיר את הערך של מרווח הזמן הממוצע להתאמה ל-1 שעה.

cnrm.cloud.google.com/reconcile-interval-in-seconds: "3600"

אם רוצים ש-Config Connector יבצע התאמה של משאב בתדירות גבוהה יותר כדי לתקן סטיות מוקדם יותר, אפשר להגדיר את ההערה עם ערך קטן.

אפשר להוסיף הערות לכל המשאבים מסוג מסוים שמשתפים את אותו סוג גרסת קבוצה (GVK) באמצעות הסקריפט הבא:

#!/bin/bash

KIND=RESOURCE_KIND
NAMESPACE=RESOURCE_NAMESPACE
ANNOTATION_KEY="cnrm.cloud.google.com/reconcile-interval-in-seconds"
ANNOTATION_VALUE=RECONCILE_INTERVAL

kubectl annotate --overwrite --all ${KIND} ${ANNOTATION_KEY}=${ANNOTATION_VALUE} -n ${NAMESPACE}
echo "Annotation added to all ${KIND} RESOURCE"

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

  • RESOURCE_KIND: סוג המשאב שרוצים להוסיף לו הערה.
  • RESOURCE_NAMESPACE: מרחב השמות שמכיל את המשאבים שרוצים להוסיף להם הערות.
  • RECONCILE_INTERVAL: מרווח ההתאמה בשניות.

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

הגדרת מרווח הזמן של ההתאמה ל-0 היא פעולה בלתי הפיכה. כלומר, שינוי הערך בחזרה למספר שאינו אפס לא יגרום ל-Config Connector לבצע שוב תיאום של המשאב.

אם רוצים לשנות את מרווח ההתאמה ל-0, יש כמה אפשרויות:

  • משנים את מפרט המשאב עם ערך מרווח התיאום כדי להפעיל תיאומים חדשים.
  • מבטלים את המשאב על ידי הגדרת ההערה cnrm.cloud.google.com/deletion-policy: "abandon" ויוצרים מחדש את המשאב עם ערך של מרווח זמן להשוואה שאינו 0.

שדות שניתנים לשינוי אבל לא לקריאה מופעלים רק כשמתבצע שינוי

חלק מממשקי ה-API חושפים שדות שלא ניתן לקרוא, אבל אפשר לשנות אותם (לדוגמה, הסיסמה של משתמש SQL). בגלל שאי אפשר לראות אם השדות האלה שונו, שדות שניתנים לשינוי אבל לא לקריאה מתעדכנים רק כשמשנים את המשאב המותאם אישית.

משאבים לא נוצרים מחדש כשמשנים שדות שלא ניתן לשנות

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

במקרים כאלה, Config Connector פולט אירוע Kubernetes מסוג UpdatedFailed עבור המשאב, במקום ליצור אותו מחדש. לאחר מכן צריך למחוק את המשאב וליצור אותו מחדש.

אירוע לדוגמה:

Warning  UpdateFailed  37m (x643 over 15d)    computeinstance-controller  Update call failed: the desired mutation for the following field(s) is invalid: [bootDisk.0.InitializeParams.0.Image networkInterface.0.NetworkIp]