1. מטרות
Kustomize הוא כלי שמציג דרך ללא תבניות להתאמה אישית של תצורת אפליקציות, ובכך מפשט את השימוש באפליקציות רגילות. היא זמינה ככלי עצמאי ומובנית בתוך kubectl באמצעות kubectl apply -k
ומאפשרת להשתמש בו כ-CLI עצמאי. אפשר לקרוא פרטים נוספים בכתובת kustomize.io.
במדריך הזה תלמדו על כמה מעקרונות הליבה של Kustomize, ותוכלו להשתמש בו כדי לנהל וריאציות באפליקציות ובסביבות.
אתם:
- שימוש בלקוח שורת הפקודה בהתאמה אישית
- שינוי רכיבים נפוצים
- תיקון מבני ימל גדולים יותר
- שימוש בשכבות מרובות של שכבות-על
2. סביבת העבודה בהכנה
- כדי לפתוח את העורך של Cloud Shell, נכנסים לכתובת ה-URL הבאה
https://ide.cloud.google.com
- בחלון הטרמינל, יוצרים ספריית עבודה למדריך הזה
mkdir kustomize-lab
- החלפה לספרייה והגדרת סביבת עבודה משולבת (IDE)
cd kustomize-lab && cloudshell workspace .
3. שימוש בלקוח שורת פקודה בהתאמה אישית
הכוח של ההתאמה האישית מגיע מהיכולת ליצור שכבות-על ולשנות את ה-yamls הבסיסית של Kubernetes באמצעות ערכים מותאמים אישית. כדי לעשות זאת, נדרש קובץ בסיסי עם הוראות למיקום הקבצים ולשינוי מברירת המחדל. 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.
(לא לבצע – נכלל לעיון בלבד)
kustomize build chat-app/base | kubectl apply -f -
השיטה הזו שימושית אם נדרשת גרסה ספציפית של לקוח ההתאמה האישית.
לחלופין, אפשר לבצע קוסומיזציה באמצעות הכלים המשולבים בתוך ה-kubectl עצמו. כמו בדוגמה הבאה.
(לא לבצע – נכלל לעיון בלבד)
kubectl apply -k chat-app/base
4. שינוי של רכיבים נפוצים
עכשיו, אחרי שהגדרתם את סביבת העבודה ובדקתם שהמבנה פועל, הגיע הזמן לשנות חלק מערכי הבסיס.
בדרך כלל, תמונות, מרחבי שמות ותוויות מותאמים אישית לכל אפליקציה וסביבה. מכיוון שהנתונים האלה משתנים לעיתים קרובות, 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. תיקון מבני ימל גדולים יותר
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 שיצרתם בשלב הקודם. עם זאת, התיקונים האלה מכילים משתני סביבה ייחודיים עבור dev ו-prod.
- להטמיע את קובצי ה-Kustomize של YAML לספריית הבסיס
כותבים מחדש את kustomization.yaml. מסירים את מרחב השמות ואת קידומת השם, כי זו רק ההגדרה הבסיסית ללא שינוי. השדות האלה יועברו לקובצי הסביבה בעוד רגע.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- הטמעת קובצי kustomize של YAML לספריית dev
עכשיו מריצים את הפקודות הבאות בטרמינל כדי ליישם את הווריאציות של dev ו-prod.
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
חשוב לשים לב שהוספת את הקטע patches
: בקובץ. המאפיין הזה מציין שהקונסטומיזציה צריכה להציג את הקבצים האלה בשכבת-על מעל למשאבי הבסיס.
- מטמיעים את קובצי ה-Kustomize של YAML לספריית prod
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- מריצים kustomize כדי למזג את הקבצים
לאחר יצירת קובצי הבסיס והסביבה, תוכלו לבצע את תהליך ההתאמה (kustomize) כדי לתקן את קובצי הבסיס.
מריצים את הפקודה הבאה עבור dev כדי לראות את התוצאה המוזגת.
kustomize build chat-app/dev
חשוב לשים לב שהפלט מכיל תוצאות ממוזגות, כמו תוויות מהגדרות הבסיס והפיתוח, וגם את השם של קובץ האימג' בקונטיינר מהבסיס ומשתנה הסביבה מתיקיות dev.
6. שימוש בשכבות מרובות של שכבות-על
בארגונים רבים יש צוות שעוזר לתמוך בצוותי האפליקציות ולנהל את הפלטפורמה. לעיתים קרובות הצוותים האלה ירצו לכלול פרטים ספציפיים שייכללו בכל האפליקציות בכל הסביבות, כמו סוכן הרישום ביומן.
בדוגמה הזו יוצרים תיקייה ומשאבים ב-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
כבסיס. לאחר מכן, תקנו אתDeploy.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
התיקיות. באופן ספציפי, ניתן לראות את הערכים בקטע 'מאגרים' מכל שלושת המיקומים.
(פלט לא מועתק)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>