הגדרת Kubernetes באמצעות Kustomize

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
...

המאמרים הבאים