בדף הזה מוסבר איך סנכרון תצורות קורא הגדרות ממקור אמת היררכי ומחיל את ההגדרה שמתקבלת על האשכולות באופן אוטומטי.
מומלץ להשתמש במקור אמת לא מובנה במקום בהיררכיה, כי הוא מספק את אותן יכולות ליבה, אבל מאפשר גמישות רבה יותר בארגון המשאבים. אם אתם כבר משתמשים במקור אמת היררכי, אתם יכולים להמיר אותו למקור אמת לא מובנה.
כדי להבין איך סנכרון תצורות משתמש במאגר היררכי, כדאי להכיר מאגרי Git ואת ממשק שורת הפקודה git.
אפשר לראות דוגמה לארגון ולהגדרה של מקור אמת היררכי במאגר הדוגמאות של סנכרון תצורות.
המבנה של הספרייה
במקורות היררכיים, סנכרון תצורות משתמש במבנים דמויי מערכת קבצים, ובספרייה כדי לקבוע לאילו אשכולות או מרחבי שמות הגדרה רלוונטית.
namespaces/
הספרייה namespaces/ מכילה הגדרות של מרחבי שמות ואובייקטים בהיקף מרחב השמות. המבנה בתוך namespaces/ הוא המנגנון שמניע את הורשת מרחב השמות.
כדי להגביל את מרחבי השמות שיכולים לרשת הגדרה, אפשר להשתמש ב-NamespaceSelector.
cluster/
הספרייה cluster/ מכילה הגדרות שחלות על אשכולות שלמים, ולא על מרחבי שמות. כברירת מחדל, כל הגדרה בספרייה cluster/ חלה על כל אשכול שרשום ב-סנכרון תצורות. כדי להגביל את האשכולות שההגדרה יכולה להשפיע עליהם, אפשר להשתמש ב-ClusterSelector.
clusterregistry/
הספרייה clusterregistry/ היא אופציונלית, והיא מכילה הגדרות של ClusterSelectors.
האפשרות ClusterSelectors מגבילה את האשכולות שההגדרה חלה עליהם, והיא מופיעה בהגדרות שנמצאות בספריות cluster/ ו-namespaces/.
system/
הספרייה system/ מכילה הגדרות אופרטור.
דוגמה למקור מידע אמין היררכי
מבנה הספרייה הבא מדגים איך להשתמש במקור אמת היררכי של סנכרון תצורות כדי להגדיר אשכול Kubernetes שמשותף לשתי קבוצות שונות, team-1 ו-team-2.
- לכל צוות יש מרחב שמות משלו ב-Kubernetes, חשבון שירות משלו ב-Kubernetes, מכסות משאבים, כללי מדיניות לגבי רשתות והקצאות תפקידים.
- אדמין של האשכול מגדיר מדיניות ב-
namespaces/limit-range.yamlכדי להגביל את הקצאות המשאבים (ל-Pods או לקונטיינרים) בשני מרחבי השמות. - אדמין האשכול גם מגדיר ClusterRoles ו-ClusterRoleBindings.
מקור הנתונים ההיררכי של סנכרון תצורות צריך לכלול שלוש תיקיות משנה: cluster/, namespaces/ ו-system/.
הספרייה cluster/ מכילה הגדרות שחלות על אשכולות שלמים (כמו ClusterRole, ClusterRoleBinding), ולא על מרחבי שמות.
הספרייה namespaces/ מכילה הגדרות לאובייקטים של מרחב השמות ולאובייקטים בהיקף מרחב השמות. כל ספריית משנה ב-namespaces/ כוללת את ההגדרות של אובייקט מרחב שמות ושל כל האובייקטים בהיקף מרחב השמות שמתחת למרחב השמות. השם של ספריית משנה צריך להיות זהה לשם של אובייקט מרחב השמות. אפשר להוסיף אובייקטים בהיקף מרחב שמות שצריך ליצור בכל מרחב שמות ישירות מתחת ל-namespaces/ (לדוגמה, namespaces/limit-range.yaml).
הספרייה system/ מכילה הגדרות אופרטור לניהול הגדרות.
├── cluster
│ ├── clusterrolebinding-namespace-reader.yaml
│ ├── clusterrole-namespace-reader.yaml
│ ├── clusterrole-secret-admin.yaml
│ └── clusterrole-secret-reader.yaml
├── namespaces
│ ├── limit-range.yaml
│ ├── team-1
│ │ ├── namespace.yaml
│ │ ├── network-policy-default-deny-egress.yaml
│ │ ├── resource-quota-pvc.yaml
│ │ ├── rolebinding-secret-reader.yaml
│ │ └── sa.yaml
│ └── team-2
│ ├── namespace.yaml
│ ├── network-policy-default-deny-all.yaml
│ ├── resource-quota-pvc.yaml
│ ├── rolebinding-secret-admin.yaml
│ └── sa.yaml
├── README.md
└── system
└── repo.yaml
שימוש בירושה של מרחבי שמות ובמרחבי שמות מופשטים
בעזרת מקור אמת היררכי, אפשר להשתמש במושג של ירושת מרחבי שמות כדי להחיל באופן אוטומטי הגדרות על קבוצות של מרחבי שמות בכל האשכולות שבהם מרחבי השמות האלה קיימים (או אמורים להיות קיימים).
הורשה של מרחב שמות חלה על namespaces/
הספרייה של המאגר ההיררכי וכל תיקיות המשנה שלה. הגדרות בספריות אחרות במאגר, כמו cluster/, לא כפופות להורשה.
במקור אמת היררכי, הספרייה namespaces/ יכולה להכיל שני סוגים שונים של ספריות משנה:
ספריית מרחב שמות מכילה הגדרה של מרחב שמות. השם של הקובץ שמכיל את ההגדרה לא חשוב, אבל ההגדרה חייבת לכלול את
kind: Namespace. ספריית מרחב שמות יכולה להכיל גם הגדרות של סוגים אחרים של אובייקטים ב-Kubernetes. ספריית מרחב שמות לא יכולה להכיל ספריות משנה. הגדרת מרחב שמות מייצגת מרחב שמות בפועל באשכול.ספרייה של מרחב שמות מופשט מכילה ספריות של מרחבי שמות. הוא יכול להכיל גם הגדרות של אובייקטים אחרים של Kubernetes, אבל הוא לא יכול להכיל ישירות הגדרה של מרחב שמות. ספרייה של מרחב שמות מופשט לא מייצגת אובייקט באשכול Kubernetes, אבל ספריות של מרחבי שמות צאצאים כן מייצגות אובייקטים.
כדי לוודא שלמקורות של מרחב השמות ומרחב השמות המופשט יש את סוג ההגדרות והמבנה הנכונים, השגיאה KNV1003: IllegalNamespaceSubdirectoryError מדווחת כשיש בעיה.
ההגדרות בספרייה של מרחב שמות חלות רק על מרחב השמות הזה. עם זאת, הגדרות במדריך של מרחב שמות מופשט חלות על כל מדריכי מרחבי השמות הצאצאים של מרחב השמות המופשט הזה (או על מרחבי השמות הצאצאים שתואמים לNamespaceSelector של ההגדרה, אם יש כזה).
הורשה של הגדרה בספרייה namespaces/ מבוססת בעיקר על המיקום שלה בעץ הספריות במקור המידע האמין. כדי להבין אילו הגדרות מוחלות על מרחב שמות מסוים באשכול מסוים, אפשר לעיין במאגר הדוגמאות של ירושת מרחב השמות.
מרחבי שמות מוגבלים
config-management-system הוא מרחב שמות מוגבל. אי אפשר להשתמש בו כמדריך מרחב שמות מופשט. אפשר להגדיר מרחב שמות config-management-system, אבל סוג המשאב היחיד שמותר למרחב השמות config-management-system הוא RootSync.
ביצוע שינויים במקור המידע האמין
כשמבצעים שינוי במקור האמת שיוצר או מוחק ספריות של מרחבי שמות מתוך הספרייה namespaces/, יכולות להיות תוצאות לא צפויות בהתאם לפעולה:
- יצירת ספרייה: כשמבצעים קומיט של היררכיה תקפה של
namespaces/למקור האמת, סנכרון תצורות יוצר מרחבי שמות, ואז יוצר אובייקטים של Kubernetes במרחבי השמות האלה לכל הגדרה שהספרייה של מרחב השמות מכילה או מקבלת בירושה. - מחיקת ספרייה: מחיקה של ספריית מרחב שמות היא פעולה הרסנית. מרחב השמות והתוכן שלו נמחקים בכל אשכול שמנוהל על ידי סנכרון תצורות שבו מרחב השמות קיים. אם מוחקים ספרייה של מרחב שמות מופשט שמכילה ספריות של מרחבי שמות צאצאים, כל מרחבי השמות האלה והתוכן שלהם נמחקים מכל אשכול שמנוהל על ידי סנכרון תצורות.
שינוי שם של ספרייה: שינוי שם של ספריית מרחב שמות הוא מחיקה, ואחריה יצירה, והוא נחשב לפעולה הרסנית. לשינוי שם של ספרייה במרחב שמות מופשט אין השפעה חיצונית גלויה.
העברת ספרייה: העברה של מרחב שמות או של ספרייה של מרחב שמות מופשט בתוך
namespaces/לא מוחקת את מרחב השמות או את האובייקטים בתוכו, אלא אם מרחב השמות מתחיל או מפסיק לרשת הגדרה מספרייה של מרחב שמות מופשט, בגלל שינוי בהיררכיה שלו.