הרצה של עומסי עבודה מלאים בקנה מידה גדול ב-GKE

במדריך הזה נסביר איך להפעיל אפליקציית אינטרנט שמגובה במסד נתונים רלציוני עם זמינות גבוהה בקנה מידה גדול ב-Google Kubernetes Engine ‏ (GKE).

אפליקציית הדוגמה שמשמשת במדריך הזה היא Bank of Anthos, אפליקציית אינטרנט מבוססת-HTTP שמדמה רשת לעיבוד תשלומים של בנק. כדי לפעול, Bank of Anthos משתמש בכמה שירותים. המדריך הזה מתמקד בחלק הקדמי של האתר ובמסדי הנתונים הרלציוניים של PostgreSQL שמגבים את השירותים של Bank of Anthos. מידע נוסף על Bank of Anthos, כולל הארכיטקטורה שלו והשירותים שהוא פורס, זמין בBank of Anthos ב-GitHub.

מטרות

  • יוצרים ומגדירים אשכול GKE.
  • פריסת אפליקציית אינטרנט לדוגמה ומסד נתונים PostgreSQL עם זמינות גבוהה.
  • מגדירים התאמה אוטומטית לעומס (autoscaling) של אפליקציית האינטרנט ושל מסד הנתונים.
  • סימולציה של עליות חדות בתנועת הגולשים באמצעות מחולל עומסים.
  • לצפות בהגדלה או בהקטנה של השירותים.

עלויות

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

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

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

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

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

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

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

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

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

  7. מפעילים את GKE API:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable container.googleapis.com
  8. התקינו את ה-CLI של Google Cloud.

  9. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  10. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  11. יוצרים או בוחרים Google Cloud פרויקט.

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

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

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

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

  13. מפעילים את GKE API:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable container.googleapis.com
  14. מתקינים את Helm CLI.

הכנת הסביבה

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

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
    cd bank-of-anthos/
    
  2. הגדרת משתני סביבה:

    PROJECT_ID=PROJECT_ID
    GSA_NAME=bank-of-anthos
    GSA_EMAIL=bank-of-anthos@${PROJECT_ID}.iam.gserviceaccount.com
    KSA_NAME=default
    

    מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud .

הגדרת האשכול וחשבונות השירות

  1. יצירת אשכול:

    gcloud container clusters create-auto bank-of-anthos --location=us-central1
    

    יכול להיות שיחלפו עד חמש דקות עד שהאשכול יתחיל לפעול.

  2. יוצרים חשבון שירות ב-IAM:

    gcloud iam service-accounts create bank-of-anthos
    
  3. נותנים גישה לחשבון השירות ב-IAM:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role roles/cloudtrace.agent \
      --member "serviceAccount:bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role roles/monitoring.metricWriter \
      --member "serviceAccount:bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com"
    gcloud iam service-accounts add-iam-policy-binding "bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com" \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[default/default]"
    

    בשלב הזה ניתנת הגישה הבאה:

    • roles/cloudtrace.agent: כתיבת נתוני מעקב כמו מידע על זמן האחזור אל Trace.
    • roles/monitoring.metricWriter: כתיבת מדדים ל-Cloud Monitoring.
    • roles/iam.workloadIdentityUser: מאפשרים לחשבון שירות של Kubernetes להשתמש ב-איחוד זהויות של עומסי עבודה ל-GKE כדי לפעול כחשבון שירות של IAM.
  4. מגדירים את חשבון השירות של Kubernetes במרחב השמות default כך שיפעל כחשבון השירות של IAM שיצרתם:default

    kubectl annotate serviceaccount default \
        iam.gke.io/gcp-service-account=bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com
    

    כך קבוצות ה-Pod שמשתמשות בחשבון השירות של Kubernetes במרחב השמות default יכולות לגשת לאותם משאבים של חשבון השירות ב-IAM.default Google Cloud

פריסת Bank of Anthos ו-PostgreSQL

בקטע הזה מתקינים את Bank of Anthos ואת מסד הנתונים PostgreSQL במצב זמינות גבוהה (HA), שמאפשר להגדיל או להקטין את מספר העותקים של שרת מסד הנתונים באופן אוטומטי. אם רוצים לראות את הסקריפטים, את תרשים Helm ואת מניפסטים של Kubernetes שבהם נעשה שימוש בקטע הזה, אפשר לעיין במאגר Bank of Anthos ב-GitHub.

  1. פורסים את סכימת מסד הנתונים ואת סקריפט שפת הגדרת הנתונים (DDL):

    kubectl create configmap initdb \
        --from-file=src/accounts/accounts-db/initdb/0-accounts-schema.sql \
        --from-file=src/accounts/accounts-db/initdb/1-load-testdata.sql \
        --from-file=src/ledger/ledger-db/initdb/0_init_tables.sql \
        --from-file=src/ledger/ledger-db/initdb/1_create_transactions.sh
    
  2. מתקינים את PostgreSQL באמצעות תרשים Helm לדוגמה:

    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm install accounts-db bitnami/postgresql-ha \
        --version 10.0.1 \
        --values extras/postgres-hpa/helm-postgres-ha/values.yaml \
        --set="postgresql.initdbScriptsCM=initdb" \
        --set="postgresql.replicaCount=1" \
        --wait
    

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

  3. פורסים את Bank of Anthos:

    kubectl apply -f extras/jwt/jwt-secret.yaml
    kubectl apply -f extras/postgres-hpa/kubernetes-manifests
    

    השלמת הפעולה עשויה להימשך כמה דקות.

נקודת ביניים: אימות ההגדרה

  1. בודקים שכל ה-Pods של Bank of Anthos פועלים:

    kubectl get pods
    

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

    NAME                                  READY   STATUS
    accounts-db-pgpool-57ffc9d685-c7xs8   3/3     Running
    accounts-db-postgresql-0              1/1     Running
    balancereader-57b59769f8-xvp5k        1/1     Running
    contacts-54f59bb669-mgsqc             1/1     Running
    frontend-6f7fdc5b65-h48rs             1/1     Running
    ledgerwriter-cd74db4cd-jdqql          1/1     Running
    pgpool-operator-5f678457cd-cwbhs      1/1     Running
    transactionhistory-5b9b56b5c6-sz9qz   1/1     Running
    userservice-f45b46b49-fj7vm           1/1     Running
    
  2. בודקים שאפשר לגשת לחלק הקדמי של האתר:

    1. מציאת כתובת ה-IP החיצונית של שירות frontend:

      kubectl get ingress frontend
      

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

      NAME       CLASS    HOSTS   ADDRESS         PORTS   AGE
      frontend   <none>   *       203.0.113.9     80      12m
      
    2. בדפדפן, עוברים לכתובת ה-IP החיצונית. מוצג דף הכניסה של Bank of Anthos. אם אתם רוצים לדעת יותר, אתם יכולים לעיין בבקשה.

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

שינוי קנה מידה אוטומטי של אפליקציית האינטרנט ומסד הנתונים של PostgreSQL

ב-GKE Autopilot, המערכת משנה את גודל משאבי המחשוב של האשכול באופן אוטומטי בהתאם למספר עומסי העבודה באשכול. כדי לשנות באופן אוטומטי את מספר ה-Pods באשכול בהתאם למדדי משאבים, צריך להטמיע התאמה אוטומטית לעומס של Pods ב-Kubernetes. אפשר להשתמש במדדי המעבד והזיכרון המובנים של Kubernetes, או במדדים מותאמים אישית כמו בקשות HTTP לשנייה או כמות הצהרות SELECT, שנלקחים מ-Cloud Monitoring.

בקטע הזה תבצעו את הפעולות הבאות:

  1. מגדירים התאמה אופקית של קבוצות Pod לעומס (Horizontal Pod Autoscaling) למיקרו-שירותים של Bank of Anthos באמצעות מדדים מובנים ומדדים מותאמים אישית.
  2. מדמים עומס באפליקציית Bank of Anthos כדי להפעיל אירועים של התאמה אוטומטית לעומס.
  3. שימו לב איך מספר ה-Pods והצמתים באשכול גדל וקטן באופן אוטומטי בתגובה לעומס.

הגדרה של איסוף מדדים מותאמים אישית

כדי לקרוא מדדים מותאמים אישית מ-Monitoring, צריך לפרוס את המתאם Custom Metrics - Stackdriver Adapter באשכול.

  1. פורסים את המתאם:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter.yaml
    
  2. מגדירים את המתאם כך שישתמש באיחוד זהויות של עומסי עבודה ל-GKE כדי לקבל מדדים:

    1. מגדירים את חשבון השירות ב-IAM:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com" \
          --role roles/monitoring.viewer
      gcloud iam service-accounts add-iam-policy-binding bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:PROJECT_ID.svc.id.goog[custom-metrics/custom-metrics-stackdriver-adapter]"
      
    2. מוסיפים הערה לחשבון השירות ב-Kubernetes שבו המתאם משתמש:

      kubectl annotate serviceaccount custom-metrics-stackdriver-adapter \
          --namespace=custom-metrics \
        iam.gke.io/gcp-service-account=bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com
      
    3. מפעילים מחדש את הפריסה של המתאם כדי להפיץ את השינויים:

      kubectl rollout restart deployment custom-metrics-stackdriver-adapter \
          --namespace=custom-metrics
      

הגדרת התאמה אוטומטית לעומס במסד הנתונים

כשפרסתם את Bank of Anthos ואת PostgreSQL מוקדם יותר במדריך הזה, פרסתם את מסד הנתונים כ-StatefulSet עם עותק משוכפל ראשי לקריאה/כתיבה כדי לטפל בכל הצהרות ה-SQL הנכנסות. בקטע הזה, מגדירים את ההתאמה האופקית של קבוצות Pod לעומס כדי להוסיף רפליקות חדשות במצב המתנה לקריאה בלבד, שיטפלו בהצהרות SELECT נכנסות. דרך טובה להפחית את העומס על כל עותק היא להפיץ את משפטי SELECT, שהם פעולות קריאה. פריסת PostgreSQL כוללת כלי בשם Pgpool-II שמבצע את איזון העומסים הזה ומשפר את התפוקה של המערכת.

מערכת PostgreSQL מייצאת את מדד הצהרת SELECT כמדד Prometheus. תשתמשו בכלי קל משקל לייצוא מדדים בשם prometheus-to-sd כדי לשלוח את המדדים האלה ל-Cloud Monitoring בפורמט נתמך.

  1. בודקים את אובייקט HorizontalPodAutoscaler:

    # Copyright 2022 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    ---
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: accounts-db-postgresql
    spec:
      behavior:
        scaleUp:
          stabilizationWindowSeconds: 0
          policies:
          - type: Percent
            value: 100
            periodSeconds: 5
          selectPolicy: Max
      scaleTargetRef:
        apiVersion: apps/v1
        kind: StatefulSet
        name: accounts-db-postgresql
      minReplicas: 1
      maxReplicas: 5
      metrics:
      - type: External
        external:
          metric:
            name: custom.googleapis.com|mypgpool|pgpool2_pool_backend_stats_select_cnt
          target:
              type: AverageValue
              averageValue: "15"
    

    קובץ המניפסט הזה:

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

    kubectl apply -f extras/postgres-hpa/hpa/postgresql-hpa.yaml
    

הגדרת התאמה אוטומטית לעומס (autoscaling) לממשק האינטרנט

בקטע Deploy Bank of Anthos and PostgreSQL (פריסת Bank of Anthos ו-PostgreSQL), פרסתם את ממשק האינטרנט של Bank of Anthos. ככל שמספר המשתמשים גדל, שירות userservice צורך יותר משאבי CPU. בקטע הזה, מגדירים התאמה אוטומטית אופקית של Podים עבור פריסת userservice כששיעור השימוש במעבד של ה-Podים הקיימים גבוה מ-60%, ועבור פריסת frontend כשמספר בקשות ה-HTTP הנכנסות למאזן העומסים גבוה מ-5 לשנייה.

הגדרת התאמה אוטומטית לעומס (autoscaling) לפריסת userservice

  1. בודקים את HorizontalPodAutoscaler המניפסט של userservice הפריסה:

    # Copyright 2022 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    ---
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: userservice
    spec:
      behavior:
        scaleUp:
          stabilizationWindowSeconds: 0
          policies:
            - type: Percent
              value: 100
              periodSeconds: 5
          selectPolicy: Max
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: userservice
      minReplicas: 5
      maxReplicas: 50
      metrics:
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: 60
    

    קובץ המניפסט הזה:

    • מגדיר את המספר המקסימלי של העותקים במהלך הגדלה ל-50.
    • מגדיר את המספר המינימלי במהלך צמצום הקיבולת ל-5.
    • משתמש במדד מובנה של Kubernetes כדי לקבל החלטות לגבי שינוי גודל. בדוגמה הזו, המדד הוא ניצול המעבד (CPU), ויעד הניצול הוא 60%, כדי להימנע מניצול יתר וגם מניצול חסר.
  2. מחילים את המניפסט על האשכול:

    kubectl apply -f extras/postgres-hpa/hpa/userservice.yaml
    

הגדרת התאמה אוטומטית לעומס (autoscaling) לפריסת הקצה הקדמי

  1. בודקים את HorizontalPodAutoscaler המניפסט של userservice הפריסה:

    # Copyright 2022 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    ---
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: frontend
    spec:
      behavior:
        scaleUp:
          stabilizationWindowSeconds: 0
          policies:
            - type: Percent
              value: 100
              periodSeconds: 5
          selectPolicy: Max
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: frontend
      minReplicas: 5
      maxReplicas: 25
      metrics:
        - type: External
          external:
            metric:
              name: loadbalancing.googleapis.com|https|request_count
              selector:
                matchLabels:
                  resource.labels.forwarding_rule_name: FORWARDING_RULE_NAME
            target:
              type: AverageValue
              averageValue: "5"
    

    קובץ המניפסט הזה כולל את השדות הבאים:

    • spec.scaleTargetRef: משאב Kubernetes לשינוי גודל.
    • spec.minReplicas: מספר העותקים המינימלי, שהוא 5 בדוגמה הזו.
    • spec.maxReplicas: המספר המקסימלי של העותקים, שהוא 25 בדוגמה הזו.
    • spec.metrics.*: המדד שבו רוצים להשתמש. בדוגמה הזו, זהו מספר בקשות ה-HTTP לשנייה, שהוא מדד מותאם אישית מ-Cloud Monitoring שסופק על ידי המתאם שפרסתם.
    • spec.metrics.external.metric.selector.matchLabels: תווית המשאב הספציפית לסינון כשמשתמשים בשינוי גודל אוטומטי.
  2. מאתרים את השם של כלל ההעברה ממאזן העומסים אל הפריסה frontend:

    export FW_RULE=$(kubectl get ingress frontend -o=jsonpath='{.metadata.annotations.ingress\.kubernetes\.io/forwarding-rule}')
    echo $FW_RULE
    

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

    k8s2-fr-j76hrtv4-default-frontend-wvvf7381
    
  3. מוסיפים את כלל ההעברה למניפסט:

    sed -i "s/FORWARDING_RULE_NAME/$FW_RULE/g" "extras/postgres-hpa/hpa/frontend.yaml"
    

    הפקודה הזו מחליפה את FORWARDING_RULE_NAME בכלל ההעברה ששמרתם.

  4. מחילים את המניפסט על האשכול:

    kubectl apply -f extras/postgres-hpa/hpa/frontend.yaml
    

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

קבלת המצב של משאבי HorizontalPodAutoscaler:

kubectl get hpa

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

NAME                     REFERENCE                            TARGETS             MINPODS   MAXPODS   REPLICAS   AGE
accounts-db-postgresql   StatefulSet/accounts-db-postgresql   10905m/15 (avg)     1         5         2          5m2s
contacts                 Deployment/contacts                  1%/70%              1         5         1          11m
frontend                 Deployment/frontend                  <unknown>/5 (avg)   5         25        1          34s
userservice              Deployment/userservice               0%/60%              5         50        5          4m56s

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

הדמיית עומס והתבוננות בהתאמת הגודל של GKE

‫Bank of Anthos כולל loadgenerator שירות שמאפשר לדמות תנועה כדי לבדוק את קנה המידה של האפליקציה תחת עומס. בקטע הזה נסביר איך לפרוס את שירות loadgenerator, ליצור עומס ולראות את הגידול שמתקבל.

פריסת מחולל בדיקות העומס

  1. יוצרים משתנה סביבה עם כתובת ה-IP של מאזן העומסים של Bank of Anthos:

    export LB_IP=$(kubectl get ingress frontend -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo $LB_IP
    

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

    203.0.113.9
    
  2. מוסיפים את כתובת ה-IP של מאזן העומסים למניפסט:

    sed -i "s/FRONTEND_IP_ADDRESS/$LB_IP/g" "extras/postgres-hpa/loadgenerator.yaml"
    
  3. מחילים את המניפסט על האשכול:

    kubectl apply -f  extras/postgres-hpa/loadgenerator.yaml
    

מחולל העומסים מתחיל להוסיף משתמש אחד בכל שנייה, עד 250 משתמשים.

סימולציה של עומס

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

  1. חושפים את ממשק האינטרנט של מחולל העומסים באופן מקומי:

    kubectl port-forward svc/loadgenerator 8080
    

    אם מופיעה הודעת שגיאה, נסו שוב כשה-Pod פועל.

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

    • אם אתם משתמשים במעטפת מקומית, פותחים דפדפן ועוברים אל http://127.0.0.1:8080.
    • אם משתמשים ב-Cloud Shell, לוחצים על תצוגה מקדימה באינטרנט ואז על תצוגה מקדימה ביציאה 8080.
  3. לוחצים על הכרטיסייה תרשימים כדי לראות את הביצועים לאורך זמן.

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

    kubectl get hpa -w
    

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

    NAME                     REFERENCE                            TARGETS          MINPODS   MAXPODS   REPLICAS
    accounts-db-postgresql   StatefulSet/accounts-db-postgresql   8326m/15 (avg)   1         5         5
    contacts                 Deployment/contacts                  51%/70%          1         5         2
    frontend                 Deployment/frontend                  5200m/5 (avg)    5         25        13
    userservice              Deployment/userservice               71%/60%          5         50        17
    
  5. פותחים חלון טרמינל נוסף ובודקים את מספר הצמתים באשכול:

    gcloud container clusters list \
        --filter='name=bank-of-anthos' \
        --format='table(name, currentMasterVersion, currentNodeVersion, currentNodeCount)' \
        --location="us-central1"
    
  6. מספר הצמתים גדל מהכמות ההתחלתית של שלושה צמתים כדי לאכלס את העותקים החדשים.

  7. פותחים את הממשק של מחולל העומסים ולוחצים על Stop (הפסקה) כדי לסיים את הבדיקה.

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

הסרת המשאבים

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

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

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

  1. מוחקים את משאבי Kubernetes לדוגמה:

    kubectl delete \
        -f extras/postgres-hpa/loadgenerator.yaml \
        -f extras/postgres-hpa/hpa \
        -f extras/postgres-hpa/kubernetes-manifests \
        -f extras/jwt/jwt-secret.yaml \
        -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter.yaml
    
  2. מחיקת מסד הנתונים של PostgreSQL:

    helm uninstall accounts-db
    kubectl delete pvc -l "app.kubernetes.io/instance=accounts-db"
    kubectl delete configmaps initdb
    
  3. מוחקים את אשכול GKE ואת חשבון השירות של IAM:

    gcloud iam service-accounts delete "bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com" --quiet
    gcloud container clusters delete "bank-of-anthos" --location="us-central1" --quiet
    

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

    כדי למחוק Google Cloud פרויקט:

    gcloud projects delete PROJECT_ID

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