במדריך הזה נסביר איך לשדרג סביבת 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, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- כדי לבצע את ההדרכה הזו, צריך להגדיר Multi Cluster Ingress כך שההגדרות הבאות יהיו מוגדרות:
- שני אשכולות או יותר עם אותן אפליקציות, כמו מרחבי שמות, פריסות ושירותים, שפועלים בכל האשכולות.
- השדרוג האוטומטי מושבת בכל האשכולות.
- אשכולות הם אשכולות המותאמים ל-VPC שמשתמשים בטווחי כתובות IP של כינויים
- הפעלת איזון עומסים ב-HTTP (מופעל כברירת מחדל).
- הערך של
gcloud --versionחייב להיות 369 ומעלה. שלבי הרישום של אשכול GKE תלויים בגרסה הזו או בגרסה חדשה יותר.
-
בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
במסוף Google Cloud , מפעילים את Cloud Shell.
מגדירים את פרויקט ברירת המחדל:
export PROJECT=$(gcloud info --format='value(config.project)') gcloud config set project ${PROJECT}מפעילים את ממשקי ה-API של GKE, Hub ו-
multiclusteringress:gcloud services enable container.googleapis.com \ gkehub.googleapis.com \ multiclusteringress.googleapis.com \ multiclusterservicediscovery.googleapis.com
הגדרת הסביבה
ב-Cloud Shell, משכפלים את המאגר כדי לקבל את הקבצים של המדריך הזה:
cd ${HOME} git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesיוצרים ספרייה בשם
WORKDIR:cd kubernetes-engine-samples/networking/gke-multicluster-upgrade-mci/ export WORKDIR=`pwd`
יצירה ורישום של אשכולות GKE ב-Hub
בקטע הזה יוצרים שלושה אשכולות GKE ורושמים אותם ב-GKE Hub.
יצירת אשכולות GKE
ב-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. מידע נוסף על אזורים ותחומים זמין במאמר מיקום גיאוגרפי ואזורים.ממתינים כמה דקות עד שכל האשכולות נוצרים בהצלחה. מוודאים שהאשכולות פועלים:
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יוצרים קובץ
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, אפשר לעבור במהירות בין הקשרים של אשכולות.מוודאים שיש שלושה אשכולות בקובץ
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כדי להשתמש בהם בהמשך, מקבלים את ההקשר של שלושת האשכולות:
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
רושמים את שלושת האשכולות כ-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מוודאים שהאשכולות רשומים:
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מגדירים את אשכול
ingress-configכאשכול ההגדרות של Multi Cluster Ingress על ידי הפעלת התכונהmulticlusteringressדרך Hub:gcloud container fleet ingress enable --config-membership=ingress-configהפקודה הקודמת מוסיפה את
MulticlusterIngressואתMulticlusterServiceCRD (הגדרות משאבים מותאמות אישית) לאשכולingress-config. השלמת הפקודה הזו נמשכת כמה דקות. צריך להמתין לפני שעוברים לשלב הבא.מוודאים שקלאסטר
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.
פריסת אפליקציה לדוגמה באשכולות הכחול והירוק
ב-Cloud Shell, פורסים את אפליקציית הדוגמה
whereamiבאשכולותblueו-green:kubectl --context ${BLUE_CLUSTER} apply -f ${WORKDIR}/application-manifests kubectl --context ${GREEN_CLUSTER} apply -f ${WORKDIR}/application-manifestsמחכים כמה דקות ומוודאים שלכל ה-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 הקיימים שמשמשים בהקשר של אשכול יחיד.
ב-Cloud Shell, פורסים את המשאב
MulticlusterIngressלאשכולingress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mci.yamlהפלט שיתקבל:
multiclusteringress.networking.gke.io/whereami-mci createdפורסים את משאב
MulticlusterServiceבאשכולingress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yamlהפלט שיתקבל:
multiclusterservice.networking.gke.io/whereami-mcs createdכדי להשוות בין שני המשאבים:
בודקים את המשאב
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.
ב-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משתמשים ב-
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" }מריצים את הפקודה
curlשוב ושוב. שימו לב שהבקשות מאוזנות בין האפליקציהwhereamiשנפרסה בשני אשכולות,blueו-green.
הגדרת מחולל העומסים
בקטע הזה מגדירים שירות loadgenerator שמייצר תנועת לקוחות לכתובת ה-VIP של Cloud Load Balancing. קודם כל, התנועה נשלחת לאשכולות blue ו-green כי המשאב MulticlusterService מוגדר לשליחת תנועה לשני האשכולות. בהמשך, מגדירים את MulticlusterServiceהמשאב לשליחת תנועה לאשכול יחיד.
מגדירים את קובץ המניפסט
loadgeneratorכדי לשלוח תעבורת לקוחות אל Cloud Load Balancing:TEMPLATE=loadgen-manifests/loadgenerator.yaml.templ && envsubst < ${TEMPLATE} > ${TEMPLATE%.*}פורסים את
loadgeneratorבאשכולingress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/loadgen-manifestsמוודאים שלכל ה-Pods באשכול
ingress-configיש סטטוסRunning:loadgeneratorkubectl --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 . קודם מגדירים את המעקב כדי שאפשר יהיה לעקוב אחרי תהליך הריקון של האשכולות לצורך שדרוגים (כפי שמתואר בקטע הבא).
יוצרים מרכז בקרה כדי להציג את התעבורה שמגיעה ל-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]מדדים מ-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"בדפדפן, עוברים לכתובת ה-URL שנוצרה על ידי הפקודה הקודמת.
התנועה לאפליקציית הדוגמה מגיעה ממחולל העומסים לשני האשכולות
blueו-green(כפי שמצוין בשני האזורים שבהם האשכולות נמצאים). בתרשים המדדים של ציר הזמן מוצגת התנועה שמגיעה לשני השרתים העורפיים.הערכים שמוצגים כשמעבירים את העכבר מעל התרשיםk8s1-מציינים שקבוצת נקודות הקצה ברשת (NEGs)MulticlusterServicesשל שני השרתים הקדמיים פועלת באשכולותblueו-green.
הוצאת הצומת משימוש ושדרוג של אשכול blue
בקטע הזה מרוקנים את אשכול blue. הוצאת צומת מהאשכול פירושה הסרתו ממאגר איזון העומסים. אחרי שמרוקנים את אשכול blue, כל תנועת הלקוחות שמיועדת לאפליקציה מועברת לאשכול green.
אפשר לעקוב אחרי התהליך הזה כמו שמתואר בקטע הקודם. אחרי שכל העומס יוסר מהאשכול, אפשר לשדרג אותו. אחרי השדרוג, אפשר להחזיר אותו למאגר של איזון העומסים. חוזרים על השלבים האלה כדי לשדרג את האשכול השני (לא מוצג במדריך הזה).
כדי לרוקן את אשכול blue, מעדכנים את המשאב MulticlusterService באשכול ingress-cluster ומסירים את אשכול blue מהמפרט clusters.
הוצאת המים מהאשכול הכחול
ב-Cloud Shell, מעדכנים את המשאב
MulticlusterServiceבאשכולingress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} \ apply -f ${WORKDIR}/multicluster-manifests/mcs-green.yamlמוודאים שרק אשכול
greenמופיע במפרטclusters:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \ -o json | jq '.items[].spec.clusters'הפלט שיתקבל:
[ { "link": "us-west1-c/green" } ]רק אשכול
greenמופיע במפרטclusters, ולכן רק אשכולgreenנמצא במאגר איזון העומסים.אפשר לראות את המדדים של Cloud Load Balancing במסוףGoogle Cloud . יוצרים את כתובת ה-URL:
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"בדפדפן, עוברים לכתובת ה-URL שנוצרה מהפקודה הקודמת.
התרשים מראה שרק אשכול
greenמקבל תנועה.
שדרוג אשכול blue
עכשיו, כשבאשכול blue לא מתקבלת יותר תעבורת נתונים מלקוחות, אפשר לשדרג את האשכול (מישור הבקרה והצמתים).
ב-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יכול להיות שגרסאות האשכולות שלכם יהיו שונות, בהתאם למועד שבו תסיימו את המדריך הזה.
כדי לקבל את רשימת הגרסאות הזמינות של
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" ]כדי לקבל רשימה של גרסאות
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" ]מגדירים משתנה סביבה לגרסה
MasterVersionו-NodeVersionשנמצאת ברשימותMasterVersionsו-NodeVersions, והיא גבוהה מהגרסה הנוכחית של אשכולblue, לדוגמה:export UPGRADE_VERSION="1.22.10-gke.600"במדריך הזה נעשה שימוש בגרסה
1.22.10-gke.600. יכול להיות שגרסאות האשכולות שלכם יהיו שונות, בהתאם לגרסאות שזמינות כשתסיימו את המדריך הזה. מידע נוסף על שדרוג זמין במאמר שדרוג אשכולות ומאגרי צמתים.משדרגים את הצומת
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].משדרגים את הצמתים באשכול
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].מוודאים ששודרג האשכול
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 בחזרה למאגר של מאזן העומסים.
ב-Cloud Shell, מוודאים שהפריסה של האפליקציה פועלת באשכול
blueלפני שמוסיפים אותה בחזרה למאגר איזון העומסים:kubectl --context ${BLUE_CLUSTER} get podsהפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE whereami-deployment-756c7dc74c-xdnb6 1/1 Running 0 17mמעדכנים את משאב
MutliclusterServiceכדי להוסיף את אשכולblueבחזרה למאגר לאיזון עומסים:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply \ -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yamlמוודאים שיש לכם אשכולות
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.מדדים מ-Cloud Load Balancing זמינים במסוףGoogle Cloud . יוצרים את כתובת ה-URL:
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"בדפדפן, עוברים לכתובת ה-URL שנוצרה על ידי הפקודה הקודמת.
בתרשים אפשר לראות שגם האשכול הכחול וגם האשכול הירוק מקבלים תנועה ממחולל העומסים באמצעות מאזן העומסים.
כל הכבוד. שדרגתם בהצלחה אשכול GKE בארכיטקטורה של כמה אשכולות באמצעות Multi Cluster Ingress.
כדי לשדרג את אשכול
green, חוזרים על התהליך כדי לרוקן ולשדרג את האשכול הכחול, ומחליפים אתblueב-greenבכל מקום.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
הדרך הקלה ביותר לבטל את החיוב היא למחוק את Google Cloud הפרויקט שיצרתם בשביל המדריך. אפשר גם למחוק את המשאבים בנפרד.
מחיקת האשכולות
ב-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מוחקים את המשאב
MuticlusterIngressמהאשכולingress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} delete -f ${WORKDIR}/multicluster-manifests/mci.yamlהפקודה הזו מוחקת את המשאבים של Cloud Load Balancing מהפרויקט.
מבטלים את הרישום של אשכול
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מוודאים שכל האשכולות נמחקו:
gcloud container clusters listהפלט שיתקבל:
*<null>*מאפסים את הקובץ
kubeconfig:unset KUBECONFIGמסירים את התיקייה
WORKDIR:cd ${HOME} rm -rf ${WORKDIR}
מחיקת הפרויקט
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- מידע נוסף על Multi Cluster Ingress
- איך פורסים Multi Cluster Ingress על פני אשכולות
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.