kustomize-controller
פורסם בתאריך 12 בפברואר 2024
ה - kustomize-controller
מסתכל על משאב מקובץ Kustomization
בקלאסטר (נוצר נקודת כניסה אחת Kustomization
בשלב flux bootstrap
).
ה - Kustomization
שהוא CRD של Flux יכיל sourceRef
ו - path
לתיקייה.
אותה תיקייה תכיל קובץ kustomization.yaml
שיכיל את המשאבים שיש ליצור בקלאסטר, וה - kustomize-controller
ישמור על מצב הקלאסטר תואם למשאבים שמוגדרים בקובץ זה.
במידה והקובץ kustomization.yaml
לא קיים, אז ה - kustomize-controller
יצור אותו על פי המשאבים בתיקייה.
kustomize ו - kustomize-controller לא להתבלבל
יש כאן כמה דברים שיכולים לבלבל. יש את הכלי kustomize
, ואת ה - kustomize-controller
שהוא חלק מפרויקט flux
.
בנוסף יש שני משאבים שונים מסוג Kustomization
, אחד מה - kustomize.config.k8s.io/v1beta1
שהוא רק קליינט ולא נוצר בקלאסטר, ואחד מ - kustomize.toolkit.fluxcd.io/v1
שהוא משאב CRD שנוסף לקלאסטר שלנו כאשר התקנו Flux.
אנחנו צריכים להבין כל אחד מהרכיבים האלה ואיך הם קשורים זה לזה.
kustomize
kustomize
מזכיר לי קצת גרסא מאוד מופשטת של helm
. אתה מזין ל - kustomize
קובץ Kustomization
שנראה כך:
להלן דוגמא למשאב Kustomization
, kustomize
יצור ממנו קבוצת משאבים שניתן להזין ל - kubectl
והמשאבים האלה ייווצרו.
חשוב לציין שמשאב Kustomization
זה לא משאב CRD בקלאסטר, זה פשוט קובץ ש - kustomize
ישתמש בו כדי ליצור משאבים.
kustomize
מגיע מובנה בתוך kubectl
אבל גם ניתן להתקין אותו ככלי חיצוני.
יציג את המשאבים שיוצרו על ידי kustomize
.
והפקודה הנ”ל תייצר את המשאבים.
חשוב לציין שזהו לא שיעור על kustomize
ויש הרבה שיעורים טובים על הכלי הזה, ואני מניח שיש לך קצת ניסיון איתו.
אנחנו כן נעבור על תכונות חשובות של הכלי שנשתמש בהן במהלך הקורס.
התקנת kustomize
למרות ש - kustomize
מובנה בתוך kubectl
, עדיין ניתן להתקין אותו ככלי נפרד.
הדרך הקלה ביותר היא דרך homebrew
:
לאחר ההתקנה תהיה לך פקודת kustomize
זמינה. פקודה זו לא תשפיע על הקלאסטר שלך, ואני אישית אוהב להשתמש בה ככלי להבנת מה הולך להיות מותקן.
kustomization.yaml
יש משמעות מיוחדת לקבצים בשם kustomization.yaml
בתיקייה. kustomize
מקבל תיקייה, והוא יחפש קובץ בשם kustomization.yaml
באותה תיקייה. אם הקובץ לא קיים אז kustomize
יכשל ביצירת המשאבים.
kustomize create
kustomize
יכול לעזור לך ליצור קובץ kustomization.yaml
על פי המשאבים בתיקייה.
ניתן להיכנס לתיקייה המכילה משאבים בפורמט yaml
, ולהריץ kustomize create --autodetect --recursive
וזה יצור קובץ kustomization.yaml
על פי המשאבים בתיקייה.
זהו feature חשוב מאוד, וזה הפיצ’ר שה - kustomize-controller
ישתמש בו אם הקובץ kustomization.yaml
לא קיים.
kustomize build
אני משתמש בפקודה זו לעתים קרובות, זו דרך לראות אילו משאבים ייווצרו על ידי kustomize-controller
.
הפקודה לא תייצר את המשאבים, רק תראה לך אילו משאבים ייווצרו.
patch
חשוב שנעבור על תכונת ה - patch
ב - Kustomization
משום שנשתמש בה הרבה, במיוחד כאשר יש לנו תצורות דומות בין הקלאסטרים.
לדוגמא ייתכן שיש לנו תצורת בסיס בין הקלאסטרים, אבל יש שינויים קטנים בתצורה בין הקלאסטרים, לעיתים קרובות kustomization patches יאפשרו לנו לבצע את ההבדלה הזאת.
ישנם 2 סוגים של patches, patchesStrategicMerge
ו - patchesJson6902
.
patchesStrategicMerge
בצורה זו אנחנו מציינים קבצים שיש למזג איתם את המשאבים בקובץ kustomization.yaml
.
בדוגמא זו נשתמש בקובץ patch.yaml
כדי להוסיף annotation ל - ServiceAccount
של source-controller
.
זהו התוכן של הקובץ patch.yaml
, והוא יוסיף את ה - annotation ל - ServiceAccount
של source-controller
.
הוא יחפש את ה - ServiceAccount
בשם source-controller
בתוך ה - namespace
flux-system
ויוסיף את ה - annotation.
patchesJson6902
בצורה זו אנחנו משתמשים ב - json
patch כדי למזג עם המשאבים בקובץ kustomization.yaml
.
בדרך זו ניתן לבצע שינוי יותר מדויק על מנת לשנות שדה או מספר שדות במקום להחליף בלוק שלם של מידע.
ובתוך הקובץ patch.yaml
נמצא התוכן הבא:
נשתמש בצורה זו כאשר נדבר על Workload Identity וגישה למאגר ה - helm הפרטי שלנו.
overlays - שכבות
מאפיין נוסף שבו נשתמש הוא overlays
. זהו דרך להגדיר תצורה בסיסית ואז להוסיף תצורות שונות לקלאסטרים שונים.
הבה נבחן דוגמא פשוטה. בתיקיית השורש ניצור תיקייה בשם apps
שתכיל את תצורת האפליקציות שלנו.
מאוחר יותר בקורס נגדיר קצת הבדל בין האפליקציה בקלאסטר staging
לבין האפליקציה בקלאסטר production
, נפעיל גרסא canary
בקלאסטר staging
וגרסא יציבה בקלאסטר production
.
בתיקיית apps
ניצור תיקייה בשם base
שתכיל את תצורת האפליקציות שמשותפת לכל הקלאסטרים.
בתיקיית apps/base
ניצור קובץ release.yaml
עם התוכן הבא:
שימו לב שלא כללנו את השדה version
, נשתמש ב - overlays
כדי להוסיף את השדה version
לקלאסטרים, ולטעון גרסא canary
לקלאסטר staging
.
בתיקיית apps/base
ניצור גם קובץ kustomization.yaml
עם התוכן הבא:
לעת עתה קובץ kustomization.yaml
זה מכיל את כל המשאבים בתיקייה, אבל נשתמש בו בהמשך כדי להוסיף תגיות משותפות, ניימספייס והגדרות נוספות שמשותפות לכל המשאבים בתיקייה.
בתוך התיקייה apps
ניצור תיקייה בשם staging
שתכיל את תצורת האפליקציות שמיועדות לקלאסטר staging
.
בתיקיית apps/staging
ניצור קובץ kustomization.yaml
עם התוכן הבא:
הוספנו שדה patches
שמכוון למשאב HelmRelease
, ונשתמש בשדה זה כדי להוסיף את השדה version
למשאב HelmRelease
.
ניצור את הקובץ release.yaml
בתיקיית apps/staging
עם התוכן הבא:
ניצור את אותם קבצים בתיקיית apps/production
רק שהשדה version
יהיה שונה.
בתיקיית apps/production
ניצור קובץ kustomization.yaml
עם התוכן הבא:
ניתן לבחון את ה - overlays שלנו על ידי הרצת הפקודה הבאה:
ניתן לראות שההגדרות לשני הקלאסטרים זהות חוץ מהשדה version
. זהו דוגמא טובה לשימוש ב - overlays
כדי ליצור קלאסטרים דומים עם הבדלים קטנים.
זהו הסיכום הקצר שנצטרך על הכלי kustomize
, השיעור ימשיך על ה - kustomize-controller
וה - Kustomization
של Flux.
kustomize-controller
ה - kustomize-controller
הוא אופרטור של קוברנטס שמשתמש במשאב CRD בשם Kustomization
שמצביע על תיקייה בקוד מקור (בדרך כלל זה יהיה git repository).
בהתבסס על kustomization.yaml
בתיקייה (או אם אין הוא ייווצר) משאבים נוצרים בקלאסטר, והמצב של הקלאסטר נשמר.
Kustomization custom resource
לאחר התקנת Flux יש לנו כעת 2 משאבי Kustomization
, אחד מה - kustomize.config.k8s.io/v1beta1
והשני מה - kustomize.toolkit.fluxcd.io/v1
.
זה יכול להיות מבלבל בהתחלה, חשוב להבין את ההבדל ביניהם, ולהבחין בשדה apiVersion
כדי להבחין ביניהם.
זכרו שמשאבי Flux יש להם <controller>.toolkit.fluxcd.io
ב - apiVersion
.
להלן דוגמא למשאב Kustomization
ונעבור על השדות החשובים:
בואו נעבור על השדות החשובים:
- metadata.namespace - ה -
Kustomization
לא חייב להיות ב -flux-system
namespace, אם כי אני רגיל לשים אותו שם. - spec.interval - ה -
kustomize-controller
יבדוק את המשאב בכל זמן זה, ויתקן כל תקלה כדי להתאים את מצב הקלאסטר למשאבים בקובץkustomization.yaml
. - spec.path - הנתיב לתיקייה במקור (במקרה זה git repository) שמכילת קובץ
kustomization.yaml
(אם איןkustomization.yaml
הוא ייווצר - נחזור לכך מאוחר יותר). - spec.prune - אם מוגדר כ -
true
אז משאבים שהוסרו יימחקו מהקלאסטר, אני כמעט תמיד מגדיר את זה. - spec.sourceRef - ה -
sourceRef
מצביע על משאבsource-controller
, בקורס זה יהיהGitRepository
- זה מצביע לאיפה התיקייהpath
נמצאת, ואיפה הקבצי yaml שנרצה ליישם נמצאים.
נקודת הכניסה של kustomize-controller
כאשר הרצנו flux bootstrap
נוצר משאב Kustomization
ב - flux-system
namespace:
זוהי נקודת הכניסה שלנו ל - kustomize-controller
והנתיב מוגדר ל ./clusters/staging
על פי הדגל --path
בפקודת flux bootstrap
.
יצירת kustomization.yaml
שימו לב שהנתיב ./clusters/staging
לא מכיל kustomization.yaml
ועדיין ה - kustomize-controller
לא התלונן.
אם ה - Kustomization
מצביע לנתיב שאינו מכיל kustomization.yaml
אז ה - kustomize-controller
יייצר אותו (לא באופן פיזי, אלא כמשאב וירטואלי).
האופן שבו הוא יייצר את ה - kustomization.yaml
הוא על ידי הרצת הפקודה kustomize create --autodetect --recursive
על הנתיב.
ננסה להריץ את הפקודה בעצמנו:
שימו לב שנוצר קובץ kustomization.yaml
בתיקייה clusters/staging
והוא מכיל את המשאבים בתיקייה וגם בתיקיות המשניות (כמו תיקיית flux-system
). בנוסף נכלל בו גם קובץ namespace.yaml
מהשיעור הראשון, זה כיצד נוצר ה - namespace בשיעור הראשון, על ידי ה - kustomize-controller
שייצר את המשאב Kustomization
בתיקייה clusters/staging
.
סידור תיקיות
עכשיו שהבנו את ה - kustomize-controller
ואת ה - Kustomization
נסדר את המאגר שלנו, כך שיהיה נוח יותר לפרויקטים גדולים יותר.
נזיז את ה - namespace.yaml
מתיקיית clusters/staging
לתיקיית apps/base
זה יהיה ה - namespace שבו נשים את האפליקציות שלנו (חשוב לציין שאני ממליץ לא להשליך את כל האפליקציות בתיקייה אחת, אלא להפריד אותן namespace שונות, אבל בשביל הקורס נשתמש בתיקייה אחת).
נצטרך לשנות את ה - kustomization.yaml
בתיקיית apps/base
כך שיכלול את ה - namespace.yaml
:
נמחק את כל משאבי ה - release.yaml
שיצרנו, אלו היו רק לצורך הדגמה, ניצור אותם שוב בשיעורים הבאים כאשר נלמד על helm-controller
.
שנו את ה - apps/staging/kustomization.yaml
ואת ה - apps/production/kustomization.yaml
כך שיכללו את התיקייה apps/base
:
בנוסף נוודא שהקובץ clusters/staging/apps.yaml
קיים ומכיל את הקוד הבא:
הכנו את ה apps overlay, ומיקמנו את יצירת ה namespace באותה התיקייה. אם נעשה push לקוד נראה את ה namespace וגם את ה - Kustomization
שנוצר:
לסיכום
בשיעור זה למדנו על:
kustomize
- כלי שמאפשר ליצור משאבים בהתבסס על קובץkustomization.yaml
. זהו כלי מובנה ב -kubectl
.kustomize-controller
- אופרטור של Flux שמסתכל על משאב מסוגKustomization
ומשמר את הקלאסטר תואם למשאבים שמוגדרים בקובץkustomization.yaml
.
בנוסף למדנו על ה - Kustomization
מסוג kustomize.toolkit.fluxcd.io/v1
, ויצרנו overlay עבור ה - apps
שלנו ולמדנו איך להשתמש ב - patches
כדי לשנות משאבים ב overaly.
קוד המקור המלא זמין כאן