שימוש ב-Config Sync בסביבות מרובות עם עיבוד אוטומטי

במדריך הזה מוסבר איך להגדיר את סנכרון תצורות ל-Google Kubernetes Engine בשתי סביבות, אחת לפיתוח ואחת לייצור, באמצעות שיטות מומלצות ל-סנכרון תצורות.

בתרחיש הזה, אתם חלק מצוות אדמינים של פלטפורמה בחברת Foo Corp. האפליקציות של Foo Corp נפרסות ב-GKE, והמשאבים מחולקים בין שני פרויקטים, dev ו-prod. הפרויקט dev מכיל אשכול GKE לפיתוח, והפרויקט prod מכיל אשכול GKE לייצור. המטרה שלכם כאדמינים של הפלטפורמה היא לוודא ששתי הסביבות עומדות בדרישות המדיניות של Foo Corp, ושהמשאבים ברמת הבסיס, כמו מרחבי שמות של Kubernetes וחשבונות שירות, נשארים עקביים בשתי הסביבות.

בתרשים הבא מוצגת סקירה כללית של הסביבות שמגדירים במדריך הזה:

סקירה כללית של הסביבות שהגדרתם במדריך הזה.

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

כפי שמוצג בתרשים שלמעלה, במדריך הזה יוצרים את המשאבים הבאים:

  • שני Google Cloud פרויקטים שמייצגים את סביבות הפיתוח והייצור.
  • שני אשכולות GKE‏, dev ו-prod, בפרויקטים נפרדים, עם סנכרון תצורות מותקן.

ארכיטקטורת מאגר

במדריך הזה מגדירים את סנכרון תצורות לסנכרן עם ההגדרות בספרייה config-source/ במאגר הדוגמאות. הספרייה הזו מכילה את הספריות והקבצים הבאים:

config-source/
├── base
│   ├── foo
│   │   ├── kustomization.yaml
│   │   ├── namespace.yaml
│   │   └── serviceaccount.yaml
│   ├── kustomization.yaml
│   ├── pod-creator-clusterrole.yaml
│   └── pod-creator-rolebinding.yaml
├── cloudbuild.yaml
├── overlays
│   ├── dev
│   │   └── kustomization.yaml
│   └── prod
│       └── kustomization.yaml
└── README.md

הספרייה config-source כוללת את קובצי המניפסט base/ ואת שכבות העל של Kustomize‏ dev/ ו-prod/. כל ספרייה מכילה קובץ kustomization.yaml, שבו מפורטים הקבצים ש-Kustomize צריכה לנהל ולהחיל על האשכול. ב-dev/kustomization.yaml וב-prod/kustomization.yaml מוגדרת סדרה של תיקונים. התיקונים האלה משנים את משאבי base/ של הסביבה הספציפית.

לדוגמה, ה-RoleBinding של dev מאפשר לכל המפתחים ב-Foo Corp לפרוס Pods באשכול dev, בעוד שה-RoleBinding של prod מאפשר רק לסוכן של פריסה רציפה, deploy-bot@foo-corp.com, לפרוס Pods בסביבת הייצור:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
# ServiceAccount - make name unique per environ
- target:
    kind: ServiceAccount
    name: foo-ksa
  patch: |-
    - op: replace
      path: /metadata/name
      value: foo-ksa-dev
    - op: replace
      path: /metadata/namespace
      value: foo-dev
# Pod creators - give all Foo Corp developers access
- target:
    kind: RoleBinding
    name: pod-creators
  patch: |-
    - op: replace
      path: /subjects/0/name
      value: developers-all@foo-corp.com
commonLabels:
  environment: dev

מטרות

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

עלויות

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

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

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

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

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

לפני שמתחילים את המדריך הזה, חשוב לוודא שביצעתם את השלבים הבאים:

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

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

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

  3. משדרגים את Google Cloud CLI לגרסה העדכנית.

  4. מתקינים או משדרגים את הפקודה nomos

יצירה ורישום של האשכולות

כדי שתוכלו להתמקד בתהליך העבודה שבו אתם צריכים להשתמש כשאתם מגדירים את סנכרון תצורות לכמה סביבות, בספרייה multi-environments-kustomize יש סקריפטים שבהם אתם יכולים להשתמש כדי להפוך את ההגדרה של סנכרון תצורות לאוטומטית.

  1. משכפלים את המאגר לדוגמה:

    git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
    
  2. עוברים לתיקייה שמכילה את המשאבים שדרושים למדריך הזה:

    cd anthos-config-management-samples/multi-environments-kustomize/
    
  3. כדי להריץ את הסקריפטים שבהדרכה הזו, צריך להגדיר את המשתנים הבאים:

    export DEV_PROJECT="DEV_PROJECT_ID"
    export PROD_PROJECT="PROD_PROJECT_ID"
    export DEV_CLUSTER_ZONE="DEV_CLUSTER_ZONE"
    export PROD_CLUSTER_ZONE="PROD_CLUSTER_ZONE"
    export CM_CONFIG_DIR="config-sync-rendering"
    

    מחליפים את מה שכתוב בשדות הבאים:

    • DEV_PROJECT_ID: מזהה הפרויקט מGoogle Cloud הפרויקט שרוצים להשתמש בו כפרויקט פיתוח
    • PROD_PROJECT_ID: מזהה הפרויקט מתוךGoogle Cloud הפרויקט שרוצים להשתמש בו כפרויקט הייצור
    • DEV_CLUSTER_ZONE: אזור Compute Engine שבו רוצים ליצור את אשכול הפיתוח. לדוגמה, us-central1-c.
    • PROD_CLUSTER_ZONE: האזור ב-Compute Engine שבו רוצים ליצור את אשכול הייצור
  4. כדי ליצור שני אשכולות, מריצים את הסקריפט ./create-clusters.sh:

    ./create-clusters.sh
    

    הסקריפט הזה יוצר אשכול GKE אחד בשם dev בפרויקט dev ואשכול GKE אחד בשם prod בפרויקט prod. הסקריפט הזה גם מפעיל את GKE API ומתחבר לאשכולות dev ו-prod כדי שתוכלו לגשת לממשקי ה-API שלהם באמצעות kubectl.

    פלט לדוגמה:

    kubeconfig entry generated for dev.
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for prod.
    ⭐️ Done creating clusters.
    
  5. כדי לרשום את האשכולות לשני צי של מכונות נפרדות, מריצים את הסקריפט register-clusters.sh:

    ./register-clusters.sh
    

    הסקריפט הזה יוצר חשבון שירות ומפתח לרישום אשכול GKE, ואז משתמש בפקודה gcloud container fleet memberships register כדי לרשום את האשכולות dev ו-prod ב-GKE בפרויקטים שלהם. Google Cloud

    פלט לדוגמה:

    Waiting for Feature Config Management to be created...done.
    ⭐️ Done registering clusters.
    

הגדרת סנכרון תצורות

עכשיו שיצרתם ורשמתם את האשכולות שלכם, תוכלו להתקין את סנכרון תצורות ולאמת את ההתקנה.

התקנת סנכרון תצורות

כדי להתקין את סנכרון תצורות, מריצים את הסקריפט install-config-sync.sh באשכול הפיתוח ובאשכול הייצור:

./install-config-sync.sh

הפלט אמור להיראות כך:

🔁 Installing ConfigSync on the dev cluster...
Updated property [core/project].
Switched to context "DEV_CLUSTER".
Waiting for Feature Config Management to be updated...done.
🔁 Installing ConfigSync on the prod cluster...
Updated property [core/project].
Switched to context "PROD_CLUSTER".
Waiting for Feature Config Management to be updated...done.

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

אימות ההגדרות את ההגדרות

בקטע הזה בודקים שהאשכולות מסתנכרנים עם ההגדרות במאגר:

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

    nomos status
    

    אפשר לראות שגם אשכול הפיתוח וגם אשכול הייצור מסונכרנים עכשיו עם המאגרים המתאימים שלהם:

    gke_DEV_PROJECT_ID_us-central1-c_dev
      --------------------
      <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/dev@main
      SYNCED   8f2e196f
      Managed resources:
         NAMESPACE   NAME                                                 STATUS
                     clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                     namespace/default                                    Current
                     namespace/foo                                        Current
         default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
         foo         serviceaccount/foo-ksa-dev                           Current
    
    *gke_PROD_PROJECT_ID_us-central1-c_prod
       --------------------
       <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/prod@main
       SYNCED   c91502ee
       Managed resources:
          NAMESPACE   NAME                                                 STATUS
                      clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                      namespace/default                                    Current
                      namespace/foo                                        Current
          default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
          foo         serviceaccount/foo-ksa-prod                          Current
    
      ```
    
  2. משתמשים ב-kubectl כדי לעבור לאשכול הפיתוח:

    kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
    
  3. כדי לוודא שהמשאבים מסונכרנים, מקבלים מרחבי שמות. מרחב השמות foo אמור להופיע.

    kubectl get namespace
    

    פלט לדוגמה:

    NAME                           STATUS   AGE
    config-management-monitoring   Active   9m38s
    config-management-system       Active   9m38s
    default                        Active   47h
    foo                            Active   9m5s
    kube-node-lease                Active   47h
    kube-public                    Active   47h
    kube-system                    Active   47h
    resource-group-system          Active   9m30s
    

    הגדרתם עכשיו עיבוד אוטומטי של הגדרות לסביבת פיתוח ולסביבת ייצור, בכמה פרויקטים וסביבות של Google Cloud .

הסרת המשאבים

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

מחיקת כל המשאבים

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

./cleanup.sh

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

  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.

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