הרחבה באמצעות Kustomize

1. מטרות

Kustomize הוא כלי שמציג דרך ללא תבניות להתאמה אישית של תצורת אפליקציות, ובכך מפשט את השימוש באפליקציות רגילות. היא זמינה ככלי עצמאי ומובנית בתוך kubectl באמצעות kubectl apply -k ומאפשרת להשתמש בו כ-CLI עצמאי. אפשר לקרוא פרטים נוספים בכתובת kustomize.io.

במדריך הזה תלמדו על כמה מעקרונות הליבה של Kustomize, ותוכלו להשתמש בו כדי לנהל וריאציות באפליקציות ובסביבות.

אתם:

  • שימוש בלקוח שורת הפקודה בהתאמה אישית
  • שינוי רכיבים נפוצים
  • תיקון מבני ימל גדולים יותר
  • שימוש בשכבות מרובות של שכבות-על

2. סביבת העבודה בהכנה

  1. כדי לפתוח את העורך של Cloud Shell, נכנסים לכתובת ה-URL הבאה

https://ide.cloud.google.com

  1. בחלון הטרמינל, יוצרים ספריית עבודה למדריך הזה

mkdir kustomize-lab

  1. החלפה לספרייה והגדרת סביבת עבודה משולבת (IDE)

cd kustomize-lab && cloudshell workspace .

3. שימוש בלקוח שורת פקודה בהתאמה אישית

הכוח של ההתאמה האישית מגיע מהיכולת ליצור שכבות-על ולשנות את ה-yamls הבסיסית של Kubernetes באמצעות ערכים מותאמים אישית. כדי לעשות זאת, נדרש קובץ בסיסי עם הוראות למיקום הקבצים ולשינוי מברירת המחדל. Kustomize כלולה בסביבה העסקית של Kubernetes ואפשר להפעיל אותה בשיטות שונות.

בקטע הזה תיצרו תצורה בסיסית של kustomize ותעבדו את הקבצים באמצעות לקוח שורת הפקודה הנפרד של kustomize.

  1. כדי להתחיל, צריך ליצור תיקייה שתכיל את קובצי התצורה הבסיסיים

mkdir -p chat-app/base

  1. יוצרים פריטי 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

  1. יצירת הבסיס kustomization.yaml

Kustomize מחפש קובץ בשם kustomization.yaml כנקודת כניסה. הקובץ הזה מכיל הפניות לקובצי הבסיס השונים ולקובצי שינוי מברירת המחדל, וגם לערכי ברירת מחדל ספציפיים.

יוצרים קובץ kustomization.yaml שמפנה ל-deployment.yaml כמשאבי הבסיס.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. מריצים את הפקודה 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.

  1. צריך לעדכן את הקובץ kustomization.yaml כך שיכלול תוויות ומרחבי שמות נפוצים.

צריך להעתיק ולהפעיל את הפקודות הבאות בטרמינל

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

namespace: my-namespace

nameprefix: my-

commonLabels:

app: my-app

EOF

  1. הרצת פקודת ה-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 מספקת גם את היכולת להחיל תיקונים שיוצרים שכבת-על של משאבי הבסיס. משתמשים בה בדרך כלל כדי לספק שונות בין אפליקציות לסביבות.

בשלב הזה תיצרו וריאציות של הסביבה לאפליקציה אחת שמשתמשת באותם משאבי בסיס.

  1. מתחילים ביצירת תיקיות לסביבות השונות

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. כותבים את תיקון השלב באמצעות הפקודה הבאה

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

  1. עכשיו כותבים את תיקון ה-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.

  1. להטמיע את קובצי ה-Kustomize של YAML לספריית הבסיס

כותבים מחדש את kustomization.yaml. מסירים את מרחב השמות ואת קידומת השם, כי זו רק ההגדרה הבסיסית ללא שינוי. השדות האלה יועברו לקובצי הסביבה בעוד רגע.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. הטמעת קובצי 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: בקובץ. המאפיין הזה מציין שהקונסטומיזציה צריכה להציג את הקבצים האלה בשכבת-על מעל למשאבי הבסיס.

  1. מטמיעים את קובצי ה-Kustomize של YAML לספריית prod

cat <<EOF > chat-app/prod/kustomization.yaml

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. מריצים kustomize כדי למזג את הקבצים

לאחר יצירת קובצי הבסיס והסביבה, תוכלו לבצע את תהליך ההתאמה (kustomize) כדי לתקן את קובצי הבסיס.

מריצים את הפקודה הבאה עבור dev כדי לראות את התוצאה המוזגת.

kustomize build chat-app/dev

חשוב לשים לב שהפלט מכיל תוצאות ממוזגות, כמו תוויות מהגדרות הבסיס והפיתוח, וגם את השם של קובץ האימג' בקונטיינר מהבסיס ומשתנה הסביבה מתיקיות dev.

6. שימוש בשכבות מרובות של שכבות-על

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

בדוגמה הזו יוצרים תיקייה ומשאבים ב-shared-kustomize שייכללו בכל האפליקציות, ללא קשר לסביבה שהן נפרסות.

  1. יצירת התיקייה המשותפת

mkdir shared-kustomize

  1. יצירת קובץ 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

  1. יצירת kustomization.yaml בתיקייה המשותפת

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. הפניה לתיקייה המשותפת מסוג 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

  1. מריצים את 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>