שימוש במצב תחזוקה באשכול מסד נתונים ב-Kubernetes

בחירת גרסת תיעוד:

בדף הזה מוסבר איך להעביר את מסד הנתונים למצב תחזוקה באשכול Kubernetes.

אם מסד הנתונים שלכם פועל באשכול Kubernetes, אתם יכולים להעביר את מסד הנתונים למצב תחזוקה על ידי השבתה של בדיקות פעילות ובדיקות הפעלה שפועלות באפליקציה שמופעלת בתוך קונטיינר, כדי לוודא שפוד מסד הנתונים במצב תקין. מצב תחזוקה מאפשר להעביר את ה-Pod למצב פעולה כשצריך לבצע עדכון תחזוקה או לתקן את ה-Pod.

הפעלת מצב תחזוקה

  1. בודקים אם יש בדיקות תקינות ב-Pod של מסד נתונים:

    1. בדיקת מצב הפעילות (liveness):

      kubectl get po -n NAMESPACE DATABASE_POD_NAME  -o jsonpath='{.spec.containers[?(@.name=="database")].livenessProbe}'

      מחליפים את מה שכתוב בשדות הבאים:

      • ‫NAMESPACE: השם של מרחב שמות שמשמש להרצת מסד הנתונים, לדוגמה db.
      • ‫DATABASE_POD_NAME: השם של pod מסד הנתונים, לדוגמה al-4017-dbcluster-sample-0.

      כך נראה פלט לדוגמה עם בדיקת תקינות:

      {"failureThreshold":3,"httpGet":{"path":"/healthz?","port":8090,"scheme":"HTTP"},"periodSeconds":10,"successThreshold":1,"timeoutSeconds":3}
      
    2. בדיקת מוכנות להפעלה:

      kubectl get po -n NAMESPACE DATABASE_POD_NAME -o jsonpath='{.spec.containers[?(@.name=="database")].startupProbe}'

      הדוגמה הבאה מציגה פלט לדוגמה עם בדיקת הפעלה:

      {"exec":{"command":["/usr/lib/postgresql/15/bin/psql","-hlocalhost","-Ualloydbadmin","-c","SELECT 1"]},"failureThreshold":180,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":1}
      
  2. מגדירים את mode ל-maintenance בקטע spec של המניפסט DBCluster:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: DB_CLUSTER_NAME
      namespace: NAMESPACE
    spec:
      allowExternalIncomingTraffic: false
      isDeleted: false
      mode: maintenance
      primarySpec:
      ...
    

    מחליפים את DB_CLUSTER_NAME בשם של אשכול מסד הנתונים הזה – לדוגמה, my-db-cluster.

  3. מחילים את המניפסט:

    kubectl apply -f DB_CLUSTER_YAML

    מחליפים את DB_CLUSTER_YAML בשם של קובץ המניפסט של אשכול מסד הנתונים הזה, לדוגמה alloydb-omni-db-cluster.yaml.

  4. כדי לוודא שמצב התחזוקה מופעל, מריצים את הפקודות הבאות:

    • בדיקת מצב הפעילות (liveness):

      kubectl get po -n NAMESPACE DATABASE_POD_NAME  -o jsonpath='{.spec.containers[?(@.name=="database")].livenessProbe}'
    • בדיקת הפעלה:

      kubectl get po -n NAMESPACE DATABASE_POD_NAME  -o jsonpath='{.spec.containers[?(@.name=="database")].startupProbe}'

    הפלט לא מכיל את השדות Liveness ו-Startup בקטע spec של תא POD_NAME.

השבתת מצב תחזוקה

כדי לחזור להתנהגות הרגילה של אשכול מסד הנתונים עם בדיקות תקינות והפעלה, משתמשים בפקודה הבאה כדי להסיר את maintenance מהקטע spec במניפסט של DBCluster:

kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -p '{"spec":{"mode":""}}' --type=merge -n DB_CLUSTER_NAMESPACE --type=merge

פלט לדוגמה:

  • באמצעות בדיקת תקינות:

    {"failureThreshold":3,"httpGet":{"path":"/healthz?","port":8090,"scheme":"HTTP"},"periodSeconds":10,"successThreshold":1,"timeoutSeconds":3}
    
  • באמצעות בדיקת הפעלה:

    {"exec":{"command":["/usr/lib/postgresql/15/bin/psql","-hlocalhost","-Ualloydbadmin","-c","SELECT 1"]},"failureThreshold":180,  "periodSeconds":10,"successThreshold":1,"timeoutSeconds":1}