במסמך הזה מוסבר איך להגדיר את BackupRepository הנדרש לשירות מסד הנתונים (DBS) של Google Distributed Cloud (GDC) עם air gap. המאגר הזה, שחובה לקרוא לו dbs-backup-repository, הוא משאב בהתאמה אישית ב-Kubernetes שמפנה את שירות הגיבוי של GDC לקטגוריית אחסון אובייקטים שתואמת ל-S3, כדי לאחסן גיבויים של מסדי נתונים.
הגדרה נכונה היא חיונית כדי להפעיל פונקציות של גיבוי ושחזור למכונות DBS כמו PostgreSQL, Oracle ו-AlloyDB Omni.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שהתנאים הבאים מתקיימים:
- פרויקט: פרויקט לאירוח הקטגוריה, בדרך כלל בשם
backups, עם גישה לחשבון השירות בלבד. - גישה: הרשאות מספיקות כדי לקיים אינטראקציה עם שרת ה-API לניהול.
- כדי ליצור את מאגר הגיבויים, למשתמש צריכים להיות התפקידים הבאים ברמת הארגון:
- אדמין של קטגוריות (
bucket-admin) - יצירת פרויקטים (
project-creator) - אדמין של גיבויים בארגון (
organization-backup-admin)
- אדמין של קטגוריות (
- בפרויקט היעד:
- אדמין של פרויקט ב-IAM (
project-iam-admin) - צפייה בפרויקט של אובייקט בקט (
project-bucket-object-viewer) - אדמין של פרויקט אובייקטים בקטגוריה (
project-bucket-object-admin) - אדמין של פרויקט קטגוריות (
project-bucket-admin) - צפייה בסודות (
secret-viewer) - אדמין של מרחב שמות (
namespace-admin) - יצירת גיבויים (
backup-creator)
- אדמין של פרויקט ב-IAM (
- כדי ליצור את מאגר הגיבויים, למשתמש צריכים להיות התפקידים הבאים ברמת הארגון:
- כלים:
- מסוף GDC.
- kubectl CLI מוגדר כדי לגשת לשרת ה-API לניהול.
יצירת קטגוריה של מאגר אובייקטים
כל השלבים הבאים מתבצעים בשרת ה-API לניהול. הגדרה ויצירה של משאב Bucket. השם המומלץ dbs-backups לקטגוריית האחסון הזו מופיע בהמשך המסמך, בתוך מרחב השמות של הפרויקט backups. מוודאים שאין בקטגוריה מדיניות שמירת נתונים.
המסוף
- נכנסים למסוף GDC של הארגון.
- מוודאים שאתם נמצאים בפרויקט
backups. - עוברים אל מאגר אובייקטים > קטגוריות.
- לוחצים על Create Bucket.
- מגדירים את שם הקטגוריה בתור
dbs-backups. - מגדירים את התיאור בתור
Bucket for DBS backups. - מגדירים את סוג האחסון (storage class) לפי הצורך. לדוגמה,
Standard. - בקטע Security, חשוב לוודא שלא מגדירים מדיניות שמירה, כי זה יגרום לשמירה שגויה של מסדי נתונים והגיבויים שלהם.
- לוחצים על יצירה.
API
- מחילים את המניפסט הבא על שרת ה-API לניהול:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f -
<<EOF
apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
name: dbs-backups
namespace: backups
spec:
description: "Bucket for DBS backups"
storageClass: "Standard"
EOF
יצירת חשבון שירות והגדרת הרשאות
יוצרים ProjectServiceAccount ונותנים לו הרשאות גישה לקטגוריה.
המסוף
- בפרויקט
backups, עוברים אל זהות וגישה > זהויות שירות. - לוחצים על Create Service Identity. נפתח הדף Service Identity details.
- בשדה Service identity name, מזינים את הערך
dbs-backup-sa. - לוחצים על יצירה.
- עוברים אל Identity & Access > Access.
- ברשימה חברים, לוחצים על הוספת חבר. מוצג הדף משתמשים ותפקידים.
- ברשימה Member type, בוחרים באפשרות Service identity.
- ברשימה Service identity, בוחרים את
dbs-backup-saכדי להקצות קישור לתפקיד. - ברשימה Role, בוחרים את התפקיד Bucket Object Project Admin כדי להקצות אותו לזהות השירות.
- לוחצים על הוספה.
API
- מחילים את המניפסטים האלה על שרת ה-API לניהול:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f -
<<EOF
apiVersion: resourcemanager.gdc.goog/v1
kind: ProjectServiceAccount
metadata:
name: dbs-backup-sa
namespace: backups
spec: {}
EOF
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f -
<<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: dbs-backups-readwrite-rolebinding
namespace: backups
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: project-bucket-object-admin
subjects:
- kind: ServiceAccount
name: dbs-backup-sa
namespace: backups
EOF
זיהוי הסוד של פרטי הכניסה של חשבון השירות ופרטי הקטגוריה
אחרי שמעניקים ל-dbs-backup-sa גישה לקטגוריה, GDC יוצר באופן אוטומטי סוד באותו מרחב שמות, backups, שמכיל את פרטי הכניסה ל-S3. אתם צריכים למצוא את שם הסוד ואת פרטי הקטגוריה באמצעות kubectl CLI (API).
מגדירים את משתני הסביבה:
export SA_NAMESPACE="backups" export SA_NAME="dbs-backup-sa" export KUBECONFIG=MANAGEMENT_API_SERVERמוצאים את השם הסודי:
export BUCKET_CRED_SECRET_NAME=$(kubectl --kubeconfig=${KUBECONFIG} get secret \ -n "${SA_NAMESPACE}" -l object.gdc.goog/subject-type=ServiceAccount -o json | \ jq -r --arg SA_NAME "${SA_NAME}" \ '.items[] | select(.metadata.annotations["object.gdc.goog/subject"] == $SA_NAME and (.metadata.name |startswith("object-storage-key-std-sa-"))) | .metadata.name') echo "Bucket Credential Secret Name: ${BUCKET_CRED_SECRET_NAME}"הפקודה הזו מסננת את הסודות במרחב השמות
backupsכדי למצוא את הסוד שנוסף לו הערה לחשבון השירותdbs-backup-sa, ושתואם למוסכמות מתן השמות הרגילות. כדי להריץ את הפקודה הזו, צריך להיות לכם תפקיד "צפייה בסודות" (secret-viewer) בפרויקטbackups, או לבקש מהאדמין של הפלטפורמה שיצר את חשבון השירות לספק את שם הסוד.מקבלים את פרטי נקודת הקצה והאזור של הקטגוריה:
export BUCKET_NAME=dbs-backups export FULL_BUCKET_NAME=$(kubectl --kubeconfig=${KUBECONFIG} get bucket -n ${SA_NAMESPACE} ${BUCKET_NAME} -o jsonpath='{.status.fullyQualifiedName}') export ENDPOINT=$(kubectl --kubeconfig=${KUBECONFIG} get bucket -n ${SA_NAMESPACE} ${BUCKET_NAME} -o jsonpath='{.status.endpoint}') export REGION=$(kubectl --kubeconfig=${KUBECONFIG} get bucket -n ${SA_NAMESPACE} ${BUCKET_NAME} -o jsonpath='{.status.region}') echo "FULL_BUCKET_NAME: ${FULL_BUCKET_NAME}" echo "ENDPOINT: ${ENDPOINT}" echo "REGION: ${REGION}"
יצירת BackupRepository
יוצרים את המשאב BackupRepository, תוך הפניה לסוד שזוהה בקטע הקודם, זיהוי הסוד של פרטי הכניסה של חשבון השירות ופרטי הקטגוריה. צריך לבצע את השלב הזה באמצעות kubectl CLI (API).
יוצרים את קובץ ה-YAML, למשל
backup-repo.yaml, ומחליפים את המשתנים שנמצאים בקטע הקודם:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: backup.gdc.goog/v1 kind: BackupRepository metadata: name: dbs-backup-repository # This specific name is required for DBS spec: secretReference: namespace: "backups" # Namespace of the Service Account and the auto-generated secret name: BUCKET_CRED_SECRET_NAME endpoint: ENDPOINT type: "S3" s3Options: bucket: FULL_BUCKET_NAME region: REGION forcePathStyle: true importPolicy: "ReadWrite" force: true EOFמחליפים את מה שכתוב בשדות הבאים:
-
BUCKET_CRED_SECRET_NAME: שם הסוד. -
ENDPOINT: נקודת הקצה של הקטגוריה. -
FULL_BUCKET_NAME: השם המלא של הקטגוריה. -
REGION: האזור של הקטגוריה.
-
אימות של מאגר הגיבויים
בודקים את סטטוס המאגר כדי לוודא שהוא הוגדר בצורה נכונה.
מדפיסים את המידע של מאגר הגיבויים:
kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .statusמוודאים שהפלט נראה דומה לזה: הודעת
NoErrorהיא האות לכך שהמאגר הוגדר כמצופה:NAME TYPE POLICY ERROR dbs-backup-repository S3 ReadWrite NoError status: conditions: - lastTransitionTime: "2025-11-13T00:36:09Z" message: Backup Repository reconciled successfully reason: Ready status: "True" type: Ready initialImportDone: true reconciliationError: NoError sentinelEtag: 9b82fbb7-6ea2-444d-8878-ab91397ae961