במדריך הזה נסביר איך לשדרג סביבת 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, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- כדי לבצע את ההדרכה הזו, צריך להגדיר Multi Cluster Ingress כך שההגדרות הבאות יהיו מוגדרות:
- שני אשכולות או יותר עם אותן אפליקציות, כמו מרחבי שמות, פריסות ושירותים, שפועלים בכל האשכולות.
- השדרוג האוטומטי מושבת בכל האשכולות.
- אשכולות הם אשכולות שמותאמים ל-VPC שמשתמשים בטווחי כתובות IP של כינויים
- הפעלת איזון עומסים ב-HTTP (מופעל כברירת מחדל).
- הערך של
gcloud --versionחייב להיות 369 ומעלה. השלבים לרישום אשכול GKE תלויים בגרסה הזו או בגרסה חדשה יותר.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, activate 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`ב-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. מידע נוסף על אזורים ותחומים זמין במאמר מיקום גיאוגרפי ואזורים.ממתינים כמה דקות עד שכל האשכולות נוצרים בהצלחה. מוודאים שהאשכולות פועלים:
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רושמים את שלושת האשכולות כ-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.ב-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כדי לשלוח תעבורת לקוחות אל 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 של
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, ממתינים כמה דקות ומריצים את הפקודה שוב.יוצרים מרכז בקרה כדי להציג את התנועה שמגיעה ל-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.
ב-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מקבל תנועה.
ב-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ב-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בכל מקום.ב-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}- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- מידע נוסף על Multi Cluster Ingress
- איך פורסים Multi Cluster Ingress על פני אשכולות
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.
הגדרת הסביבה
יצירה ורישום של אשכולות GKE ב-Hub
בקטע הזה יוצרים שלושה אשכולות GKE ורושמים אותם ב-GKE Hub.
יצירת אשכולות GKE
רישום אשכולות GKE למכשירים בארגון
רישום האשכולות לצי מאפשר לכם להפעיל את אשכולות Kubernetes בסביבות היברידיות. באשכולות שרשומים ל-Fleet אפשר להשתמש בתכונות מתקדמות של GKE, כמו Multi Cluster Ingress. כדי לרשום אשכול GKE לצי, אפשר להשתמש ישירות בחשבון שירות Google Cloud, או להשתמש בגישה המומלצת של איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE, שמאפשרת לחשבון שירות של Kubernetes באשכול GKE לפעול כחשבון שירות לניהול זהויות והרשאות גישה.
פריסת אפליקציה לדוגמה באשכולות הכחול והירוק
הגדרת תעבורת נתונים נכנסת (ingress) של אשכול מרובה
בקטע הזה, יוצרים Ingress מרובה אשכולות ששולח תנועה לאפליקציה שפועלת באשכולות blue ו-green. אתם משתמשים ב-Cloud Load Balancing כדי ליצור מאזן עומסים שמשתמש באפליקציית whereami גם באשכולות blue וגם באשכולות green כבק-אנד. כדי ליצור את מאזן העומסים, צריך שני משאבים: MultiClusterIngress וMultiClusterServices אחד או יותר.
האובייקטים MultiClusterIngress ו-MultiClusterService הם אנלוגים של כמה אשכולות למשאבי Kubernetes Ingress ו-Service הקיימים שמשמשים בהקשר של אשכול יחיד.
הגדרת מחולל העומסים
בקטע הזה מגדירים שירות loadgenerator שמייצר תנועת לקוחות לכתובת ה-VIP של Cloud Load Balancing. קודם כל, התנועה נשלחת לאשכולות blue ו-green כי המשאב MulticlusterService מוגדר לשליחת תנועה לשני האשכולות. בהמשך, מגדירים את MulticlusterServiceהמשאב לשליחת תנועה לאשכול יחיד.
מעקב אחר התנועה
בקטע הזה ננטר את התעבורה לאפליקציית whereami באמצעות מסוףGoogle Cloud .
בקטע הקודם הגדרתם פריסת loadgenerator שמדמה תנועת לקוחות על ידי גישה לאפליקציית loadgenerator דרך כתובת ה-VIP של איזון העומסים ב-Cloud.whereami אפשר לעקוב אחרי המדדים האלה דרך מסוףGoogle Cloud . קודם מגדירים את המעקב כדי שאפשר יהיה לעקוב אחרי תהליך הריקון של האשכולות לצורך שדרוגים (כפי שמתואר בקטע הבא).
הוצאה משימוש ושדרוג של אשכול blue
בקטע הזה מרוקנים את אשכול blue. הוצאת אשכול ממאגר איזון העומסים. אחרי שמרוקנים את אשכול blue, כל תנועת הלקוחות שמיועדת לאפליקציה מועברת לאשכול green.
אפשר לעקוב אחרי התהליך הזה כמו שמתואר בקטע הקודם. אחרי שכל העומס יוסר מהאשכול, אפשר לשדרג אותו. אחרי השדרוג, אפשר להחזיר אותו למאגר של איזון העומסים. חוזרים על השלבים האלה כדי לשדרג את האשכול השני (לא מוצג במדריך הזה).
כדי לנקז את אשכול blue, מעדכנים את המשאב MulticlusterService באשכול ingress-cluster ומסירים את אשכול blue מהמפרט clusters.
ריקון האשכול הכחול
שדרוג אשכול blue
עכשיו, כשלא מתקבלת יותר תנועת לקוחות באשכול blue, אפשר לשדרג את האשכול (מישור הבקרה והצמתים).
הוספה מחדש של אשכול blue למאגר מאזני העומסים
בסעיף הזה מוסיפים את אשכול blue בחזרה למאגר של מאזן העומסים.
הסרת המשאבים
כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
הדרך הקלה ביותר לבטל את החיוב היא למחוק את Google Cloud הפרויקט שיצרתם בשביל המדריך. אפשר גם למחוק את המשאבים הספציפיים.