שדרוג סביבת GKE מרובת אשכולות באמצעות Multi Cluster Ingress

Last reviewed 2022-12-15 UTC

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

השוואה מפורטת בין Multi Cluster Ingress ‏ (MCI),‏ Multi-cluster Gateway ‏(MCG) ומאזן עומסים עם Standalone Network Endpoint Groups ‏ (LB ו-Standalone NEGs) זמינה במאמר בחירת API לאיזון עומסים בין כמה אשכולות ב-GKE.

המסמך הזה מיועד לאדמינים שאחראים על תחזוקת צי של אשכולות GKE. Google Cloud

מומלץ לשדרג אוטומטית את אשכולות GKE. שדרוג אוטומטי הוא דרך מנוהלת לחלוטין לעדכן אוטומטית את האשכולות (מישור הבקרה והצמתים) לפי לוח זמנים לפרסום שנקבע על ידיGoogle Cloud. הפעולה הזו לא דורשת התערבות של המפעיל. עם זאת, אם אתם רוצים יותר שליטה על האופן שבו משדרגים את האשכולות ומתי, במדריך הזה מוסבר איך לשדרג כמה אשכולות שבהם האפליקציות שלכם פועלות בכל האשכולות. לאחר מכן, הוא משתמש ב-Multi Cluster Ingress כדי לרוקן אשכול אחד בכל פעם לפני השדרוג.

ארכיטקטורה

המדריך הזה משתמש בארכיטקטורה הבאה. יש שלושה אשכולות בסך הכול: שני אשכולות (blue ו-green) פועלים כאשכולות זהים עם אותה אפליקציה שמוצבת בהם, ואשכול אחד (ingress-config) פועל כאשכול של מישור הבקרה שמגדיר את Multi Cluster Ingress. במדריך הזה תפרסו אפליקציה לדוגמה בשני אשכולות של אפליקציות (אשכולות blue ו-green).

ארכיטקטורה של שני אשכולות זהים ואשכול אחד של מישור בקרה.

מטרות

  • יוצרים שלושה אשכולות GKE ורושמים אותם כ-Fleet.
  • מגדירים אשכול GKE אחד (ingress-config) כאשכול ההגדרות המרכזי.
  • פריסת אפליקציה לדוגמה באשכולות GKE האחרים.
  • מגדירים Multi Cluster Ingress כדי לשלוח תנועת לקוחות לאפליקציה שפועלת בשני אשכולות האפליקציות.
  • מגדירים מחולל עומסים לאפליקציה ומגדירים מעקב.
  • מסירים (מרוקנים) מקבץ אפליקציות אחד מ-Ingress מרובה מקבצים ומשדרגים את המקבץ המרוקן.
  • העברת תנועה חזרה לאשכול המשודרג באמצעות Multi Cluster Ingress.

עלויות

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

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

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

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

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

  1. כדי לבצע את ההדרכה הזו, צריך להגדיר Multi Cluster Ingress כך שההגדרות הבאות יהיו מוגדרות:
    • שני אשכולות או יותר עם אותן אפליקציות, כמו מרחבי שמות, פריסות ושירותים, שפועלים בכל האשכולות.
    • השדרוג האוטומטי מושבת בכל האשכולות.
    • אשכולות הם אשכולות שמותאמים ל-VPC שמשתמשים בטווחי כתובות IP של כינויים
    • הפעלת איזון עומסים ב-HTTP (מופעל כברירת מחדל).
    • הערך של gcloud --version חייב להיות 369 ומעלה. השלבים לרישום אשכול GKE תלויים בגרסה הזו או בגרסה חדשה יותר.
  2. 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

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

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  5. מגדירים את פרויקט ברירת המחדל:

    export PROJECT=$(gcloud info --format='value(config.project)')
    gcloud config set project ${PROJECT}
    
  6. מפעילים את ממשקי ה-API של GKE,‏ Hub ו-multiclusteringress:

    gcloud services enable container.googleapis.com \
                           gkehub.googleapis.com \
                           multiclusteringress.googleapis.com \
                           multiclusterservicediscovery.googleapis.com
    
  7. הגדרת הסביבה

    1. ב-Cloud Shell, משכפלים את המאגר כדי לקבל את הקבצים של המדריך הזה:

      cd ${HOME}
      git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
      
    2. יוצרים ספרייה בשם WORKDIR:

      cd kubernetes-engine-samples/networking/gke-multicluster-upgrade-mci/
      export WORKDIR=`pwd`
      

    יצירה ורישום של אשכולות GKE ב-Hub

    בקטע הזה יוצרים שלושה אשכולות GKE ורושמים אותם ב-GKE Hub.

    יצירת אשכולות GKE

    1. ב-Cloud Shell, יוצרים שלושה אשכולות GKE:

      gcloud container clusters create ingress-config --location us-west1-a \
      --release-channel=None --no-enable-autoupgrade --num-nodes=4 \
      --enable-ip-alias --workload-pool=${PROJECT}.svc.id.goog --quiet --async
      gcloud container clusters create blue --location us-west1-b --num-nodes=3 \
      --release-channel=None --no-enable-autoupgrade --enable-ip-alias \
      --workload-pool=${PROJECT}.svc.id.goog --quiet --async
      gcloud container clusters create green --location us-west1-c --num-nodes=3 \
      --release-channel=None --no-enable-autoupgrade --enable-ip-alias \
      --workload-pool=${PROJECT}.svc.id.goog --quiet
      

      לצורך המדריך הזה, יוצרים את האשכולות באזור אחד, בשלושה אזורים שונים: us-west1-a,‏ us-west1-b ו-us-west1-c. מידע נוסף על אזורים ותחומים זמין במאמר מיקום גיאוגרפי ואזורים.

    2. ממתינים כמה דקות עד שכל האשכולות נוצרים בהצלחה. מוודאים שהאשכולות פועלים:

      gcloud container clusters list
      

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

      NAME: ingress-config
      LOCATION: us-west1-a
      MASTER_VERSION: 1.22.8-gke.202
      MASTER_IP: 35.233.186.135
      MACHINE_TYPE: e2-medium
      NODE_VERSION: 1.22.8-gke.202
      NUM_NODES: 4
      STATUS: RUNNING
      
      NAME: blue
      LOCATION: us-west1-b
      MASTER_VERSION: 1.22.8-gke.202
      MASTER_IP: 34.82.35.222
      MACHINE_TYPE: e2-medium
      NODE_VERSION: 1.22.8-gke.202
      NUM_NODES: 3
      STATUS: RUNNING
      
      NAME: green
      LOCATION: us-west1-c
      MASTER_VERSION: 1.22.8-gke.202
      MASTER_IP: 35.185.204.26
      MACHINE_TYPE: e2-medium
      NODE_VERSION: 1.22.8-gke.202
      NUM_NODES: 3
      STATUS: RUNNING
      
    3. יוצרים קובץ kubeconfig ומתחברים לכל האשכולות כדי ליצור רשומות בקובץ kubeconfig:

      touch gke-upgrade-kubeconfig
      export KUBECONFIG=gke-upgrade-kubeconfig
      gcloud container clusters get-credentials ingress-config \
          --location us-west1-a --project ${PROJECT}
      gcloud container clusters get-credentials blue --location us-west1-b \
          --project ${PROJECT}
      gcloud container clusters get-credentials green --location us-west1-c \
          --project ${PROJECT}
      

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

    4. מוודאים שיש שלושה אשכולות בקובץ kubeconfig:

      kubectl config view -ojson | jq -r '.clusters[].name'
      

      הפלט שיתקבל:

      gke_gke-multicluster-upgrades_us-west1-a_ingress-config
      gke_gke-multicluster-upgrades_us-west1-b_blue
      gke_gke-multicluster-upgrades_us-west1-c_green
      
    5. כדאי לקבל את ההקשר של שלושת האשכולות לשימוש מאוחר יותר:

      export INGRESS_CONFIG_CLUSTER=$(kubectl config view -ojson | jq \
          -r '.clusters[].name' | grep ingress-config)
      export BLUE_CLUSTER=$(kubectl config view -ojson | jq \
          -r '.clusters[].name' | grep blue)
      export GREEN_CLUSTER=$(kubectl config view -ojson | jq \
          -r '.clusters[].name' | grep green)
      echo -e "${INGRESS_CONFIG_CLUSTER}\n${BLUE_CLUSTER}\n${GREEN_CLUSTER}"
      

      הפלט שיתקבל:

      gke_gke-multicluster-upgrades_us-west1-a_ingress-config
      gke_gke-multicluster-upgrades_us-west1-b_blue
      gke_gke-multicluster-upgrades_us-west1-c_green
      

    רישום אשכולות GKE למכשירים בארגון

    רישום האשכולות לצי מאפשר לכם להפעיל את אשכולות Kubernetes בסביבות היברידיות. באשכולות שרשומים ל-Fleet אפשר להשתמש בתכונות מתקדמות של GKE, כמו Multi Cluster Ingress. כדי לרשום אשכול GKE לצי, אפשר להשתמש ישירות בחשבון שירות Google Cloud, או להשתמש בגישה המומלצת של איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE, שמאפשרת לחשבון שירות של Kubernetes באשכול GKE לפעול כחשבון שירות לניהול זהויות והרשאות גישה.

    1. רושמים את שלושת האשכולות כ-Fleet:

      gcloud container fleet memberships register ingress-config \
          --gke-cluster=us-west1-a/ingress-config \
          --enable-workload-identity
      
      gcloud container fleet memberships register blue \
          --gke-cluster=us-west1-b/blue \
          --enable-workload-identity
      
      gcloud container fleet memberships register green \
          --gke-cluster=us-west1-c/green \
          --enable-workload-identity
      
    2. מוודאים שהאשכולות רשומים:

      gcloud container fleet memberships list
      

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

      NAME: blue
      EXTERNAL_ID: 401b4f08-8246-4f97-a6d8-cf1b78c2a91d
      
      NAME: green
      EXTERNAL_ID: 8041c36a-9d42-40c8-a67f-54fcfd84956e
      
      NAME: ingress-config
      EXTERNAL_ID: 65ac48fe-5043-42db-8b1e-944754a0d725
      
    3. מגדירים את אשכול ingress-config כאשכול ההגדרות של Multi Cluster Ingress על ידי הפעלת התכונה multiclusteringress דרך Hub:

      gcloud container fleet ingress enable --config-membership=ingress-config
      

      הפקודה שלמעלה מוסיפה את MulticlusterIngress ואת MulticlusterService CRD (הגדרות מותאמות אישית של משאבים) לאשכול ingress-config. השלמת הפקודה הזו נמשכת כמה דקות. צריך להמתין לפני שעוברים לשלב הבא.

    4. מוודאים שהאשכול ingress-cluster הוגדר בהצלחה ל-Multi Cluster Ingress:

      watch gcloud container fleet ingress describe
      

      מחכים עד שהפלט ייראה כך:

      createTime: '2022-07-05T10:21:40.383536315Z'
      membershipStates:
        projects/662189189487/locations/global/memberships/blue:
          state:
            code: OK
            updateTime: '2022-07-08T10:59:44.230329189Z'
        projects/662189189487/locations/global/memberships/green:
          state:
            code: OK
            updateTime: '2022-07-08T10:59:44.230329950Z'
        projects/662189189487/locations/global/memberships/ingress-config:
          state:
            code: OK
            updateTime: '2022-07-08T10:59:44.230328520Z'
      name: projects/gke-multicluster-upgrades/locations/global/features/multiclusteringress
      resourceState:
        state: ACTIVE
      spec:
        multiclusteringress:
          configMembership: projects/gke-multicluster-upgrades/locations/global/memberships/ingress-config
      state:
        state:
          code: OK
          description: Ready to use
          updateTime: '2022-07-08T10:57:33.303543609Z'
      updateTime: '2022-07-08T10:59:45.247576318Z'
      

      כדי לצאת מהפקודה watch, מקישים על Control+C.

    פריסת אפליקציה לדוגמה באשכולות הכחול והירוק

    1. ב-Cloud Shell, פורסים את אפליקציית הדוגמה whereami באשכולות blue ו-green:

      kubectl --context ${BLUE_CLUSTER} apply -f ${WORKDIR}/application-manifests
      kubectl --context ${GREEN_CLUSTER} apply -f ${WORKDIR}/application-manifests
      
    2. ממתינים כמה דקות ומוודאים שלכל ה-Pods באשכולות blue ו-green יש סטטוס Running:

      kubectl --context ${BLUE_CLUSTER} get pods
      kubectl --context ${GREEN_CLUSTER} get pods
      

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

      NAME                                   READY   STATUS    RESTARTS   AGE
      whereami-deployment-756c7dc74c-zsmr6   1/1     Running   0          74s
      NAME                                   READY   STATUS    RESTARTS   AGE
      whereami-deployment-756c7dc74c-sndz7   1/1     Running   0          68s.
      

    הגדרת תעבורת נתונים נכנסת (ingress) של אשכול מרובה

    בקטע הזה, יוצרים Ingress מרובה אשכולות ששולח תנועה לאפליקציה שפועלת באשכולות blue ו-green. אתם משתמשים ב-Cloud Load Balancing כדי ליצור מאזן עומסים שמשתמש באפליקציית whereami גם באשכולות blue וגם באשכולות green כבק-אנד. כדי ליצור את מאזן העומסים, צריך שני משאבים: MultiClusterIngress וMultiClusterServices אחד או יותר. האובייקטים MultiClusterIngress ו-MultiClusterService הם אנלוגים של כמה אשכולות למשאבי Kubernetes Ingress ו-Service הקיימים שמשמשים בהקשר של אשכול יחיד.

    1. ב-Cloud Shell, פורסים את המשאב MulticlusterIngress לאשכול ingress-config:

      kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mci.yaml
      

      הפלט שיתקבל:

      multiclusteringress.networking.gke.io/whereami-mci created
      
    2. פורסים את משאב MulticlusterService באשכול ingress-config:

      kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yaml
      

      הפלט שיתקבל:

      multiclusterservice.networking.gke.io/whereami-mcs created
      
    3. כדי להשוות בין שני המשאבים:

      • בודקים את המשאב MulticlusterIngress:

        kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusteringress -o yaml
        

        הפלט מכיל את הפרטים הבאים:

        spec:
          template:
            spec:
              backend:
                serviceName: whereami-mcs
                servicePort: 8080
        

        המשאב MulticlusterIngress דומה למשאב Kubernetes Ingress, אלא שהמפרט serviceName מצביע על משאב MulticlusterService.

      • בודקים את המשאב MulticlusterService:

        kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice -o yaml
        

        הפלט מכיל את הפרטים הבאים:

        spec:
          clusters:
          - link: us-west1-b/blue
          - link: us-west1-c/green
          template:
            spec:
              ports:
              - name: web
                port: 8080
                protocol: TCP
                targetPort: 8080
              selector:
                app: whereami
        

        המשאב MulticlusterService דומה למשאב Kubernetes Service, אבל יש לו מפרט clusters. הערך clusters הוא רשימת האשכולות הרשומים שבהם נוצר המשאב MulticlusterService.

      • מוודאים שמשאב MulticlusterIngress יצר מאזן עומסים עם שירות לקצה העורפי שמפנה למשאב MulticlusterService:

        watch kubectl --context ${INGRESS_CONFIG_CLUSTER} \
              get multiclusteringress -o jsonpath="{.items[].status.VIP}"
        

        התהליך עשוי להימשך עד 10 דקות. מחכים עד שהפלט ייראה כך:

        34.107.246.9
        

        כדי לצאת מהפקודה watch, לוחצים על Control+C.

    4. ב-Cloud Shell, מאתרים את כתובת ה-VIP של Cloud Load Balancing:

      export GCLB_VIP=$(kubectl --context ${INGRESS_CONFIG_CLUSTER} \
             get multiclusteringress -o json | jq -r '.items[].status.VIP') \
             && echo ${GCLB_VIP}
      

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

      34.107.246.9
      
    5. משתמשים ב-curl כדי לגשת למאזן העומסים ולאפליקציה שנפרסה:

      curl ${GCLB_VIP}
      

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

      {
        "cluster_name": "green",
        "host_header": "34.107.246.9",
        "pod_name": "whereami-deployment-756c7dc74c-sndz7",
        "pod_name_emoji": "😇",
        "project_id": "gke-multicluster-upgrades",
        "timestamp": "2022-07-08T14:26:07",
        "zone": "us-west1-c"
      }
      
    6. מריצים את הפקודה curl שוב ושוב. שימו לב שהבקשות מאוזנות בין האפליקציה whereami שפריסתה מתבצעת בשני אשכולות, blue ו-green.

    הגדרת מחולל העומסים

    בקטע הזה מגדירים שירות loadgenerator שמייצר תנועת לקוחות לכתובת ה-VIP של Cloud Load Balancing. קודם כל, התנועה נשלחת לאשכולות blue ו-green כי המשאב MulticlusterService מוגדר לשליחת תנועה לשני האשכולות. בהמשך, מגדירים את MulticlusterServiceהמשאב לשליחת תנועה לאשכול יחיד.

    1. מגדירים את קובץ המניפסט loadgenerator כדי לשלוח תעבורת לקוחות אל Cloud Load Balancing:

      TEMPLATE=loadgen-manifests/loadgenerator.yaml.templ && envsubst < ${TEMPLATE} > ${TEMPLATE%.*}
      
    2. פורסים את loadgenerator באשכול ingress-config:

      kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/loadgen-manifests
      
    3. מוודאים שלכל ה-Pods של loadgenerator באשכול ingress-config יש סטטוס של Running:

      kubectl --context ${INGRESS_CONFIG_CLUSTER} get pods
      

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

      NAME                             READY   STATUS    RESTARTS   AGE
      loadgenerator-5498cbcb86-hqscp   1/1     Running   0          53s
      loadgenerator-5498cbcb86-m2z2z   1/1     Running   0          53s
      loadgenerator-5498cbcb86-p56qb   1/1     Running   0          53s
      

      אם הסטטוס של אחד מה-Pods הוא לא Running, ממתינים כמה דקות ומריצים את הפקודה שוב.

    מעקב אחר התנועה

    בקטע הזה ננטר את התעבורה לאפליקציית whereami באמצעות מסוףGoogle Cloud .

    בקטע הקודם הגדרתם פריסת loadgenerator שמדמה תנועת לקוחות על ידי גישה לאפליקציית loadgenerator דרך כתובת ה-VIP של איזון העומסים ב-Cloud.whereami אפשר לעקוב אחרי המדדים האלה דרך מסוףGoogle Cloud . קודם מגדירים את המעקב כדי שאפשר יהיה לעקוב אחרי תהליך הריקון של האשכולות לצורך שדרוגים (כפי שמתואר בקטע הבא).

    1. יוצרים מרכז בקרה כדי להציג את התנועה שמגיעה ל-Multi Cluster Ingress:

      export DASH_ID=$(gcloud monitoring dashboards create \
          --config-from-file=dashboards/cloud-ops-dashboard.json \
          --format=json | jq  -r ".name" | awk -F '/' '{print $4}')
      

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

      Created [721b6c83-8f9b-409b-a009-9fdf3afb82f8]
      
    2. מדדים מ-Cloud Load Balancing זמינים במסוףGoogle Cloud . יוצרים את כתובת ה-URL:

      echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
      

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

      https://console.cloud.google.com/monitoring/dashboards/builder/721b6c83-8f9b-409b-a009-9fdf3afb82f8/?project=gke-multicluster-upgrades&timeDomain=1h"
      
    3. בדפדפן, עוברים לכתובת ה-URL שנוצרה על ידי הפקודה הקודמת.

      התנועה לאפליקציה לדוגמה מגיעה ממחולל העומסים לשני האשכולות blue ו-green (כפי שמצוין בשני האזורים שבהם האשכולות נמצאים). בתרשים המדדים של ציר הזמן מוצגת התנועה שמועברת לשני השרתים העורפיים.הערכים שמוצגים כשמעבירים את העכבר מעל k8s1- מציינים שקבוצת נקודות הקצה ברשת (NEGs) של שני השרתים הקדמיים MulticlusterServices פועלת באשכולות blue ו-green.

      תרשים מדדים של ציר זמן שמציג את התנועה שזורמת לשני השרתים העורפיים.

    הוצאה משימוש ושדרוג של אשכול blue

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

    כדי לנקז את אשכול blue, מעדכנים את המשאב MulticlusterService באשכול ingress-cluster ומסירים את אשכול blue מהמפרט clusters.

    ריקון האשכול הכחול

    1. ב-Cloud Shell, מעדכנים את המשאב MulticlusterService באשכול ingress-config:

      kubectl --context ${INGRESS_CONFIG_CLUSTER} \
                apply -f ${WORKDIR}/multicluster-manifests/mcs-green.yaml
      
    2. מוודאים שרק אשכול green מופיע במפרט clusters:

      kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \
              -o json | jq '.items[].spec.clusters'
      

      הפלט שיתקבל:

      [
        {
          "link": "us-west1-c/green"
        }
      ]
      

      רק אשכול green מופיע במפרט clusters, ולכן רק אשכול green נמצא במאגר לאיזון עומסים.

    3. אפשר לראות את המדדים של Cloud Load Balancing במסוףGoogle Cloud . יוצרים את כתובת ה-URL:

      echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
      
    4. בדפדפן, עוברים לכתובת ה-URL שנוצרה מהפקודה הקודמת.

      התרשים מראה שרק אשכול green מקבל תנועה.

      התנועה זורמת רק לאשכול &#39;ירוק&#39;.

    שדרוג אשכול blue

    עכשיו, כשלא מתקבלת יותר תנועת לקוחות באשכול blue, אפשר לשדרג את האשכול (מישור הבקרה והצמתים).

    1. ב-Cloud Shell, מאתרים את הגרסה הנוכחית של האשכולות:

      gcloud container clusters list
      

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

      NAME: ingress-config
      LOCATION: us-west1-a
      MASTER_VERSION: 1.22.8-gke.202
      MASTER_IP: 35.233.186.135
      MACHINE_TYPE: e2-medium
      NODE_VERSION: 1.22.8-gke.202
      NUM_NODES: 4
      STATUS: RUNNING
      
      NAME: blue
      LOCATION: us-west1-b
      MASTER_VERSION: 1.22.8-gke.202
      MASTER_IP: 34.82.35.222
      MACHINE_TYPE: e2-medium
      NODE_VERSION: 1.22.8-gke.202
      NUM_NODES: 3
      STATUS: RUNNING
      
      NAME: green
      LOCATION: us-west1-c
      MASTER_VERSION: 1.22.8-gke.202
      MASTER_IP: 35.185.204.26
      MACHINE_TYPE: e2-medium
      NODE_VERSION: 1.22.8-gke.202
      NUM_NODES: 3
      STATUS: RUNNING
      

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

    2. כדי לקבל את רשימת הגרסאות הזמינות של MasterVersions באזור:

      gcloud container get-server-config --location us-west1-b --format=json | jq \
      '.validMasterVersions[0:20]'
      

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

      [
        "1.24.1-gke.1400",
        "1.23.7-gke.1400",
        "1.23.6-gke.2200",
        "1.23.6-gke.1700",
        "1.23.6-gke.1501",
        "1.23.6-gke.1500",
        "1.23.5-gke.2400",
        "1.23.5-gke.1503",
        "1.23.5-gke.1501",
        "1.22.10-gke.600",
        "1.22.9-gke.2000",
        "1.22.9-gke.1500",
        "1.22.9-gke.1300",
        "1.22.8-gke.2200",
        "1.22.8-gke.202",
        "1.22.8-gke.201",
        "1.22.8-gke.200",
        "1.21.13-gke.900",
        "1.21.12-gke.2200",
        "1.21.12-gke.1700"
      ]
      
    3. כדי לקבל רשימה של גרסאות NodeVersions שזמינות באזור:

      gcloud container get-server-config --location us-west1-b --format=json | jq \
      '.validNodeVersions[0:20]'
      

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

      [
        "1.24.1-gke.1400",
        "1.23.7-gke.1400",
        "1.23.6-gke.2200",
        "1.23.6-gke.1700",
        "1.23.6-gke.1501",
        "1.23.6-gke.1500",
        "1.23.5-gke.2400",
        "1.23.5-gke.1503",
        "1.23.5-gke.1501",
        "1.22.10-gke.600",
        "1.22.9-gke.2000",
        "1.22.9-gke.1500",
        "1.22.9-gke.1300",
        "1.22.8-gke.2200",
        "1.22.8-gke.202",
        "1.22.8-gke.201",
        "1.22.8-gke.200",
        "1.22.7-gke.1500",
        "1.22.7-gke.1300",
        "1.22.7-gke.900"
      ]
      
    4. מגדירים משתנה סביבה לגרסה MasterVersion ו-NodeVersion שנמצאת ברשימות MasterVersions ו-NodeVersions, והיא גבוהה מהגרסה הנוכחית של אשכול blue, לדוגמה:

      export UPGRADE_VERSION="1.22.10-gke.600"
      

      במדריך הזה נעשה שימוש בגרסה 1.22.10-gke.600. יכול להיות שגרסאות האשכולות שלכם יהיו שונות, בהתאם לגרסאות שזמינות כשתסיימו את המדריך הזה. מידע נוסף על שדרוג זמין במאמר בנושא שדרוג אשכולות ומאגרי צמתים.

    5. משדרגים את הצומת control plane באשכול blue:

      gcloud container clusters upgrade blue \
          --location us-west1-b --master --cluster-version ${UPGRADE_VERSION}
      

      כדי לאשר את השדרוג, לוחצים על Y.

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

      אחרי שהעדכון מסתיים, הפלט הוא:

      Updated
      [https://container.googleapis.com/v1/projects/gke-multicluster-upgrades/zones/us-west1-b/clusters/blue].
      
    6. משדרגים את הצמתים באשכול blue:

      gcloud container clusters upgrade blue \
          --location=us-west1-b --node-pool=default-pool \
          --cluster-version ${UPGRADE_VERSION}
      

      כדי לאשר את העדכון, לוחצים על Y.

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

      אחרי שהשדרוג מסתיים, הפלט הוא:

      Upgrading blue... Done with 3 out of 3 nodes (100.0%): 3 succeeded...done.
      Updated [https://container.googleapis.com/v1/projects/gke-multicluster-upgrades/zones/us-west1-b/clusters/blue].
      
    7. מוודאים ששודרג האשכול blue:

      gcloud container clusters list
      

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

      NAME: ingress-config
      LOCATION: us-west1-a
      MASTER_VERSION: 1.22.8-gke.202
      MASTER_IP: 35.233.186.135
      MACHINE_TYPE: e2-medium
      NODE_VERSION: 1.22.8-gke.202
      NUM_NODES: 4
      STATUS: RUNNING
      
      NAME: blue
      LOCATION: us-west1-b
      MASTER_VERSION: 1.22.10-gke.600
      MASTER_IP: 34.82.35.222
      MACHINE_TYPE: e2-medium
      NODE_VERSION: 1.22.10-gke.600
      NUM_NODES: 3
      STATUS: RUNNING
      
      NAME: green
      LOCATION: us-west1-c
      MASTER_VERSION: 1.22.8-gke.202
      MASTER_IP: 35.185.204.26
      MACHINE_TYPE: e2-medium
      NODE_VERSION: 1.22.8-gke.202
      NUM_NODES: 3
      STATUS: RUNNING
      

    הוספה מחדש של אשכול blue למאגר מאזני העומסים

    בסעיף הזה מוסיפים את אשכול blue בחזרה למאגר של מאזן העומסים.

    1. ב-Cloud Shell, מוודאים שפריסת האפליקציה פועלת באשכול blue לפני שמוסיפים אותה בחזרה למאגר איזון העומסים:

      kubectl --context ${BLUE_CLUSTER} get pods
      

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

      NAME                                   READY   STATUS    RESTARTS   AGE
      whereami-deployment-756c7dc74c-xdnb6   1/1     Running   0          17m
      
    2. מעדכנים את המשאב MutliclusterService כדי להוסיף את אשכול blue בחזרה למאגר איזון העומסים:

      kubectl --context ${INGRESS_CONFIG_CLUSTER} apply \
              -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yaml
      
    3. מוודאים שיש לכם אשכולות blue ו-green במפרט האשכולות:

      kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \
              -o json | jq '.items[].spec.clusters'
      

      הפלט שיתקבל:

      [
        {
          "link": "us-west1-b/blue"
        },
        {
          "link": "us-west1-c/green"
        }
      ]
      

      אשכולות blue ו-green מופיעים עכשיו במפרט clusters.

    4. מדדים מ-Cloud Load Balancing זמינים במסוףGoogle Cloud . יוצרים את כתובת ה-URL:

      echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
      
    5. בדפדפן, עוברים לכתובת ה-URL שנוצרה על ידי הפקודה הקודמת.

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

      שני האשכולות מקבלים תנועה.

      חדשות טובות. שדרגתם בהצלחה אשכול GKE בארכיטקטורה של כמה אשכולות באמצעות Multi Cluster Ingress.

    6. כדי לשדרג את אשכול green, חוזרים על התהליך כדי לרוקן ולשדרג את האשכול הכחול, ומחליפים את blue ב-green בכל מקום.

    הסרת המשאבים

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

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

    מחיקת האשכולות

    1. ב-Cloud Shell, מבטלים את הרישום של אשכולות blue ו-green ומוחקים אותם:

      gcloud container fleet memberships unregister blue --gke-cluster=us-west1-b/blue
      gcloud container clusters delete blue --location us-west1-b --quiet
      
      gcloud container fleet memberships unregister green --gke-cluster=us-west1-c/green
      gcloud container clusters delete green --location us-west1-c --quiet
      
    2. מוחקים את המשאב MuticlusterIngress מהאשכול ingress-config:

      kubectl --context ${INGRESS_CONFIG_CLUSTER} delete -f ${WORKDIR}/multicluster-manifests/mci.yaml
      

      הפקודה הזו מוחקת את משאבי Cloud Load Balancing מהפרויקט.

    3. מבטלים את הרישום של אשכול ingress-config ומוחקים אותו:

      gcloud container fleet memberships unregister ingress-config --gke-cluster=us-west1-a/ingress-config
      gcloud container clusters delete ingress-config --location us-west1-a --quiet
      
    4. מוודאים שכל האשכולות נמחקו:

      gcloud container clusters list
      

      הפלט שיתקבל:

      *&lt;null&gt;*
      
    5. מאפסים את הקובץ kubeconfig:

      unset KUBECONFIG
      
    6. מסירים את התיקייה WORKDIR:

      cd ${HOME}
      rm -rf ${WORKDIR}
      

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

    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.

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