אופרטור Stateful High Availability (זמינות גבוהה עם שמירת מצב) מאפשר להשתמש באינטגרציה המובנית של GKE עם דיסק מתמשך אזורי כדי להפוך את הגיבוי של פודים מסוג StatefulSet לאוטומטי ולשלוט במהירות שלו. במהלך מעבר לגיבוי, האופרטור מטפל אוטומטית בזיהוי כשל בצומת, בהסרת אמצעי אחסון מצומת שנכשל ובחיבור בטוח של אמצעי האחסון לצומת הגיבוי.
למה כדאי להשתמש ב-Stateful HA Operator
ארכיטקטורה נפוצה עם שמירת מצב להשגת זמינות גבוהה משתמשת בדיסקים קשיחים אזוריים כשכבת האחסון. הדיסקים האלה מספקים שכפול סינכרוני של נתונים בין שני אזורים באזור. במהלך כשלים ברשת של צומת או אזור, הארכיטקטורה הזו מאפשרת לעומסי העבודה שלכם לבצע מעבר לגיבוי בעת כשל (על ידי צירוף בכפייה) של רפליקות לאחסון בצומת אחר באזור אחר.
ה-Operator של HA עם שמירת מצב מאפשר לבצע את האופטימיזציות הבאות:
- שיפור זמן השחזור של אפליקציות עם עותק יחיד: אם משתמשים רק בעותק אחד, אפשר להשתמש ב-Stateful HA Operator ולהחליף את האחסון האזורי באחסון אזורי כשמקצים את האפליקציה, כדי לשפר את עמידות הנתונים והזמינות שלהם במקרה של כשל בצומת.
- הפחתת עלויות של רשתות בין אזורים: שכפול נתונים בכמה אזורים יכול להיות יקר עבור אפליקציות עם תפוקה גבוהה. אתם יכולים להשתמש ב-Stateful HA Operator כדי להריץ את האפליקציה בתחום (zone) אחד, תוך שמירה על נתיב יתירות כשל לתחום (zone) חלופי שמתאים להסכם רמת שירות (SLA) של האפליקציה.
מגבלות
- אין תמיכה בסוג הנפח gcePersistentDisk. להשתמש ב-
PersistentVolumeשמשתמש במנהל התקן CSI של דיסק לאחסון מתמיד. - בארכיטקטורה של Stateful HA Operator עם עותק יחיד, GKE שומר את הנתונים שלכם בשני אזורים באמצעות דיסק קשיח אזורי, אבל הגישה לנתונים אפשרית רק אם העותק של האפליקציה תקין. במהלך מעבר לגיבוי, האפליקציה לא תהיה זמינה באופן זמני בזמן שהרפליקה מתוזמנת מחדש לצומת חדש תקין. אם לאפליקציה שלכם יש יעד זמן שחזור (RTO) נמוך מאוד, מומלץ להשתמש בגישה של כמה רפליקות.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
דרישות
- כשמשתמשים ב-Stateful HA Operator, הוא מגדיר באופן אוטומטי את ה-StatefulSet המקושר לשימוש בדיסקים קשיחים אזוריים. עם זאת, אתם אחראים לוודא שרכיבי ה-Pod מוגדרים לשימוש בדיסקים האלה, ושיש להם יכולת לפעול בכל האזורים שמשויכים לאחסון הבסיסי.
- מוודאים שהאפליקציה פועלת בצורות מכונה שנתמכות על ידי דיסק קשיח אזורי: E2, N1, N2, N2D.
- מוודאים שהדרייבר של CSI של דיסק לאחסון מתמיד ב-Compute Engine מופעל. דרייבר CSI של Persistent Disk מופעל כברירת מחדל באשכולות חדשים של Autopilot ו-Standard, ואי אפשר להשבית או לערוך אותו כשמשתמשים ב-Autopilot. אם אתם צריכים להוסיף ידנית את מנהל ההתקן של Persistent Disk CSI מהאשכול, תוכלו לעיין במאמר הפעלת מנהל ההתקן של Persistent Disk CSI באשכול קיים.
- אם אתם משתמשים ב-StorageClass מותאם אישית, צריך להגדיר את מנהל ה-CSI של Persistent Disk באמצעות
pd.csi.storage.gke.ioprovisioner והפרמטרים הבאים:availability-class: regional-hard-failoverreplication-type: regional-pd
הגדרה ושימוש ב-Stateful HA Operator
כדי להגדיר את Stateful HA Operator לעומסי העבודה עם שמירת מצב:
- מפעילים את התוסף
StatefulHA. - מתקינים משאב HighAvailabilityApplication.
- מתקינים StatefulSet.
- בודקים את המשאב HighAvailabilityApplication.
הפעלת התוסף StatefulHA
כדי להשתמש ב-Stateful HA Operator, צריך להפעיל את התוסף StatefulHA באשכול.
אשכולות Autopilot: מערכת GKE מפעילה באופן אוטומטי את התוסף
StatefulHAכשיוצרים את האשכול. אם רוצים להשתמש ב-Stateful HA Operator בעומס עבודה קיים, צריך להפעיל באופן ידני את מנהל התקן ה-CSI של דיסק מתמשך ב-Compute Engine. מידע נוסף זמין במאמר בנושא הפעלת מנהל התקנים של CSI לדיסק מתמשך באשכול קיים.אשכולות רגילים:
- יצירת אשכול חדש: פועלים לפי ההוראות של ה-CLI של gcloud כדי ליצור אשכול רגיל ומוסיפים את הדגל הבא:
--addons=StatefulHA=ENABLED. - קלאסטר קיים מסוג Standard: פועלים לפי ההוראות לשימוש ב-CLI של gcloud כדי לעדכן את ההגדרות של קלאסטר מסוג Standard, ומשתמשים בדגל הבא כדי להפעיל את התוסף:
--update-addons=StatefulHA=ENABLED.
- יצירת אשכול חדש: פועלים לפי ההוראות של ה-CLI של gcloud כדי ליצור אשכול רגיל ומוסיפים את הדגל הבא:
GKE מתקין באופן אוטומטי StorageClass בשם standard-rwo-regional כשמפעילים את התוסף.
התקנה של משאב HighAvailabilityApplication
HighAvailabilityApplication הוא משאב ב-Kubernetes שמפשט את ההגדרות של StatefulSet ומגדיל את הזמינות של ה-Pod ב-GKE.
אופרטור HA עם שמירת מצב מבצע התאמה בין משאבי HighAvailabilityApplication ב-GKE.
במפרט HighAvailabilityApplication, צריך להגדיר את HighAvailabilityApplication.spec.resourceSelection.resourceKind לערך StatefulSet.
כדי ללמוד איך להגדיר את משאב הזמינות הגבוהה, אפשר לעיין בHighAvailabilityApplication מאמרי העזרה.
דוגמה ל-PostgreSQL:
שומרים את המניפסט הבא בקובץ בשם
stateful-ha-example-resource.yaml:kind: HighAvailabilityApplication apiVersion: ha.gke.io/v1 metadata: name: APP_NAME namespace: APP_NAMESPACE spec: resourceSelection: resourceKind: StatefulSet policy: storageSettings: requireRegionalStorage: true failoverSettings: forceDeleteStrategy: AfterNodeUnreachable afterNodeUnreachable: afterNodeUnreachableSeconds: 20מחליפים את מה שכתוב בשדות הבאים:
- APP_NAME: השם של אפליקציה באשכול שרוצים להגן עליה. השם הזה צריך להיות משותף ל-HighAvailabilityApplication ול-StatefulSet.
- APP_NAMESPACE: מרחב השמות של האפליקציה. מרחב השמות הזה צריך להיות משותף ל-HighAvailabilityApplication ול-StatefulSet שמוגנים.
בדוגמה הזו:
- הערך של
HighAvailabilityApplication.spec.policy.storageSettings.requireRegionalSettingsהואtrue. כך מתבצעת אכיפה של אחסון אזורי. HighAvailabilityApplication.spec.policy.failoverSettingsמוגדר כ-AfterNodeUnreachable. הערך הזה קובע איך מחיקה בכוח מופעלת במקרה של כשל בצומת.- הערך של
HighAvailabilityApplication.spec.policy.failoverSettings.afterNodeUnreachableהוא 20. זהו הזמן הקצוב לתפוגה למחיקה מאולצת של Pod אחרי שהצומת שהוא פועל בו מסומן כבלתי ניתן להשגה.
יוצרים את המשאב. המשאב
HighAvailabilityApplicationמזהה StatefulSet עם מרחב שמות ושם תואמים.kubectl apply -f stateful-ha-example-resource.yaml
התקנה של StatefulSet
מתקינים StatefulSet. לדוגמה, אפשר להתקין PostgreSQL StatefulSet באמצעות Helm (Helm מותקן מראש ב-Cloud Shell):
helm install postgresql oci://registry-1.docker.io/bitnamicharts/postgresql \
--namespace=APP_NAMESPACE \
--set fullnameOverride=APP_NAME
המשאב HighAvailabilityApplication משנה אוטומטית את StorageClass של StatefulSet ל-standard-rwo-regional, שמשתמש ב-Persistent Disk אזורי.
בדיקת המשאב HighAvailabilityApplication
מריצים את הפקודה הבאה כדי לוודא שהאפליקציה לדוגמה כוללת מעבר אוטומטי לגיבוי:
kubectl describe highavailabilityapplication APP_NAME
הפלט אמור להיראות כך:
Status:
Conditions:
Last Transition Time: 2023-08-09T23:59:52Z
Message: Application is protected
Observed Generation: 1
Reason: ApplicationProtected
Status: True
Type: Protected
שימוש בדיסקים קיימים של אחסון מתמיד
אם אתם משתמשים בדיסק אחסון מתמיד קיים וב-PersistentVolume שהוגדר באופן סטטי, צריך להגדיר את ה-PersistentVolume עם force-attach: true ב-.spec.csi.volumeAttributes. לדוגמה:
apiVersion: v1
kind: PersistentVolume
metadata:
name: PV_NAME
spec:
storageClassName: "STORAGE_CLASS_NAME"
capacity:
storage: DISK_SIZE
accessModes:
- ReadWriteOnce
claimRef:
name: PV_CLAIM_NAME
namespace: default
csi:
driver: pd.csi.storage.gke.io
volumeHandle: DISK_ID
fsType: FS_TYPE
volumeAttributes:
force-attach: ¨true¨