הצהרה על יחסי תלות בין אובייקטים של משאבים

במדריך הזה מוסבר איך תלויות פועלות ב-Config Sync ואיך מציינים תלויות משלכם.

‫סנכרון תצורות מזהה באופן אוטומטי תלויות מרומזות בין אובייקטים ספציפיים כשמסנכרנים אותם עם האשכול. לדוגמה, אובייקטים של מרחב שמות תמיד מוחלים לפני כל אובייקט במרחבי השמות האלה, ואובייקט CustomResourceDefinition‏ (CRD) תמיד מוחל לפני כל משאב מותאם אישית מהסוג הזה. באופן דומה, סדר המחיקה הפוך לתלות המרומזת הבאה: מרחבי שמות נמחקים אחרי אובייקטים במרחב השמות הזה, ו-CRD נמחקים אחרי משאבים מותאמים אישית מהסוג הזה.

אפשר גם להגדיר תלות מפורשת באמצעות ההערה depends-on. לדוגמה, יכול להיות שתרצו שמערך StatefulSet של MySQL יופעל לפני פריסת WordPress, כדי שמסד הנתונים יוחל ויהיה מוכן לפני הפעלת WordPress.

דרישות

  • צריך להפעיל את ממשקי ה-API של RootSync ו-RepoSync. אם התקנתם את סנכרון תצורות באופן ידני באמצעות kubectl, ולא הפעלתם את ממשקי ה-API של RootSync ו-RepoSync, אתם צריכים להעביר את אובייקט ConfigManagement.

  • הגבלה: יחסי תלות צריכים להיות באותו מקור אמת כמו התלות שלהם. צריך לנהל את התלויות באמצעות אותו אובייקט RootSync או RepoSync שבו מנוהלים הרכיבים התלויים, כדי לוודא שכל המשאבים נמצאים באותה קבוצת משאבים.

החלת קבוצה

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

הפעלה ותיאום

כשמפעילים אובייקט (כלומר מחילים או מסירים אותו), יכול לעבור זמן מה עד שהבקר שלו יבצע תיאום. לדוגמה, כשמחילים פריסה, יכול להיות שה-Pods הבסיסיים לא יהיו מוכנים באופן מיידי. אחרי שה-Pods הבסיסיים מוכנים, מתבצעת התאמה של ה-Deployment. עבור סוגים שונים של אובייקטים, סנכרון תצורות בודק סוגים שונים של תנאים כדי לוודא שאובייקט מסוים תואם. פרטים נוספים זמינים בכתובת sigs.k8s.io/cli-utils

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

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

הוספת ההערה depends-on לאובייקט

כדי לציין תלות, מוסיפים את ההערה config.kubernetes.io/depends-on לאובייקט התלוי עם ערך שמפנה לאובייקטים של התלות.

בדוגמה של Wordpress, ההערה ב-Wordpress Deployment נראית כך:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  namespace: default
  labels:
    app: wordpress
  annotations:
    config.kubernetes.io/depends-on: apps/namespaces/default/StatefulSet/wordpress-mysql

כש-סנכרון תצורות מחיל את האובייקטים, הוא קודם מחיל את התלות, את האובייקט wordpress-mysql StatefulSet. אחרי שמתבצעת התאמה של יחסי התלות, סנכרון תצורות מחיל את יחסי התלות, את wordpress Deployment (פריסה).

הפניות לאובייקטים

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

  • לאובייקטים עם מרחב שמות:

    GROUP/namespaces/NAMESPACE/KIND/NAME
    
  • לאובייקטים בהיקף אשכול:

    GROUP/KIND/NAME
    

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

    • GROUP: הקבוצה של אובייקט התלות.
    • NAMESPACE: מרחב השמות של אובייקט התלות בהיקף מרחב השמות.
    • KIND: סוג אובייקט התלות. השדה הזה תלוי אותיות רישיות. לדוגמה, צריך להשתמש ב-Pod במקום ב-pod.
    • NAME: השם של אובייקט התלות.

באובייקטים בקבוצת הליבה, נעשה שימוש במחרוזת ריקה במקום זאת, לדוגמה /namespaces/test/Pod/pod-a.

כדי להפריד בין כמה הפניות לאובייקטים, משתמשים ב-,, לדוגמה /namespaces/test/Pod/pod-a,/namespaces/test/Pod/pod-b.