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

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

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

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

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

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

מטרות

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

עלויות

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

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

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

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

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

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. יוצרים אשכול או מוודאים שיש לכם גישה לאשכול שעומד בדרישות של סנכרון תצורות ומשתמש בהגדרות הבאות של סנכרון תצורות:
    • הספק משתמש במאגר לא מובנה.
    • ממשקי ה-API של RootSync ושל RepoSync מופעלים.
    • הערך של spec.override.enableShellInRendering מוגדר כ-true כדי לאפשר ל-סנכרון תצורות לתמוך בשליפת בסיסים מרוחקים ממאגרים ציבוריים בתהליך העיבוד.
  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 לכל אובייקטי הפריסה. ההערה גורמת ל-Config Sync להתעלם משינויים סותרים באובייקט הזה באשכול אחרי שיוצרים אותו.

  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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

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

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

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

  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.

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