סביבות Kubernetes מאפשרות לכם לשנות את גודל משאבי מסד הנתונים באופן דינמי בהתאם לשינויים בעומס העבודה. אם פרסתם את Spanner Omni באמצעות תרשים Helm, תוכלו להשתמש בהליכי ההרחבה האלה.
לפני שמתחילים
לפני שמגדילים את פריסת Kubernetes, צריך לבצע את הפעולות הבאות:
מורידים ומתקינים את Spanner Omni CLI.
מתקינים את Helm ויוצרים הגדרת תרשים Helm.
כשיטה מומלצת, מומלץ להרחיב אנכית בהתאם לעומס (scale up) עד ל-32 GB לפחות של זיכרון לכל שרת, לפני שמוסיפים עוד שרתים כדי להרחיב אופקית בהתאם לעומס (scale out).
מגבלות
יש כמה מגבלות לגבי שינוי קנה מידה ב-Kubernetes:
שרתים שהם לא שרתי הבסיס בלבד: אפשר להשתמש בהרחבה אופקית במופעים שהם לא שרתי הבסיס. אין תמיכה בהרחבת שרת הבסיס.
מגבלות אחסון של StatefulSet: מכיוון ש-Kubernetes
volumeClaimTemplatesהם בלתי ניתנים לשינוי, אי אפשר להרחיב את הדיסקים של הפוד באמצעות פקודה אחת שלhelm upgrade. במקום זאת, כדי להגדיל או להקטין את נפח האחסון צריך לבצע שלבים ידניים להרחבת נפח.
שינוי גודל אנכי
כדי לשנות את משאבי המעבד או הזיכרון של השרתים, צריך לעדכן את ההגדרה באמצעות שדרוג Helm:
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set resources.cpu=CPU_CORES \
--set resources.memory=MEMORY_LIMIT \
-n NAMESPACE
מחליפים את מה שכתוב בשדות הבאים:
-
HELM_CHART_PATH: הנתיב לתרשים Helm, לדוגמה,oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni. -
VERSION: הגרסה של תרשים Helm, למשל0.2.0. -
CPU_CORES: מספר ליבות ה-vCPU להקצאה לכל פוד של שרת, לדוגמה,8. -
MEMORY_LIMIT: מגבלת ה-RAM לכל פוד של שרת, לדוגמה,32Gi. -
NAMESPACE: מרחב השמות של Kubernetes של הפריסה, לדוגמה,spanner-ns.
שינוי גודל אופקי
כדי להרחיב את הפריסה באופן אופקי, מוסיפים עוד שרתים לפריסה. יש תמיכה בהרחבה אופקית של שרתים שאינם שרתי בסיס.
הוספת שרתים שאינם שרתי הבסיס
כדי להוסיף שרתים שאינם שרתי בסיס, צריך להגדיל את מספר העותקים בתצורת תרשים Helm. אתם יכולים לשנות את הגודל של כל האזורים באופן אחיד, או לשנות את הגודל של אזור ספציפי.
שינוי גודל אחיד
כדי לשנות את גודל כל אזור בפריסה ל-15 שרתים, מריצים את הפקודה הבאה:
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set deployment.replicasPerZone=REPLICAS \
-n NAMESPACE
מחליפים את מה שכתוב בשדות הבאים:
-
HELM_CHART_PATH: הנתיב לתרשים Helm, לדוגמהoci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni. -
VERSION: הגרסה של תרשים Helm. לדוגמה,0.2.0. -
REPLICAS: מספר היעד של העתקי השרת לכל אזור, לדוגמה15. -
NAMESPACE: מרחב השמות של Kubernetes – לדוגמה,spanner-ns.
שינוי הגודל של אזור ספציפי
אם בהצבה הראשונית הגדרתם מספרים שונים של שרתים לאזורים נפרדים, תוכלו לטרגט אזור יחיד. לדוגמה, כדי להגדיל את העותקים המשוכפלים של האזור הראשון בתוך המיקום הראשון ל-15, מריצים את הפקודה הבאה:
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set locations[0].zones[0].replicas=REPLICAS \
-n NAMESPACE
מחליפים את REPLICAS במספר העותקים המשוכפלים של אזור היעד – לדוגמה, 15.
כדי לוודא שהשרתים החדשים הצטרפו בהצלחה לפריסה, מריצים שאילתה ב-Spanner Omni CLI כדי להציג רשימה של שרתי הפריסה או מעיינים בלוח הבקרה של Grafana.
spanner deployment servers list \
--zone=ZONE \
--deployment-endpoint=ENDPOINT
מחליפים את מה שכתוב בשדות הבאים:
-
ZONE: האזור שרוצים להציג. לדוגמה,us-central1-a. -
ENDPOINT: נקודת הקצה החיצונית של הפריסה, לדוגמה${ENDPOINT}:15000.
הסרת שרתים שאינם שרתי בסיס
הקטנת מספר השרתים דורשת שלבים נוספים כי המערכת צריכה להעביר בבטחה את מחיצות הנתונים משרתים שהוצאו משימוש. מכיוון ש-Kubernetes StatefulSets מסירים פודים מהאינדקס הגבוה ביותר לנמוך ביותר, צריך להגדיר את השרתים שאינם שרתי הבסיס עם האינדקס הגבוה ביותר כמטרה להסרה ראשונה.
כדי להקטין את מספר השרתים, פועלים לפי השלבים הבאים:
כדי לזהות שרתים שאפשר להסיר, מציגים את השרתים באזור:
spanner deployment servers list \ --zone=ZONE \ --deployment-endpoint=ENDPOINTפלט לדוגמה:
NAME HOST PORT_BASE ROOT STATE zones/us-central1-a/servers/spanner-a-0.pod.spanner-ns:15000 spanner-a-0.pod.spanner-ns 15000 true - zones/us-central1-a/servers/spanner-a-1.pod.spanner-ns:15000 spanner-a-1.pod.spanner-ns 15000 - -מוחקים את השרת שהוצא משימוש שאינו שרת הבסיס עם האינדקס הגבוה ביותר (לדוגמה,
spanner-a-1.pod.spanner-ns:15000):spanner deployment servers delete SERVER_NAME \ --zone=ZONE \ --deployment-endpoint=ENDPOINTמחליפים את
SERVER_NAMEבמזהה השרת, לדוגמה,spanner-a-1.pod.spanner-ns:15000.בודקים את רשימת השרתים עד שהשרת המטרה מוסר מהרשימה. אחרי המחיקה, השרת עובר למצב לא תקין במערכת ומוסר מנתיב השירות הפעיל.
מצמצמים את הפריסה של Helm על ידי הפעלת פקודת שדרוג של Helm כדי להתאים למספר העותקים המשוכפלים הרצוי. לדוגמה, כדי להקטין את מספר הרפליקות לכל אזור ל-
1פוד, מריצים את הפקודה הבאה:helm upgrade spanner-omni HELM_CHART_PATH \ --version VERSION \ --reuse-values \ --set deployment.replicasPerZone=REPLICAS \ -n NAMESPACEמחליפים את
REPLICASבמספר העותקים המעודכן, לדוגמה,1.מוחקים את התביעות לנפח אחסון מתמיד (PVC) של Kubernetes שמשויכות לקבוצות ה-Pod שהוסרו. כדי למנוע אובדן נתונים בטעות, Helm ו-Kubernetes לא מוחקים אוטומטית PVCs כשמצמצמים את קנה המידה של StatefulSet. כדי לפנות את האחסון לחלוטין, צריך למחוק ידנית את ה-PVC:
kubectl delete pvc LOGS_PVC DATA_PVC -n NAMESPACEלדוגמה, כדי למחוק את היומנים ואת נפחי הנתונים של
spanner-a-1במרחב השמותspanner-ns:kubectl delete pvc logs-volume-spanner-a-1 data-volume-spanner-a-1 -n spanner-ns
הוספת אזור
הוספת אזור חדש לפריסה משפרת את הזמינות ומגנה על מסד הנתונים מפני הפסקות חשמל באזור יחיד.
לדוגמה, הפקודה הבאה מאתחלת פריסה פעילה של אזור יחיד ב-Google Kubernetes Engine (GKE) באזור us-east1-b באזור us:
helm upgrade --install spanner-omni HELM_CHART_PATH \
--version VERSION \
--set resources.cpu=2 \
--set resources.memory=8Gi \
--set global.platform=gke \
--set-json 'locations=[{"name":"us","zones":[{"name":"us-east1-b","shortName":"east-b"}]}]' \
-n NAMESPACE
כדי להוסיף את האזור us-east1-c להגדרות האלה, מבצעים את השלבים הבאים:
מריצים את הפקודה
helm upgradeומעבירים בלוק JSON מעודכן שכולל את אזור המיקום החדש כדי להפעיל את ה-pods באזור החדש:helm upgrade spanner-omni HELM_CHART_PATH \ --version VERSION \ --reuse-values \ --set-json 'locations=[{"name":"us","zones":[{"name":"us-east1-b","shortName":"east-b"},{"name":"us-east1-c","shortName":"east-c"}]}]' \ -n NAMESPACEמוסיפים את האזור החדש באמצעות Spanner Omni CLI. ממתינים עד שה-pods של שרת הבסיס באזור החדש שנוצר יעברו למצב
Runningויהיו מוכנים. לאחר מכן, מריצים את הפקודה ליצירת אזור:spanner deployment zones create NEW_ZONE \ --location=LOCATION \ --root-servers=ROOT_SERVERS_LIST \ --deployment-endpoint=ENDPOINTמחליפים את מה שכתוב בשדות הבאים:
-
NEW_ZONE: המזהה של האזור שרוצים להוסיף, לדוגמהus-east1-c. -
LOCATION: מיקום הפריסה, לדוגמהus. -
ROOT_SERVERS_LIST: רשימה מופרדת בפסיקים של נקודות קצה של שרתי הבסיס באזור החדש – לדוגמה,spanner-east-c-0.pod.spanner-ns:15000,spanner-east-c-1.pod.spanner-ns:15000,spanner-east-c-2.pod.spanner-ns:15000. -
ENDPOINT: נקודת הקצה של הפריסה החיצונית, לדוגמה,${ENDPOINT}:15000.
-
ממתינים לסיום יצירת האזור. שכפול של סכימות וטבלאות קיימות במסד נתונים לאזור חדש לוקח זמן. כדי לעקוב אחרי התקדמות הסנכרון של האזורים, מריצים את הפקודה הבאה כדי להציג את אזורי הפריסה:
spanner deployment zones list --deployment-endpoint=ENDPOINT
הסרת אזור
אפשר להוציא משימוש אזור פעיל מפריסת ריבוי אזורים כדי לצמצם את המשאבים או להתאים לשינויים בטופולוגיה.
כדי להסיר את האזור us-east1-c שנוצר בקטע הקודם, מבצעים את השלבים הבאים:
מוחקים את האזור ומפעילים את פירוק האזור ב-Spanner Omni:
spanner deployment zones delete ZONE --deployment-endpoint=ENDPOINTמחליפים את
ZONEבאזור שרוצים להסיר – לדוגמה,us-east1-c.מוודאים שהאזור הוסר. מריצים פקודת רשימה וממתינים עד שהאזור לא מופיע יותר בפלט:
spanner deployment zones list --deployment-endpoint=ENDPOINTכדי להסיר את השרתים מאשכול Kubernetes, מריצים פקודת helm upgrade ומעבירים בלוק JSON מעודכן של מיקומים שלא כולל את האזור שהוסר:
helm upgrade spanner-omni HELM_CHART_PATH \ --version VERSION \ --reuse-values \ --set-json 'locations=[{"name":"us","zones":[{"name":"us-east1-b","shortName":"east-b"}]}]' \ -n NAMESPACE
הגדלת נפח האחסון
מכיוון ש-Kubernetes volumeClaimTemplates הם בלתי ניתנים לשינוי, אי אפשר להגדיל את נפח האחסון של הפודים באמצעות הפקודה helm upgrade ישירות. במקום זאת, צריך להגדיל את נפח האחסון באופן ידני. מידע נוסף זמין במדריך בנושא
הרחבת נפח של StatefulSet ב-GKE.
כדי להגדיל את נפח האחסון בדיסק, פועלים לפי השלבים הבאים:
מגדירים את הפרמטרים להרחבת נפח האחסון כמשתני סביבה בטרמינל:
NEW_SIZE="NEW_SIZE" NAMESPACE="NAMESPACE" RELEASE_NAME="spanner-omni" STATEFULSET_NAMES="STATEFULSET_NAME_1 STATEFULSET_NAME_2 STATEFULSET_NAME_3" HELM_CHART_PATH="HELM_CHART_PATH" VERSION="VERSION"מחליפים את מה שכתוב בשדות הבאים:
-
NEW_SIZE: גודל קיבולת האחסון של היעד, לדוגמה,200Gi. -
NAMESPACE: מרחב השמות של Kubernetes – לדוגמה,spanner-ns. -
STATEFULSET_NAME_1,STATEFULSET_NAME_2...: השמות של StatefulSets בפריסה, בדרך כלל בהתאם לשמות הקצרים של האזורים (לדוגמה,spanner-east-b spanner-east-c). -
HELM_CHART_PATH: הנתיב לתרשים Helm, לדוגמה,oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni. -
VERSION: הגרסה של תרשים Helm – לדוגמה,0.2.0.
-
מריצים את הפקודות כדי לתקן את ה-PVC, למחוק את ה-StatefulSets (כך שה-pods של ה-backend יישארו ללא שינוי) ולשדרג את פריסת ה-Helm:
# Patch all associated PVCs directly. for pvc in $(kubectl get pvc -n $NAMESPACE \ -l app.kubernetes.io/instance=$RELEASE_NAME \ -o name | grep "data-volume"); do kubectl patch $pvc -n $NAMESPACE -p "{\"spec\":{\"resources\":{\"requests\":{\"storage\":\"$NEW_SIZE\"}}}}" done # Delete the StatefulSet while leaving backend pods intact (orphan cascade). kubectl delete statefulset $STATEFULSET_NAMES -n $NAMESPACE --cascade=orphan # Run Helm upgrade to align the templates with the expanded size. helm upgrade $RELEASE_NAME $HELM_CHART_PATH \ --version $VERSION \ --reuse-values \ --set storage.data.size=$NEW_SIZE \ -n $NAMESPACE