שימוש ב-Config Sync עם Kustomize ו-Helm

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

כשמשתמשים בסנכרון תצורות, ההגדרות של Kustomize וטבלאות Helm שמוסיפים למאגר Git עוברות עיבוד אוטומטי. היתרונות של רינדור אוטומטי:

  • אין יותר צורך בצינור חיצוני להעברת נתונים. בלי עיבוד אוטומטי, צריך לעבד את ההגדרות באופן ידני באמצעות Kustomize ו-Helm בתחנת העבודה, או להגדיר שלב להפעלת תהליך ההידרציה במערכות ה-CI. עם רינדור אוטומטי, סנכרון תצורות מטפל בביצוע.

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

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

מטרות

  • מגדירים את המאגר באמצעות הגדרות Kustomize שמפנות לתרשים Helm מוכן לשימוש של cert-manager. ‫cert-manager הוא כלי ל-Kubernetes שעוזר לכם לנהל את האישורים.
  • בודקים את ההגדרות שיוצרים.
  • אפשר להשתמש ב-סנכרון תצורות כדי לרנדר אוטומטית את התרשים ולסנכרן את האשכול עם המאגר.
  • בודקים שההתקנה בוצעה בהצלחה.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

לפני שמתחילים

  1. בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים

    כניסה לדף לבחירת הפרויקט

  2. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  3. יוצרים אשכול שעומד בדרישות של סנכרון תצורות, או מוודאים שיש לכם גישה לאשכול כזה, ומשתמשים בהגדרות הבאות של סנכרון תצורות:
    • הספק משתמש במאגר לא מובנה.
    • ממשקי ה-API של RootSync ושל RepoSync מופעלים.
    • הערך של spec.override.enableShellInRendering מוגדר כ-true כדי לאפשר ל-Config Sync לתמוך בשליפת בסיסים מרוחקים ממאגרים ציבוריים בתהליך העיבוד.
  4. רושמים את האשכול ב-Fleet.
  5. מתקינים את כלי שורת הפקודה nomos. אם כבר התקנתם את הכלי nomos, חשוב לשדרג אותו לגרסה 1.9.0 ואילך.
  6. מתקינים את Helm.

כדאי גם להכיר את Git,‏ Kustomize ו-Helm.

הגדרת המאגר

במשימות הבאות מוסבר איך להכין מאגר Git עם הגדרות שמשלבות הגדרות של Kustomize עם תרשימי Helm:

  1. יוצרים מאגר Git או מוודאים שיש לכם גישה למאגר Git. מאחר שהמאגר שלך משתמש ב-Kustomize וב-Helm, הוא צריך להיות מאגר לא מובנה.

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

  3. במאגר Git, יוצרים ספרייה בשם base:

    mkdir base
    
  4. בתיקייה 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 המרוחק.

  5. חוזרים לשורש של מאגר 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 לכל הפריסות בספריית הבסיס.

  6. שומרים את השינויים במאגר:

    git add .
    git commit -m 'Set up manifests.'
    git push
    

מאגר הדוגמאות כולל דוגמה למאגר כזה.

תצוגה מקדימה ואימות של הגדרות שעברו עיבוד

לפני ש-סנכרון תצורות מעבד את ההגדרות ומסנכרן אותן עם האשכול, חשוב לוודא שההגדרות מדויקות. לשם כך, מריצים את הפקודה nomos hydrate כדי לראות תצוגה מקדימה של ההגדרה המעובדת, ואת הפקודה nomos vet כדי לוודא שהפורמט נכון.

  1. מריצים את הפקודה nomos hydrate עם הדגלים הבאים:

    nomos hydrate \
        --source-format=unstructured \
        --output=OUTPUT_DIRECTORY
    

    בפקודה הזו:

    • --source-format=unstructured מאפשר ל-nomos hydrate לעבוד על מאגר לא מובנה. מכיוון שאתם משתמשים בהגדרות Kustomize וב-Helm charts, אתם צריכים להשתמש במאגר לא מובנה ולהוסיף את הדגל הזה.
    • --output=OUTPUT_DIRECTORY מאפשר להגדיר נתיב להגדרות המעובדות. מחליפים את OUTPUT_DIRECTORY במיקום שבו רוצים לשמור את הפלט.
  2. כדי לבדוק את התחביר והתקינות של קובצי ההגדרות, מריצים את הפקודה 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

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

  1. כדי להגדיר את האובייקט 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.

  2. מחילים את קובץ root-sync.yaml על האשכול:

    kubectl apply -f root-sync.yaml
    

אימות ההתקנה

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

  1. כדי לוודא שאין שגיאות אחרות, משתמשים בפקודה nomos status:

    nomos status
    

    פלט לדוגמה:

    *CLUSTER_NAME
    --------------------
    <root>   https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init
    SYNCED   fd17dd5a
    
  2. כדי לוודא שהרכיב 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 בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

מחיקת הפרויקט

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

מחיקת משאבים בודדים

מחיקת קובצי המניפסט במאגר

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

  1. מסירים את רכיב cert-manager מהמאגר:

    git rm -rf manifests/cert-manager \
        && git commit -m "uninstall cert-manager" \
        && git push origin BRANCH
    

    מחליפים את BRANCH בענף שבו יצרתם את המאגר.

  2. מוחקים את מרחב השמות של cert-manager:

    git rm manifests/namespace-cert-manager.yaml \
        && git commit -m "remove the cert-manager namespace" \
        && git push origin BRANCH
    
  3. מוודאים שמרחב השמות של cert-manager לא קיים:

    kubectl get namespace cert-namespace
    

    פלט לדוגמה:

    Error from server (NotFound): namespaces "cert-namespace" not found
    

מחיקת האשכול

כדי למחוק את האשכול, מריצים את הפקודות הבאות:

המסוף

כדי למחוק אשכול באמצעות מסוף Google Cloud , מבצעים את המשימות הבאות:

  1. נכנסים לדף GKE במסוף Google Cloud .

    מעבר אל GKE

  2. לצד האשכול שרוצים למחוק, לוחצים על פעולות ואז על מחיקה.

  3. כשמופיעה בקשת אישור, לוחצים שוב על מחיקה.

gcloud

כדי למחוק אשכול באמצעות Google Cloud CLI, מריצים את הפקודה הבאה:

gcloud container clusters delete CLUSTER_NAME

מידע נוסף מופיע במאמרי העזרה בנושא gcloud container clusters delete.

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