במדריך הזה מוסיפים למאגר הגדרות של Kustomize שמפנות לתרשימי Helm, ואז משתמשים ב-סנכרון תצורות כדי לסנכרן את האשכול עם המאגר.
כשמשתמשים ב-סנכרון תצורות, תצורות Kustomize ו-Helm charts שמוצבים במאגר Git עוברים עיבוד אוטומטי. היתרונות של רינדור אוטומטי:
אין יותר צורך בצינור חיצוני של נתונים. בלי עיבוד אוטומטי, צריך לעבד את ההגדרות באופן ידני באמצעות Kustomize ו-Helm בתחנת העבודה, או להגדיר שלב להפעלת תהליך ההידרציה במערכות ה-CI. בעזרת רינדור אוטומטי, סנכרון תצורות מטפל בהרצה.
העלויות של התחזוקה יורדות. בלי עיבוד אוטומטי, צריך לתחזק מאגר Git אחד עם הגדרות Kustomize מקוריות ועם תרשימי Helm, ועוד מאגר Git עם הפלט שנוצר על ידי ההידרציה החיצונית. לאחר מכן צריך להגדיר את סנכרון תצורות לסנכרון ממאגר Git עם הפלט שעבר עיבוד. בעזרת רינדור אוטומטי, צריך לתחזק רק מאגר אחד עם ההגדרות המקוריות.
תהליך הפיתוח שלכם פשוט יותר. בלי עיבוד אוטומטי, שינויים שנעשים בהגדרות המקוריות צריכים להיבדק פעמיים לפני המיזוג: פעם במאגר המקורי ופעם במאגר המעובד. בעזרת עיבוד אוטומטי, קובצי ההגדרות המעובדים נוצרים על ידי סנכרון תצורות, וצריך רק לבדוק את השינויים בהגדרות המקוריות.
מטרות
- מגדירים את המאגר באמצעות הגדרות Kustomize שמפנות לתרשים Helm מוכן לשימוש של cert-manager. cert-manager הוא כלי ל-Kubernetes שעוזר לכם לנהל את האישורים.
- בודקים את ההגדרות שיוצרים.
- אפשר להשתמש בסנכרון תצורות כדי לעבד אוטומטית את התרשים ולסנכרן את האשכול עם המאגר.
- בודקים שההתקנה בוצעה בהצלחה.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אפשר להשתמש במחשבון התמחור.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- יוצרים אשכול או מוודאים שיש לכם גישה לאשכול שעומד בדרישות של סנכרון תצורות ומשתמש בהגדרות הבאות של סנכרון תצורות:
- הספק משתמש במאגר לא מובנה.
- ממשקי ה-API של
RootSyncושלRepoSyncמופעלים. - הערך של
spec.override.enableShellInRenderingמוגדר כ-trueכדי לאפשר ל-סנכרון תצורות לתמוך בשליפת בסיסים מרוחקים ממאגרים ציבוריים בתהליך העיבוד.
- רושמים את האשכול ב-Fleet.
- מתקינים את כלי שורת הפקודה
nomos. אם כבר התקנתם את הכליnomos, חשוב לוודא ששדרגתם אותו לגרסה 1.9.0 ואילך. - מתקינים את Helm.
כדאי גם להכיר את Git, Kustomize ו-Helm.
הגדרת המאגר
במשימות הבאות מוסבר איך להכין מאגר Git עם הגדרות שמשלבות הגדרות של Kustomize עם תרשימי Helm:
יוצרים מאגר Git או מוודאים שיש לכם גישה למאגר Git. מאחר שהמאגר שלך משתמש ב-Kustomize וב-Helm, הוא צריך להיות מאגר לא מובנה.
בשורש של מאגר Git, יוצרים קובץ בשם
kustomization.yamlומדביקים בו את הקוד הבא:# ./kustomization.yaml resources: - base patches: - path: ignore-deployment-mutation-patch.yaml target: kind: Deploymentהקובץ הזה הוא שכבת-על של Kustomize שמפנה אל בסיס Kustomize. שכבת העל הזו כוללת תיקון לבסיס של תרשים Helm, שמוסיף את ההערה
client.lifecycle.config.k8s.io/mutation: ignoreלכל אובייקטי הפריסה. ההערה גורמת ל-Config Sync להתעלם משינויים סותרים באובייקט הזה באשכול אחרי שיוצרים אותו.במאגר Git, יוצרים ספרייה בשם
base:mkdir baseבספרייה
base, יוצרים קובץ נוסף בשםkustomization.yamlומדביקים בו את הקוד הבא:# ./base/kustomization.yaml helmCharts: - name: cert-manager repo: https://charts.jetstack.io version: v1.5.3 releaseName: my-cert-manager namespace: cert-managerהקובץ הזה הוא בסיס Kustomize, שמעבד את תרשים Helm המרוחק.
חוזרים לשורש של מאגר ה-Git, יוצרים קובץ בשם
ignore-deployment-mutation-patch.yamlומדביקים בו את הקוד הבא:# ./ignore-deployment-mutation-patch.yaml apiVersion: apps/v1 kind: Deployment metadata: name: any annotations: client.lifecycle.config.k8s.io/mutation: ignoreהקובץ הזה הוא תיקון שמוחל על תרשים הבסיס של Helm. הוא מוסיף את ההערה
client.lifecycle.config.k8s.io/mutation: ignoreלכל הפריסות בספריית הבסיס.שומרים את השינויים במאגר:
git add . git commit -m 'Set up manifests.' git push
במאגר הדוגמאות יש דוגמה למאגר כזה.
תצוגה מקדימה ואימות של הגדרות שעברו עיבוד
לפני ש-סנכרון תצורות מעבד את ההגדרות ומסנכרן אותן עם האשכול, חשוב לוודא שההגדרות מדויקות. לשם כך, מריצים את הפקודה nomos hydrate כדי לראות תצוגה מקדימה של ההגדרה המעובדת, ואת הפקודה nomos vet כדי לוודא שהפורמט נכון.
מריצים את הפקודה
nomos hydrateעם הדגלים הבאים:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORYבפקודה הזו:
-
--source-format=unstructuredמאפשר ל-nomos hydrateלפעול במאגר לא מובנה. מכיוון שאתם משתמשים בהגדרות Kustomize וב-Helm charts, אתם צריכים להשתמש במאגר לא מובנה ולהוסיף את הדגל הזה. -
--output=OUTPUT_DIRECTORYמאפשר להגדיר נתיב להגדרות המעובדות. מחליפים אתOUTPUT_DIRECTORYבמיקום שבו רוצים לשמור את הפלט.
-
כדי לבדוק את התחביר והתקינות של ההגדרות, מריצים את הפקודה
nomos vetעם הדגלים הבאים:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORYבפקודה הזו:
-
--source-format=unstructuredמאפשר ל-nomos vetלפעול במאגר לא מובנה. -
--keep-output=trueשומר את ההגדרות המעובדות. -
--output=OUTPUT_DIRECTORYהוא הנתיב להגדרות המעובדות.
-
הגדרת סנכרון ממאגר Git
אחרי שיוצרים מאגר עם ההגדרות שרוצים להשתמש בהן, אפשר להגדיר סנכרון מהאשכול למאגר.
כדי להגדיר את האובייקט
RootSync, יוצרים קובץroot-sync.yaml:# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: YOUR_GIT_REPOSITORY branch: main auth: none override: enableShellInRendering: trueמחליפים את
YOUR_GIT_REPOSITORYבכתובת ה-URL של מאגר Git.מחילים את קובץ
root-sync.yamlעל האשכול:kubectl apply -f root-sync.yaml
אימות ההתקנה
אחרי שמתקינים ומגדירים את סנכרון תצורות, אפשר לוודא שההתקנה הושלמה בהצלחה.
כדי לוודא שאין שגיאות אחרות, משתמשים בפקודה
nomos status:nomos statusפלט לדוגמה:
*CLUSTER_NAME -------------------- <root> https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init SYNCED fd17dd5aכדי לוודא שהרכיב Helm הותקן בהצלחה:
kubectl get all -n cert-managerפלט לדוגמה:
NAME READY STATUS RESTARTS AGE pod/my-cert-manager-54f5ccf74-wfzs4 1/1 Running 0 10m pod/my-cert-manager-cainjector-574bc8678c-rh7mq 1/1 Running 0 10m pod/my-cert-manager-webhook-7454f4c77d-rkct8 1/1 Running 0 10m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/my-cert-manager ClusterIP 10.76.9.35 <none> 9402/TCP 10m service/my-cert-manager-webhook ClusterIP 10.76.11.205 <none> 443/TCP 10m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-cert-manager 1/1 1 1 10m deployment.apps/my-cert-manager-cainjector 1/1 1 1 10m deployment.apps/my-cert-manager-webhook 1/1 1 1 10m NAME DESIRED CURRENT READY AGE replicaset.apps/my-cert-manager-54f5ccf74 1 1 1 10m replicaset.apps/my-cert-manager-cainjector-574bc8678c 1 1 1 10m replicaset.apps/my-cert-manager-webhook-7454f4c77d 1 1 1 10m
הסרת המשאבים
כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
מחיקת משאבים בודדים
מחיקת קובצי המניפסט במאגר
כדי למנוע מחיקה לא מכוונת, סנכרון תצורות לא מאפשר להסיר את כל מרחבי השמות או משאבים בהיקף האשכול בהתחייבות אחת. כדי להסיר את הרכיב בצורה מסודרת ולהסיר את מרחב השמות בביצועי קומיט נפרדים, פועלים לפי ההוראות הבאות:
מסירים את רכיב cert-manager מהמאגר:
git rm -rf manifests/cert-manager \ && git commit -m "uninstall cert-manager" \ && git push origin BRANCHמחליפים את
BRANCHבענף שבו יצרתם את המאגר.מוחקים את מרחב השמות של cert-manager:
git rm manifests/namespace-cert-manager.yaml \ && git commit -m "remove the cert-manager namespace" \ && git push origin BRANCHמוודאים שמרחב השמות של cert-manager לא קיים:
kubectl get namespace cert-namespaceפלט לדוגמה:
Error from server (NotFound): namespaces "cert-namespace" not found
מחיקת האשכול
כדי למחוק את האשכול, מריצים את הפקודות הבאות:
המסוף
כדי למחוק אשכול באמצעות מסוף Google Cloud , מבצעים את המשימות הבאות:
נכנסים לדף GKE במסוף Google Cloud .
לצד האשכול שרוצים למחוק, לוחצים על more_vert פעולות ואז על delete מחיקה.
כשמופיעה בקשת אישור, לוחצים שוב על מחיקה.
gcloud
כדי למחוק אשכול באמצעות Google Cloud CLI, מריצים את הפקודה הבאה:
gcloud container clusters delete CLUSTER_NAME
מידע נוסף מופיע במאמרי העזרה בנושא gcloud container clusters delete.