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

1. מטרות

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

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

תצטרכו:

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

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

  1. פותחים את Cloud Shell Editor בכתובת ה-URL הבאה

https://ide.cloud.google.com

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

mkdir kustomize-lab

  1. עוברים לספרייה ומגדירים את סביבת העבודה של ה-IDE

cd kustomize-lab && cloudshell workspace .

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

היתרון של kustomize הוא היכולת להוסיף ולשנות קובצי YAML בסיסיים של Kubernetes עם ערכים מותאמים אישית. כדי לעשות את זה, kustomize דורש קובץ בסיס עם הוראות לגבי המיקום של הקבצים ומה צריך לשנות. ‫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 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.

  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. תיקון מבני YAML גדולים יותר

בנוסף, 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 שיצרתם בשלב הקודם. עם זאת, הטלאים האלה מכילים משתני סביבה ייחודיים לפיתוח ולייצור.

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

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

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

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

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

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

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

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

שימו לב לתוספת של הקטע patches: בקובץ. המשמעות היא ש-kustomize צריך להוסיף את הקבצים האלה על גבי משאבי הבסיס.

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

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

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

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

אחרי שיוצרים את קובצי הבסיס והסביבה, אפשר להריץ את תהליך kustomize כדי לתקן את קובצי הבסיס.

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

kustomize build chat-app/dev

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

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

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

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

  1. יצירת התיקייה shared-kustomize

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 כבסיס. לאחר מכן, מתקנים את הקובץ deployment.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. במיוחד, בקטע Containers (מאגרי תגים) אפשר לראות ערכים מכל שלושת המיקומים.

(פלט, אין להעתיק)

<pre>

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

</pre>