שדרוג סביבת 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 clusters. Google Cloud

מומלץ לשדרג אוטומטית את אשכולות GKE. שדרוג אוטומטי הוא דרך מנוהלת לחלוטין לעדכן אוטומטית את האשכולות (מישור הבקרה והצמתים) לפי לוח זמנים לפרסום שנקבע על ידיGoogle Cloud. הפעולה הזו לא דורשת התערבות של המפעיל. עם זאת, אם אתם רוצים יותר שליטה על האופן שבו משדרגים את האשכולות ועל מועד השדרוג, במדריך הזה מוסבר איך לשדרג כמה אשכולות שבהם האפליקציות שלכם פועלות בכל האשכולות. לאחר מכן, הוא משתמש בתעבורת נתונים נכנסת (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. בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.

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

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

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

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

  4. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת 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
    

הגדרת הסביבה

  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 \
    --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 \
    --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 \
    --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 ל-Fleet

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

  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 באשכול ingress-config יש סטטוס Running:loadgenerator

    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 שמדמה תנועת לקוחות על ידי גישה לאפליקציית whereami דרך כתובת ה-VIP של Cloud Load Balancing. אפשר לעקוב אחרי המדדים האלה דרך מסוף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. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

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

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