דרישה רגולטורית נפוצה היא שחברה יכולה להוכיח את יכולת ההתאוששות שלה מאסון (DR). באפליקציות שפועלות בענן, הדרישה הזו כוללת את המהימנות והזמינות של השירותים כששרתים שמארחים אזור מסוים לא זמינים למשך תקופה מסוימת. המסמך הזה מיועד לאדמינים ולארכיטקטים, לאופרטורים ולאדמינים של גיבויים ותוכנית התאוששות מאסון (DR) שרוצים ללמוד איך לדמות יתירות כשל באזור מסוים כשמשתמשים באשכול אזורי רגיל של Google Kubernetes Engine (GKE).
אשכולות אזוריים של GKE נוצרים באזור שנבחר על ידי המשתמש, ומריצים את מישור הבקרה במכונות וירטואליות שנמצאות בכמה אזורים בתוך האזור שנבחר. אשכולות GKE Autopilot הם תמיד אזוריים, ואשכולות GKE Standard יכולים להיות אזוריים או לפי אזור. במדריך הזה משתמשים באשכול אזורי של GKE במסלול הרגיל. התקשורת בין הצמתים באשכול לבין מישור הבקרה מתבצעת דרך מאזן עומסים, ולכן המיקום של הצומת והמיקום של מכונת ה-VM של מישור הבקרה לא תמיד זהים. במסוףGoogle Cloud , אי אפשר להשבית אזור מסוים כשמשתמשים באשכול אזורי. מידע נוסף זמין במאמר בנושא ארכיטקטורת אשכול GKE.
במדריך הזה מוסברות שלוש שיטות שונות לסימול כשל באזור. אתם יכולים לבצע סימולציה של כשל באזור ולוודא שהתגובה הנכונה של האפליקציה מתקבלת באמצעות השיטה שנדרשת לצורכי התאימות שלכם.
השיטות שמתוארות במסמך הזה רלוונטיות גם לאשכולות אזוריים, כולל אשכולות אזוריים יחידים ואשכולות אזוריים מרובים. השיטות האלה משפיעות רק על הצמתים באזורים הממוקדים, ולא על רמת הבקרה של GKE.
מטרות
- יוצרים אשכול אזורי של GKE Standard באמצעות הגדרת ברירת המחדל.
- פורסים אפליקציה לדוגמה של מיקרו-שירותים באשכול האזורי.
- מדמים הפסקת חשמל באזור באמצעות אחת משלוש השיטות הבאות:
- הקטנת מספר האזורים במאגר הצמתים באשכול אזורי.
- משתמשים במאגר צמתים של אזור יחיד.
- מקיפים את הצמתים באזור הכשל המיועד ומרוקנים אותם.
- בודקים את הזמינות של שירותי המיקרו.
עלויות
במדריך הזה השתמשנו ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
- Compute Engine
- אשכול במצב רגיל ב-GKE
אפשר להשתמש במחשבון עלויות כדי ליצור הערכת עלויות בהתאם לשימוש החזוי.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Kubernetes Engine API ואת Compute Engine APIs, אם הם לא מופעלים כבר:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable container.googleapis.com
compute.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Kubernetes Engine API ואת Compute Engine APIs, אם הם לא מופעלים כבר:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable container.googleapis.com
compute.googleapis.com
יצירת אשכול רגיל אזורי
לפני שמדמים כשל באזור, צריך ליצור אשכול אזורי עם מאגר צמתים מרובה אזורים. רמת הבקרה והצמתים של האשכול משוכפלים בכמה אזורים באזור שצוין.
משתמשים ב-Google Cloud CLI כדי ליצור את האשכול:
יוצרים אשכול GKE Standard חדש באמצעות הגדרת ברירת המחדל:
gcloud container clusters create CLUSTER_NAME \ --location CONTROL_PLANE_LOCATION \ --num-nodes 2מחליפים את הפרמטרים הבאים:
-
CLUSTER_NAME: השם של האשכול. -
CONTROL_PLANE_LOCATION: האזור של Compute Engine במישור הבקרה של האשכול, כמוus-central1.
תהליך יצירת האשכול ואימות הפעולה התקינה של כל הרכיבים ב-GKE נמשך כמה דקות. שני צמתים נוצרים בכל אזור באזור שאתם מציינים.
-
בודקים את האזורים של כל צומת שנוצר בשלב הקודם:
kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'הפלט אמור להיראות כך:
NAME ZONE INT_IP regional-cluster-1-default-pool-node1 asia-southeast1-c 10.128.0.37 regional-cluster-1-default-pool-node2 asia-southeast1-c 10.128.0.36 regional-cluster-1-default-pool-node3 asia-southeast1-b 10.128.0.38 regional-cluster-1-default-pool-node4 asia-southeast1-b 10.128.0.33 regional-cluster-1-default-pool-node5 asia-southeast1-a 10.128.0.35 regional-cluster-1-default-pool-node6 asia-southeast1-a 10.128.0.34מתחברים לאשכול:
gcloud container clusters get-credentials CLUSTER_NAME \ --location CONTROL_PLANE_LOCATION
פריסת אפליקציית מיקרו-שירותים לדוגמה
כדי לראות את ההשפעה של המעבר לגיבוי במקרה של כשל שמוצג במסמך הזה, צריך לפרוס אפליקציה לדוגמה שמבוססת על מיקרו-שירותים באשכול. במסמך הזה משתמשים באפליקציה לדוגמה של Cymbal Bank:
במעטפת, משכפלים את מאגר GitHub הבא ועוברים לספרייה:
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git cd bank-of-anthos/פורסים את האפליקציה לדוגמה Cymbal Bank לאשכול GKE שיצרתם בקטע הקודם:
kubectl apply -f ./extras/jwt/jwt-secret.yaml kubectl apply -f ./kubernetes-manifestsממתינים עד שה-Pods יהיו מוכנים:
kubectl get podsאחרי כמה דקות, ה-Pods אמורים להיות במצב
Running:NAME READY STATUS RESTARTS AGE accounts-db-0 1/1 Running 0 16s balancereader-7dc7d9ff57-sstm5 0/1 Running 0 15s contacts-7ddc76d94-rr28x 0/1 Running 0 14s frontend-747b84bff4-2mtlv 0/1 Running 0 13s ledger-db-0 1/1 Running 0 13s ledgerwriter-f6cc7889d-9qjfg 0/1 Running 0 13s loadgenerator-57d4cb57cc-zqvqb 1/1 Running 0 13s transactionhistory-5dd7c7fd77-lwkv8 0/1 Running 0 12s userservice-cd5ddb4bb-wwhml 0/1 Running 0 12sכשכל ה-Pods במצב
Running, מקבלים את כתובת ה-IP החיצונית של שירות הקצה הקדמי:kubectl get service frontend | awk '{print $4}'בחלון של דפדפן אינטרנט, פותחים את כתובת ה-IP שמוצגת בפלט של הפקודה
kubectl get serviceכדי לגשת למופע של Cymbal Bank.פרטי הכניסה שמוגדרים כברירת מחדל מאוכלסים אוטומטית, כך שתוכלו להיכנס לאפליקציה ולעיין בחלק מהיתרות והעסקאות לדוגמה. אין פעולות ספציפיות שצריך לבצע, מלבד לוודא שה-Cymbal Bank פועל בצורה תקינה. יכול להיות שיעברו כמה דקות עד שכל השירותים יופעלו בצורה תקינה ותוכלו להיכנס לחשבון. מחכים עד שכל ה-Pods יהיו במצב
Runningותהיה אפשרות להיכנס לאתר Cymbal Bank, לפני שעוברים לקטע הבא ומדמים כשל באזור.
סימולציה של כשל באזור
בקטע הזה, תדמו כשל באחד מהאזורים. יש שלוש דרכים שונות לדמות את המעבר הזה לגיבוי. צריך לבחור רק שיטה אחת. מבצעים סימולציה של כשל באזור ומוודאים שהתגובה של האפליקציה נכונה באמצעות השיטה הנדרשת לצורך עמידה בדרישות.
הקטנת מספר האזורים במאגר הצמתים
כברירת מחדל, למאגר צמתים של אשכול אזורי יש צמתים שמשתרעים על פני כל האזורים באזור שלו. בתרשים הבא, Cloud Load Balancing מפזר את התנועה למאגר צמתים שמשתרע על פני שלושה אזורים. בכל אזור יש שני צמתים, וה-Pods יכולים לפעול בצמתים בכל אחד מהאזורים האלה.
בקטע הזה, נדמה כשל באזור על ידי עדכון מאגר הצמתים כך שיפעל רק בשניים מתוך שלושה אזורים. הגישה הזו מאמתת שהאפליקציה יכולה להגיב לאובדן של אזור על ידי חלוקה מחדש נכונה של ה-Pods והתנועה בין אזורים אחרים.
כדי לעדכן את מאגר הצמתים כך שיפעל רק באזורים מסוימים ולדמות כשל, צריך לבצע את השלבים הבאים:
בודקים את הזמינות של אשכולות ושירותים אזוריים:
kubectl get pods -o wide ; kubectl get nodes -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'התוצאה אמורה להיות דומה לפלט הבא:
NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 6m30s 10.28.1.5 regional-cluster-1-default-pool-node3 balancereader-7dc7d9ff57-shwg5 1/1 Running 0 6m30s 10.28.5.6 regional-cluster-1-default-pool-node1 contacts-7ddc76d94-qv4x5 1/1 Running 0 6m29s 10.28.4.6 regional-cluster-1-default-pool-node2 frontend-747b84bff4-xvjxq 1/1 Running 0 6m29s 10.28.3.6 regional-cluster-1-default-pool-node6 ledger-db-0 1/1 Running 0 6m29s 10.28.5.7 regional-cluster-1-default-pool-node1 ledgerwriter-f6cc7889d-mttmb 1/1 Running 0 6m29s 10.28.1.6 regional-cluster-1-default-pool-node3 loadgenerator-57d4cb57cc-7fvrc 1/1 Running 0 6m29s 10.28.4.7 regional-cluster-1-default-pool-node2 transactionhistory-5dd7c7fd77-cmc2w 1/1 Running 0 6m29s 10.28.3.7 regional-cluster-1-default-pool-node6 userservice-cd5ddb4bb-zfr2g 1/1 Running 0 6m28s 10.28.5.8 regional-cluster-1-default-pool-node1 NAME ZONE INT_IP regional-cluster-1-default-pool-node5 asia-southeast1-c 10.148.0.6 regional-cluster-1-default-pool-node6 asia-southeast1-c 10.148.0.7 regional-cluster-1-default-pool-node2 asia-southeast1-a 10.148.0.8 regional-cluster-1-default-pool-node1 asia-southeast1-a 10.148.0.9 regional-cluster-1-default-pool-node3 asia-southeast1-b 10.148.0.5 regional-cluster-1-default-pool-node4 asia-southeast1-b 10.148.0.4בדוגמה הזו, כל עומסי העבודה של Cymbal Bank נפרסים בכל האזורים. כדי לדמות כשל, משביתים אחד מהאזורים, כמו
asia-southeast1-c, שבו פרוס שירות הקצה הקדמי.סימולציה של הפסקת חשמל באזור. מעדכנים את מאגר הצמתים הקיים (
default-pool) כדי לציין רק שניים מתוך שלושת האזורים:gcloud container node-pools update default-pool \ --cluster=CLUSTER_NAME \ --node-locations=ZONE_A, ZONE_B \ --location=CONTROL_PLANE_LOCATIONמחליפים את
ZONE_A, ZONE_Bבשני האזורים שבהם רוצים שמאגר הצמתים ימשיך לפעול.בודקים את הזמינות של המיקרו-שירותים אחרי שמעדכנים את מאגר הצמתים:
kubectl get pods -o wide ; kubectl get nodes -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'הפלט אמור להיראות כמו בדוגמה הבאה:
NAME ZONE INT_IP regional-cluster-1-default-pool-node2 asia-southeast1-a 10.148.0.8 regional-cluster-1-default-pool-node1 asia-southeast1-a 10.148.0.9 regional-cluster-1-default-pool-node3 asia-southeast1-b 10.148.0.5 regional-cluster-1-default-pool-node4 asia-southeast1-b 10.148.0.4 NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 28m 10.28.1.5 regional-cluster-1-default-pool-node3 balancereader-7dc7d9ff57-shwg5 1/1 Running 0 28m 10.28.5.6 regional-cluster-1-default-pool-node1 contacts-7ddc76d94-qv4x5 1/1 Running 0 28m 10.28.4.6 regional-cluster-1-default-pool-node2 frontend-747b84bff4-mdnkd 1/1 Running 0 9m21s 10.28.1.7 regional-cluster-1-default-pool-node3 ledger-db-0 1/1 Running 0 28m 10.28.5.7 regional-cluster-1-default-pool-node1 ledgerwriter-f6cc7889d-mttmb 1/1 Running 0 28m 10.28.1.6 regional-cluster-1-default-pool-node3 loadgenerator-57d4cb57cc-7fvrc 1/1 Running 0 28m 10.28.4.7 regional-cluster-1-default-pool-node2 transactionhistory-5dd7c7fd77-w2vqs 1/1 Running 0 9m20s 10.28.4.8 regional-cluster-1-default-pool-node2 userservice-cd5ddb4bb-zfr2g 1/1 Running 0 28m 10.28.5.8 regional-cluster-1-default-pool-node1בדוגמה הזו של הפלט,
asia-southeast1-cכבר לא בשימוש. עדיין יש גישה לשירות הקצה הקדמי שאליו ניגשים מדפדפן עם כתובת ה-URLhttp://EXTERNAL_IP. משתמש עדיין יוכל לבצע פעולות של הפקדה ותשלום, גם אם אחד מהאזורים כבר לא זמין.
שימוש במאגר צמתים באזור יחיד
בקטע הזה, תדמו כשל באזור על ידי מחיקה של שני מאגרי הצמתים. הגישה הזו מאפשרת לוודא שהאפליקציה יכולה להגיב לאובדן של מאגר צמתים על ידי חלוקה מחדש נכונה של ה-Pods והתנועה בין מאגר צמתים אחד למאגר צמתים אחר באזור אחר. כדי לדמות הפסקת חשמל באזור באשכול אזורי, מרחיבים את האשכול הבסיסי שנוצר קודם, ומריצים את אפליקציית Cymbal Bank בכמה מאגרי צמתים. השיטה הזו לסימול של הפרעה באזור משקפת בצורה מדויקת יותר כשל באזור בפועל, בהשוואה לדוגמה הראשונה של עדכון אזורים פעילים במאגר צמתים, כי בדרך כלל יש כמה מאגרי צמתים באותו אשכול:
האשכול שתיצרו בקטע הזה כדי לדמות כשל במאגר צמתים באזור יחיד כולל את הרכיבים הבאים:
מאגר צמתים שמוגדר כברירת מחדל – בדרך כלל נוצר כשיוצרים אשכול אזורי של GKE Standard – זהו מאגר צמתים רב-אזורי (
default-pool).האשכול הזה עם
default-poolאחד הוא מה שיצרתם קודם במסמך הזה.מאגרי צמתים נוספים (
zonal-node-pool-1ו-zonal-node-pool-2) שמריצים גם שירותים עבור אפליקציית Cymbal Bank לדוגמה.
הקווים המקווקווים בתרשים מראים איך התנועה משרתת רק את zonal-node-pool-2
אחרי שמדמים כשל ב-default-pool וב-zonal-node-pool-1.
כדי ליצור מאגרי צמתים נוספים ולדמות כשל, מבצעים את השלבים הבאים:
בודקים את הזמינות של האשכול האזורי:
gcloud container node-pools list \ --cluster=CLUSTER_NAME \ --location CONTROL_PLANE_LOCATION kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'התוצאה אמורה להיות דומה לפלט הבא:
NAME: default-pool MACHINE_TYPE: e2-medium DISK_SIZE_GB: 100 NODE_VERSION: 1.27.8-gke.1067004 NAME ZONE. INT_IP regional-cluster-1-default-pool-node5-pzmc asia-southeast1-c 10.148.0.6 regional-cluster-1-default-pool-node6-qf1l asia-southeast1-c 10.148.0.7 regional-cluster-1-default-pool-node2-dlk2 asia-southeast1-a 10.148.0.8 regional-cluster-1-default-pool-node1-pkfd asia-southeast1-a 10.148.0.9 regional-cluster-1-default-pool-node3-6b6n asia-southeast1-b 10.148.0.5 regional-cluster-1-default-pool-node4-h0lc asia-southeast1-b 10.148.0.4בפלט לדוגמה הזה, כל ה-Pods של Cymbal Bank נפרסים בכל האזורים באותו האשכול ופועלים ב-
default-poolהקיים.יוצרים שני מאגרי צמתים חדשים של אזור יחיד:
gcloud beta container node-pools create zonal-node-pool-1 \ --cluster CLUSTER_NAME \ --location CONTROL_PLANE_LOCATION \ --num-nodes 4 \ --node-locations ZONE_A gcloud beta container node-pools create zonal-node-pool-2 \ --cluster CLUSTER_NAME \ --location CONTROL_PLANE_LOCATION \ --num-nodes 4 \ --node-locations ZONE_Bמחליפים את
ZONE_AואתZONE_Bבשני התחומים שבהם רוצים להריץ את מאגרי הצמתים החדשים של תחום יחיד.כדי לדמות כשל באזור, מוחקים את
default-poolמאגר הצמתים האזורי ואת אחד ממאגרי הצמתים החדשים של אזור יחיד:gcloud container node-pools delete default-pool \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION gcloud container node-pools delete zonal-node-pool-1 \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATIONבמהלך תהליך המחיקה של
node-pool, עומסי העבודה מושבתים ומתוזמנים מחדש למאגר צמתים זמין אחר. במהלך התהליך הזה, השירותים והפריסות לא זמינים. המשמעות היא שצריך לציין חלונות של זמן השבתה כדי לדווח על DR או לתעד אותו.מוודאים שהמיקרו-שירותים ממשיכים להיות זמינים:
kubectl get pods -o wide ; kubectl get nodes -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'הפלט אמור להיראות כמו בדוגמה הבאה:
NAME ZONE INT_IP regional-cluster-1-node-pool3-node1 asia-southeast1-b 10.148.0.8 regional-cluster-1-node-pool3-node2 asia-southeast1-b 10.148.0.9 regional-cluster-1-node-pool3-node3 asia-southeast1-b 10.148.0.5 regional-cluster-1-node-pool3-node4 asia-southeast1-b 10.148.0.4 NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 28m 10.28.1.5 regional-cluster-1-zonal-node-pool-2-node3 balancereader-7dc7d9ff57-shwg5 1/1 Running 0 28m 10.28.5.6 regional-cluster-1-zonal-node-pool-2-node1 contacts-7ddc76d94-qv4x5 1/1 Running 0 28m 10.28.4.6 regional-cluster-1-zonal-node-pool-2-node2 frontend-747b84bff4-mdnkd 1/1 Running 0 9m21s 10.28.1.7 regional-cluster-1-zonal-node-pool-2-node3 ledger-db-0 1/1 Running 0 28m 10.28.5.7 regional-cluster-1-zonal-node-pool-2-node4 ledgerwriter-f6cc7889d-mttmb 1/1 Running 0 28m 10.28.1.6 regional-cluster-1-zonal-node-pool-2-node3 loadgenerator-57d4cb57cc-7fvrc 1/1 Running 0 28m 10.28.4.7 regional-cluster-1-zonal-node-pool-2-node2 transactionhistory-5dd7c7fd77-w2vqs 1/1 Running 0 9m20s 10.28.4.8 regional-cluster-1-zonal-node-pool-2-node2 userservice-cd5ddb4bb-zfr2g 1/1 Running 0 28m 10.28.5.8 regional-cluster-1-zonal-node-pool-2-node1בדוגמת הפלט הזו, מכיוון שהשירותים
default-poolו-zonal-node-pool-1כבר לא קיימים, כל השירותים פועלים ב-zonal-node-pool-2.
הגנה על צמתים וניקוז שלהם באזור
בקטע הזה, מגדירים גדר וריקון של צמתים ספציפיים באשכול. מבודדים את כל הצמתים באזור אחד ומרוקנים אותם, כדי לדמות את אובדן הפודים שפועלים בצמתים האלה באזור:
בתרשים הזה, הצמתים באזור הראשון מבודדים ומרוקנים. הצמתים בשני האזורים האחרים ממשיכים לפעול. הגישה הזו מאפשרת לוודא שהאפליקציה יכולה להגיב לאובדן של כל הצמתים באזור על ידי חלוקה מחדש נכונה של ה-Pods והתנועה בין הצמתים שפועלים באזורים אחרים.
כדי להגביל את הגישה לצמתים באחד מהאזורים ולנקז אותם, כדי לדמות כשל, מבצעים את השלבים הבאים:
בודקים את הזמינות של האשכול והשירותים האזוריים. בודקים את שמות הצמתים של אזור הכשל של היעד. רוצים לציין אזור שבו פועלים פודי ה-Frontend:
kubectl get pods -o wideהפלט אמור להיראות כמו בדוגמה הבאה:
NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 4m7s 10.96.4.4 regional-cluster-1-default-pool-node2 balancereader-7dc7d9ff57-lv4z7 1/1 Running 0 4m7s 10.96.1.5 regional-cluster-1-default-pool-node1 contacts-7ddc76d94-wxvg5 1/1 Running 0 4m7s 10.96.6.11 regional-cluster-1-default-pool-node3 frontend-747b84bff4-gvktl 1/1 Running 0 4m7s 10.96.1.4 regional-cluster-1-default-pool-node1 ledger-db-0 1/1 Running 0 4m7s 10.96.4.5 regional-cluster-1-default-pool-node2 ledger-db-1 1/1 Running 0 3m50s 10.96.0.13 regional-cluster-1-default-pool-node5 ledgerwriter-f6cc7889d-4hqbm 1/1 Running 0 4m6s 10.96.0.12 regional-cluster-1-default-pool-node5 loadgenerator-57d4cb57cc-fmq52 1/1 Running 0 4m6s 10.96.4.6 regional-cluster-1-default-pool-node2 transactionhistory-5dd7c7fd77-72zpx 1/1 Running 0 4m6s 10.96.6.12 regional-cluster-1-default-pool-node3 userservice-cd5ddb4bb-b7862 1/1 Running 0 4m6s 10.96.1.6 regional-cluster-1-default-pool-node1משייכים את ה-Pods שמופיעים בפלט הקודם לאזור של הצומת:
kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'הפלט אמור להיראות כמו בדוגמה הבאה:
NAME ZONE INT_IP regional-cluster-1-default-pool-node1 asia-southeast1-b 10.148.0.41 regional-cluster-1-default-pool-node2 asia-southeast1-b 10.148.0.42 regional-cluster-1-default-pool-node3 asia-southeast1-a 10.148.0.37 regional-cluster-1-default-pool-node4 asia-southeast1-a 10.148.0.38 regional-cluster-1-default-pool-node5 asia-southeast1-c 10.148.0.40 regional-cluster-1-default-pool-node6 asia-southeast1-c 10.148.0.39בדוגמה הקודמת של הפלט, ה-Pods של הקצה הקדמי נמצאים ב-
regional-cluster-1-default-pool-node1באזורasia-southeast1-b.בשלב הבא, עוקבים אחרי כל הצמתים באזור
asia-southeast1-b. בדוגמה הזו, הצמתים הםregional-cluster-1-default-pool-node1ו-regional-cluster-1-default-pool-node2.מבודדים את צמתי היעד ומרוקנים אותם באחד מהתחומים. בדוגמה הזו, אלה שני הצמתים ב-
asia-southeast1-b:kubectl drain regional-cluster-1-default-pool-node1 \ --delete-emptydir-data --ignore-daemonsets kubectl drain regional-cluster-1-default-pool-node2 \ --delete-emptydir-data --ignore-daemonsetsהפקודה הזו מסמנת את הצמתים ככאלה שלא ניתן לתזמן אותם, ומדמה כשלים בצמתים. מערכת Kubernetes מתזמנת מחדש את ה-Pods לצמתים אחרים באזורים מתפקדים.
בודקים איפה מתוזמנים מחדש ה-Pods החדשים של חזית האתר ו-Pods אחרים לדוגמה של Cymbal Bank שפעלו קודם בצומת באזור הכשל:
kubectl get pods -o wide ; kubectl get nodes -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'הפלט אמור להיראות כמו בדוגמה הבאה:
NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 4m7s 10.96.4.4 regional-cluster-1-default-pool-node4 balancereader-7dc7d9ff57-lv4z7 1/1 Running 0 4m7s 10.96.1.5 regional-cluster-1-default-pool-node6 contacts-7ddc76d94-wxvg5 1/1 Running 0 4m7s 10.96.6.11 regional-cluster-1-default-pool-node3 frontend-747b84bff4-gvktl 1/1 Running 0 4m7s 10.96.1.4 regional-cluster-1-default-pool-node3 ledger-db-0 1/1 Running 0 4m7s 10.96.4.5 regional-cluster-1-default-pool-node6 ledger-db-1 1/1 Running 0 3m50s 10.96.0.13 regional-cluster-1-default-pool-node5 ledgerwriter-f6cc7889d-4hqbm 1/1 Running 0 4m6s 10.96.0.12 regional-cluster-1-default-pool-node5 loadgenerator-57d4cb57cc-fmq52 1/1 Running 0 4m6s 10.96.4.6 regional-cluster-1-default-pool-node4 transactionhistory-5dd7c7fd77-72zpx 1/1 Running 0 4m6s 10.96.6.12 regional-cluster-1-default-pool-node3 userservice-cd5ddb4bb-b7862 1/1 Running 0 4m6s 10.96.1.6 regional-cluster-1-default-pool-node3 NAME ZONE INT_IP regional-cluster-1-default-pool-node3 asia-southeast1-a 10.148.0.37 regional-cluster-1-default-pool-node4 asia-southeast1-a 10.148.0.38 regional-cluster-1-default-pool-node5 asia-southeast1-c 10.148.0.40 regional-cluster-1-default-pool-node6 asia-southeast1-c 10.148.0.39בדוגמה הזו לפלט, אין תרמילים לדוגמה של Cymbal Bank שפועלים בצמתים מבודדים, וכל התרמילים פועלים עכשיו רק בשני האזורים האחרים.
יכול להיות שתקציבים לשיבוש Pod (PDB) בצמתים יחסמו את ניקוי הצמתים. חשוב להעריך את מדיניות ה-PDB לפני הפעולה של בידוד והוצאה משימוש. כדי להבין יותר על PDB ועל הקשר שלו לניהול שיבושים, אפשר לקרוא איך לוודא את המהימנות וזמינות הפעולה של אשכול GKE.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה:
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- איך מדמים הפסקת חשמל באזור בקבוצת מופעי מכונה מנוהלים (MIG) אזורית
- מידע נוסף על התאוששות מאסון ב- Google Cloud
- שיקולים לגבי תקציב לשיבוש Pod.
- מידע על דיסקים לאחסון מתמיד אזוריים לעומת דיסקים לאחסון מתמיד של תחום
- איך מריצים מסדי נתונים עם זמינות גבוהה ב-GKE
- מידע נוסף על שיטות מומלצות להתאוששות מאסון ב- Google Cloud
- מידע נוסף על גיבוי ל-GKE