1. מטרות
Kustomize הוא כלי שמציג דרך להתאמה אישית של הגדרות האפליקציה בלי להשתמש בתבנית, וכך מפשט את השימוש באפליקציות מוכנות. הוא זמין ככלי עזר עצמאי, והוא מוטמע ב-kubectl דרך kubectl apply -k. אפשר גם להשתמש בו כ-CLI עצמאי. פרטים נוספים זמינים באתר kustomize.io.
במדריך הזה נסביר כמה מהמושגים המרכזיים של Kustomize ונשתמש בו כדי לנהל וריאציות באפליקציות ובסביבות.
תצטרכו:
- שימוש בלקוח של שורת הפקודה kustomize
- שינוי של אלמנטים נפוצים
- תיקון מבני YAML גדולים יותר
- שימוש בכמה שכבות של שכבות-על
2. הכנת סביבת העבודה
- פותחים את Cloud Shell Editor בכתובת ה-URL הבאה
https://ide.cloud.google.com
- בחלון המסוף, יוצרים ספריית עבודה למדריך הזה.
mkdir kustomize-lab
- עוברים לספרייה ומגדירים את סביבת העבודה של ה-IDE
cd kustomize-lab && cloudshell workspace .
3. שימוש בלקוח שורת הפקודה kustomize
היתרון של kustomize הוא היכולת להוסיף ולשנות קובצי YAML בסיסיים של Kubernetes עם ערכים מותאמים אישית. כדי לעשות את זה, kustomize דורש קובץ בסיס עם הוראות לגבי המיקום של הקבצים ומה צריך לשנות. Kustomize כלול במערכת האקולוגית של Kubernetes, ואפשר להריץ אותו בכמה שיטות.
בקטע הזה יוצרים הגדרת kustomize בסיסית ומעבדים את הקבצים באמצעות לקוח שורת הפקודה העצמאי של kustomize.
- כדי להתחיל, יוצרים תיקייה שתכיל את קובצי ההגדרות הבסיסיים
mkdir -p chat-app/base
- יצירת קובץ פשוט של kubernetes
deployment.yamlבתיקיית הבסיס
cat <<EOF > chat-app/base/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`metadata:`
`name: chat-app`
`spec:`
`containers:`
`- name: chat-app`
`image: chat-app-image`
EOF
- יצירת בסיס
kustomization.yaml
Kustomize מחפש קובץ בשם kustomization.yaml כנקודת כניסה. הקובץ הזה מכיל הפניות לקובצי הבסיס ולקובצי ההחלפה השונים, וגם ערכי החלפה ספציפיים.
יוצרים קובץ kustomization.yaml שמפנה אל deployment.yaml כמשאבי הבסיס.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- מריצים את הפקודה kustomize בתיקיית הבסיס. הפעולה הזו יוצרת קובצי YAML של הפריסה ללא שינויים, וזה צפוי כי עדיין לא הוספתם וריאציות.
kustomize build chat-app/base
אפשר לשלב את הלקוח העצמאי הזה עם לקוח kubectl כדי להחיל את הפלט ישירות, כמו בדוגמה הבאה. הפעולה הזו מעבירה את הפלט של פקודת ה-build ישירות לפקודה kubectl apply.
(Do Not Execute - Included for reference only)
kustomize build chat-app/base | kubectl apply -f -
הטכניקה הזו שימושית אם נדרשת גרסה ספציפית של לקוח kustomize.
אפשרות נוספת היא להריץ את kustomize באמצעות כלי שמשולב ב-kubectl עצמו. כמו בדוגמה הבאה.
(Do Not Execute - Included for reference only)
kubectl apply -k chat-app/base
4. שינוי של רכיבים נפוצים
עכשיו, אחרי שהגדרתם את סביבת העבודה ואימתתם ש-kustomize פועל, הגיע הזמן לשנות חלק מהערכים הבסיסיים.
בדרך כלל מתאימים אישית את התמונות, מרחבי השמות והתוויות לכל אפליקציה ולכל סביבה. מכיוון שהם משתנים לעיתים קרובות, Kustomize מאפשר להצהיר עליהם ישירות ב-kustomize.yaml, וכך לא צריך ליצור הרבה תיקונים לתרחישים הנפוצים האלה.
הטכניקה הזו משמשת לעיתים קרובות ליצירת מופע ספציפי של תבנית. עכשיו אפשר להשתמש בסט בסיסי אחד של משאבים לכמה הטמעות, פשוט על ידי שינוי השם ומרחב השמות שלו.
בדוגמה הזו, תוסיפו מרחב שמות, קידומת לשם ותוויות ל-kustomization.yaml.
- מעדכנים את הקובץ
kustomization.yamlכדי לכלול תוויות ומרחבי שמות נפוצים.
מעתיקים את הפקודות הבאות ומריצים אותן בטרמינל:
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
namespace: my-namespace
nameprefix: my-
commonLabels:
app: my-app
EOF
- מריצים את פקודת ה-build
אם מריצים את ה-build בשלב הזה, אפשר לראות שקובץ ה-YAML שנוצר מכיל עכשיו את מרחב השמות, התוויות והשמות עם הקידומת בהגדרות של השירות ושל הפריסה.
kustomize build chat-app/base
שימו לב שהפלט מכיל תוויות ומרחבי שמות שלא מופיעים בקובץ ה-YAML של הפריסה. שימו לב גם איך השם השתנה מ-chat-app ל-my-chat-app
(פלט, אין להעתיק)
kind: Deployment
metadata:
labels:
`app: my-app`
name: my-chat-app
namespace: my-namespace
5. תיקון מבני YAML גדולים יותר
בנוסף, Kustomize מאפשרת להחיל תיקונים שמוצגים מעל משאבי הבסיס. הטכניקה הזו משמשת לעיתים קרובות כדי לספק שונות בין אפליקציות וסביבות.
בשלב הזה תיצרו וריאציות של סביבות לאפליקציה אחת שמשתמשות באותם משאבי בסיס.
- מתחילים ביצירת תיקיות לסביבות השונות
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- כותבים את התיקון של השלב באמצעות הפקודה הבאה
cat <<EOF > chat-app/dev/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: dev`
EOF
- עכשיו תכתוב את התיקון ל-prod באמצעות הפקודה הבאה
cat <<EOF > chat-app/prod/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: prod`
EOF
שימו לב שהטלאים שלמעלה לא מכילים את השם של קובץ אימג' של קונטיינר. הערך הזה מופיע בקובץ base/deployment.yaml שיצרתם בשלב הקודם. עם זאת, הטלאים האלה מכילים משתני סביבה ייחודיים לפיתוח ולייצור.
- הטמעה של קובצי YAML של kustomize בספריית הבסיס
כותבים מחדש את הקובץ base/kustomization.yaml, מסירים את מרחב השמות ואת הקידומת של השם כי זו רק הגדרת הבסיס ללא וריאציה. השדות האלה יועברו לקובצי הסביבה תוך רגע.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- הטמעה של קובצי ה-YAML של Kustomize בספריית הפיתוח
עכשיו מטמיעים את הווריאציות לסביבות הפיתוח והייצור על ידי הרצת הפקודות הבאות בטרמינל.
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
שימו לב לתוספת של הקטע patches: בקובץ. המשמעות היא ש-kustomize צריך להוסיף את הקבצים האלה על גבי משאבי הבסיס.
- הטמעה של קובצי ה-YAML של kustomize בספריית הייצור
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- מריצים את kustomize כדי למזג את הקבצים
אחרי שיוצרים את קובצי הבסיס והסביבה, אפשר להריץ את תהליך kustomize כדי לתקן את קובצי הבסיס.
מריצים את הפקודה הבאה כדי לראות את התוצאה הממוזגת.
kustomize build chat-app/dev
שימו לב שהפלט מכיל תוצאות שמוזגו, כמו תוויות מההגדרות של הבסיס והפיתוח, וגם שם קובץ האימג' של הקונטיינר מהבסיס ומשתנה הסביבה מתיקיות הפיתוח.
6. שימוש בכמה שכבות של שכבות-על
בארגונים רבים יש צוות שעוזר לתמוך בצוותי האפליקציות ולנהל את הפלטפורמה. לעתים קרובות, הצוותים האלה ירצו לכלול פרטים ספציפיים שצריך לכלול בכל האפליקציות בכל הסביבות, כמו סוכן רישום ביומן.
בדוגמה הזו, תיצרו תיקייה ומשאבים של shared-kustomize שייכללו בכל האפליקציות, בלי קשר לסביבה שבה הן נפרסות.
- יצירת התיקייה shared-kustomize
mkdir shared-kustomize
- יצירת
deployment.yamlפשוט בתיקייה המשותפת
cat <<EOF > shared-kustomize/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: logging-agent`
`image: logging-agent-image`
EOF
- יוצרים את הקובץ kustomization.yaml בתיקייה המשותפת
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- הפניה לתיקיית Kustomize המשותפת מהאפליקציה
מכיוון שרוצים שהתיקייה shared-kustomize תהיה הבסיס לכל האפליקציות, צריך לעדכן את chat-app/base/kustomization.yaml כדי להשתמש ב-shared-kustomize כבסיס. לאחר מכן, מתקנים את הקובץ deployment.yaml שלו. לאחר מכן, תיקוני האבטחה יוחלו שוב על תיקיות הסביבה.
מעתיקים את הפקודות הבאות ומריצים אותן בטרמינל:
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- ../../shared-kustomize
commonLabels:
app: chat-app
patches:
- deployment.yaml
EOF
- מריצים את kustomize ומציגים את התוצאות הממוזגות של dev
kustomize build chat-app/dev
שימו לב שהפלט מכיל תוצאות משולבות מבסיס האפליקציה, מסביבת האפליקציה ומתיקיות shared-kustomize. במיוחד, בקטע Containers (מאגרי תגים) אפשר לראות ערכים מכל שלושת המיקומים.
(פלט, אין להעתיק)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>