Kustomize הוא כלי לשינוי הגדרות של Kubernetes, שמאפשר להתאים אישית קובצי YAML שלא נוצרו באמצעות תבנית, בלי לשנות את הקבצים המקוריים. Kustomize יכול גם ליצור משאבים כמו ConfigMaps וסודות מייצוגים אחרים. Kustomize מבוסס על Kubernetes API, ולכן הוא יכול להבין ולשנות אובייקטים בסגנון Kubernetes.
אם רוצים להשתמש בתרשימי Helm עם סנכרון תצורות, יש שתי שיטות נתמכות: עיבוד Helm באמצעות Kustomize או שימוש ב-Helm API. בדף הזה מפורטות הדרישות להצגת תרשימי Helm באמצעות Kustomize. מידע נוסף על השימוש ב-Helm API זמין במאמר סנכרון תרשימי Helm מ-Artifact Registry.
דרישות ומגבלות
לפני שמגדירים עיבוד אוטומטי באמצעות Kustomize, חשוב לעיין בדרישות ובמגבלות הבאות:
- אין תמיכה במקורות היררכיים.
- אין תמיכה בבסיסים מרוחקים ממקורות אמת פרטיים.
- אין תמיכה במאגרי Helm פרטיים ובמאגרי Helm שמבוססים על OCI, אלא אם משתמשים ב-Helm API.
- אפשר לנהל את ערכי Helm במקור האמת. ב-Helm API, הערכים מנוהלים כחלק מ-RootSync או RepoSync API.
- יש תמיכה בעיבוד של כמה תרשימי Helm באובייקט RootSync או RepoSync. באמצעות Helm API, אפשר לעבד רק תרשים Helm אחד באובייקט RootSync או RepoSync.
- מוודאים שקובץ התצורה של Kustomization (
kustomization.yaml, kustomization.ymlאוKustomization) נמצא בבסיס של הספרייה, ושההגדרות מאוחסנות בקובץ הזה ולא בקבצים נפרדים במקור האמת.
רינדור הגדרות Kustomize
בדוגמה הבאה מוצג אופן ההגדרה של מקור האמת לשימוש בהגדרות Kustomize עם עיבוד אוטומטי.
דוגמה לארכיטקטורה של הגדרות Kustomize
הספרייה הזו כוללת ארבע שכבות-על (team-a, team-b, team-c ו-external-team) שמפנות לאותו בסיס, וקובץ שמשמש את מחולל ה-ConfigMap.
התרשים הבא מציג את מבנה הספריות:
├── example
│ ├── base
│ │ ├── kustomization.yaml
│ │ ├── namespace.yaml
│ │ ├── networkpolicy.yaml
│ │ ├── rolebinding.yaml
│ │ └── role.yaml
│ ├── kustomization.yaml
│ ├── README.md
│ ├── team-a
│ │ └── kustomization.yaml
│ ├── team-b
│ │ └── kustomization.yaml
│ └── team-c
│ └── kustomization.yaml
├── external-team
│ └── kustomization.yaml
└── external-data.txt
קובץ kustomization.yaml הבא נמצא בשורש של מקור המידע, והוא מכיל הפניות לארבע שכבות-על עם מחולל ConfigMap מקובץ מקומי:
# ./example/kustomization.yaml
resources:
- team-a
- team-b
- team-c
- ../external-team
configMapGenerator:
- name: my-configmap
namespace: my-namespace
files:
- ../external-data.txt
הקובץ kustomize.yaml הבא נמצא בספרייה team-a והוא שכבת העל של team-a:
# ./example/team-a/kustomization.yaml
namespace: team-a
resources:
- ../base
patches:
- target:
kind: RoleBinding
name: team-admin-rolebinding
patch: |-
- op: replace
path: /subjects/0/name
value: team-a-admin@mydomain.com
- target:
kind: Namespace
name: default
patch: |-
- op: replace
path: /metadata/name
value: team-a
הקובץ kustomization.yaml הבא נמצא בספרייה base והוא בסיס Kustomize:
# ./example/base/kustomization.yaml
resources:
- namespace.yaml
- rolebinding.yaml
- role.yaml
- networkpolicy.yaml
אתם יכולים לעיין במאגר לדוגמה בספרייה configuring namespace-specific policies ב-GitHub.
רינדור תרשימי Helm באמצעות Kustomize
בקטע הזה מוסבר איך לעבד תרשימי Helm באמצעות Kustomize. גרסאות משולבות של Helm ו-Kustomize מפרטות את הגרסאות של Kustomize ו-Helm שמשולבות בגרסה המתאימה של סנכרון תצורות.
שדות בתרשים Helm
אתם יכולים להוסיף את השדות הבאים של תרשימי Helm לקובצי kustomization.yaml
כדי לתמוך בעיבוד של תרשימי Helm באמצעות Kustomize:
| שדה | תיאור |
|---|---|
helmGlobals |
פרמטרים שמוחלים על כל תרשימי Helm |
helmGlobals.chartHome
|
מקבל מחרוזת. נתיב, יחסי לשורש של Kustomization, לספרייה שמכילה ספריית משנה לכל תרשים שרוצים לכלול ב-Kustomization. ערך ברירת המחדל של השדה הזה הוא charts. |
helmGlobals.configHome
|
מקבל מחרוזת. הגדרה של ערך ש-Kustomize צריך להעביר ל-Helm באמצעות משתנה הסביבה HELM_CONFIG_HOME. Kustomize לא מנסה לקרוא או לכתוב בספרייה הזו. אם לא מציינים נתיב, נעשה שימוש ב-TMP_DIR/helm, כאשר TMP_DIR היא ספרייה זמנית שנוצרת על ידי Kustomize עבור Helm. |
helmCharts
|
מערך של פרמטרים של תרשים Helm |
helmCharts.name
|
מקבל מחרוזת. שם התרשים. חובה למלא את השדה הזה. |
helmCharts.version
|
מקבל מחרוזת. גרסת התרשים |
helmCharts.repo
|
מקבל מחרוזת. כתובת ה-URL שמשמשת לאיתור התרשים |
helmCharts.releaseName
|
מקבל מחרוזת. מחליף את RELEASE_NAME בפלט של תבנית התרשים |
helmCharts.namespace
|
מקבל מחרוזת. הגדרת מרחב השמות של היעד לגרסה (.Release.Namespace בתבנית) |
helmCharts.valuesInline
|
ערכים לשימוש במקום ערכי ברירת המחדל שמצורפים לתרשים |
helmCharts.valuesFile
|
מקבל מחרוזת. ValuesFile הוא נתיב מקומי או כתובת URL מרוחקת לקובץ ערכים שבו רוצים להשתמש במקום ערכי ברירת המחדל שמצורפים לתרשים. ערכי ברירת המחדל מופיעים ב-CHART_HOME/NAME/values.yaml. |
helmCharts.valuesMerge
|
אפשר להשתמש בערכים merge, override, (default) או replace. המאפיין ValuesMerge מציין איך המערכת מתייחסת למאפיין ValuesInline ביחס למאפיין Values. |
helmCharts.includeCRDs
|
מקבלים true או false. המדיניות הזו קובעת אם Helm צריך ליצור גם CustomResourceDefinitions. ערך ברירת המחדל הוא false. |
איך מעבדים תרשים Helm מרחוק
סנכרון תצורות תומך בעיבוד של תרשימי Helm מרוחקים באשכולות שיש להם גישה לאינטרנט הציבורי.
הקוד הבא kustomization.yaml מציג cert-manager מרוחק
על ידי הגדרת השדות הבאים helmCharts:
# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
repo: https://charts.jetstack.io
version: v1.5.3
releaseName: my-cert-manager
namespace: cert-manager
...
איך מעבדים תרשים Helm מקומי
סנכרון תצורות תומך בעיבוד של תרשימי Helm מקומיים. כדי להשתמש בגרסה מותאמת אישית של תרשים Helm, אפשר למשוך את גרסת ההפצה מתרשים Helm (לדוגמה, ArtifactHub), לבצע שינויים באופן מקומי ואז לדחוף את השינויים למקור האמת.
התרשים הבא מציג את מבנה הספריות:
├── base
│ ├── charts
│ │ └── cert-manager
│ └── kustomization.yaml
├── overlays
│ └── stage
│ └── kustomization.yaml
└── base_value_overrides.yaml
הקוד הבא של kustomization.yaml מציג תרשים מקומי של cert-manager. ספריית ברירת המחדל לתרשימי Helm היא charts, ומכיוון שהתרשים הזה נבדק בספרייה charts, לא צריך לציין את .helmCharts.repo או את .helmCharts.version.
# ./overlays/stage/kustomization.yaml
...
# This field is optional if your Helm charts are located in the default 'charts' directory.
helmGlobals:
chartHome: ../../base/charts
helmCharts:
- name: cert-manager
releaseName: my-cert-manager
namespace: cert-manager
# Specify a local path or a remote URL to a values file instead of using the default values in CHART_HOME/NAME/values.yaml.
valuesFile: ../../base_value_overrides.yaml
...
עיבוד של כמה תרשימי Helm
סנכרון תצורות תומך בעיבוד של כמה תרשימי Helm בקובץ kustomization.yaml אחד, בלי קשר לשאלה אם התרשים הוא מרוחק או מקומי.
הפקודה הבאה kustomization.yaml מציגה תרשים Helm מקומי (cert-manager):
# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
releaseName: my-cert-manager
namespace: cert-manager
- name: prometheus
repo: https://prometheus-community.github.io/helm-charts
version: 14.3.0
releaseName: my-prometheus
namespace: monitoring
...