כיצד לבצע גיבוי ושחזור באמצעות TrilioVault ב-DOKS

הקדמה

במדריך זה, תלמד כיצד לפרוס את TrilioVault עבור Kubernetes (או TVK) לקשת ה-DOKS שלך, ליצור גיבויים, ולשחזר מגיבוי אם משהו הולך לא נכון. ניתן לגבות את כל הקשת שלך, או לבחור אופציונלית גיבויים על בסיס שם מרחב או תוויות.

יתרונות של שימוש ב-Trilio:

  • בצע גיבויים מלאים (או תוספתיים) של הקשת שלך ושחזור במקרה של אובדן נתונים.
  • העבר מקשת אחת לקשת אחרת.
  • תמיכה בגיבויי Helm release.
  • הפעל הוקסים קודם ואחרי לפעולות גיבוי ושחזור.
  • לוח בקרה אינטרנטי שמאפשר לך לבדוק את מצב הפעולות של גיבוי/שחזור בפרטיות.
  • הגדר מדיניות ניצול עבור הגיבויים שלך.
  • מחזור חיי היישום (במובן, TVK עצמו) ניתן לניהול דרך אופרטור מיוחד של TrilioVault.
  • אינטגרציה עם Velero.
  • ניתן לגבות ולשחזר אפליקציות בעזרת אופרטור.

למידע נוסף, נא להפנות לתיעוד הרשמי של CRDs של TVK.

תוכן עניינים

דרישות מקדימות

כדי להשלים את המדריך הזה, יש לך צורך בדברים הבאים:

  1. A DO Spaces Bucket and access keys. Save the access and secret keys in a safe place for later use.
  2. A Git client to clone the Starter Kit repository.
  3. Helm, לניהול שחרורים ושדרוגים של TrilioVault Operator.
  4. Doctl לאינטראקציה עם API של DigitalOcean.
  5. Kubectl לאינטראקציה עם Kubernetes.

לקונפיגורציה תקינה ולגיבוי של ה-PVCs שלך, יש צורך להגדיר את DOKS כך שיתמוך בממשק אחסון היכול לקונטיינרים (CSI). באופן ברירת מחדל, הוא מגיע עם הדרייבר כבר מותקן ומוגדר. ניתן לבדוק באמצעות הפקודה הבאה:

kubectl get storageclass

הפלט צריך להיראות דומה לקטע הבא. שים לב שה-provisioner הוא dobs.csi.digitalocean.com.

NAME                         PROVISIONER                 RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
do-block-storage (default)   dobs.csi.digitalocean.com   Delete          Immediate           true                   10d

ההתקנה של TrilioVault דורשת גם קבצ CRD (מדריך למשאבים מותאמים אישית) volumeSnapshot עבור התקנה מוצלחת. ניתן לבדוק באמצעות הפקודה הבאה:

kubectl get crd | grep volumesnapshot

הפלט צריך להיראות דומה לקטע הבא. אם CRD VolumeSnapshot לא מותקן, נא להפנות ל- התקנת CRD VolumeSnapshot.

volumesnapshotclasses.snapshot.storage.k8s.io         2022-02-01T06:01:14Z
volumesnapshotcontents.snapshot.storage.k8s.io        2022-02-01T06:01:14Z
volumesnapshots.snapshot.storage.k8s.io               2022-02-01T06:01:15Z

כמו כן, ודא כי ה-CRD תומך בשני גרסאות API, v1beta1 ו-v1. ניתן להפעיל את הפקודה הבאה כדי לבדוק את גרסת ה-API:

kubectl get crd volumesnapshots.snapshot.storage.k8s.io -o yaml

בסופו של קובץ ה-CRD YAML, יש לראות רשימת storedVersions, המכילה את הערכים v1beta1 ו-v1 (אם לא מותקן, נא להפנות ל- התקנת CRD VolumeSnapshot):

...
- lastTransitionTime: "2022-01-20T07:58:06Z"
    message: approved in https://github.com/kubernetes-csi/external-snapshotter/pull/419
    reason: ApprovedAnnotation
    status: "True"
    type: KubernetesAPIApprovalPolicyConformant
  storedVersions:
  - v1beta1
  - v1

שלב 1 – התקנת TrilioVault עבור Kubernetes

בשלב זה, תלמד כיצד לפרוס את TrilioVault עבור DOKS ולנהל התקנות של TVK דרך Helm. נתוני גיבוי יאוחסנו בתוף DO Spaces שנוצר מראש בחלק הדרישות המקדימות.

יישום TrilioVault ניתן להתקין בכמה דרכים:

  • דרך TrilioVault Operator. אתה מגדיר CRD של TrilioVaultManager המורה לאופרטור TrilioVault כיצד לטפל בהתקנה, בשלבי התצורה לאחר ההתקנה, ובשדרוגים עתידיים של רכיבי היישום של Trilio.
  • דרך תרשים triliovault-operator המנוהל באופן מלא על ידי Helm, (מוסכם במדריך זה).

התקנת TrilioVault באמצעות Helm

מדריך הקיט התחיל משתמש בסוג ההתקנה הקבוצתית עבור היישום TVK (ערך Helm של applicationScope מוגדר ל-"Cluster"). כל הדוגמאות במדריך זה משתמשות בסוג ההתקנה הזה כדי שהן יעבדו באופן תקין.

ראשית, שכפל את תיק הקוד של Starter Kit Git ושנה את התיקייה להעתקה מקומית שלך:

git clone https://github.com/digitalocean/Kubernetes-Starter-Kit-Developers.git
cd Kubernetes-Starter-Kit-Developers

בשלב הבא, הוסף את המאגר של Helm של TrilioVault, ורשום את התרשימים הזמינים:

helm repo add triliovault-operator http://charts.k8strilio.net/trilio-stable/k8s-triliovault-operator
helm repo update triliovault-operator
helm search repo triliovault-operator

הפלט דומה להבא:

NAME                                            CHART VERSION   APP VERSION     DESCRIPTION
triliovault-operator/k8s-triliovault-operator   2.9.2           2.9.2           K8s-TrilioVault-Operator is an operator designe...

התרשים המעניין הוא triliovault-operator/k8s-triliovault-operator, שיתקין את TrilioVault עבור Kubernetes על האשכול יחד עם TrilioVault-Manager. ניתן להריץ helm show values triliovault-operator/k8s-triliovault-operator ולייצא לקובץ כדי לראות את כל האפשרויות הזמינות.

לאחר מכן, פתחו ובדקו את קובץ הערכים של TrilioVault Helm המסופק במאגר ה- Starter בעזרת עורך לבחירתכם (מומלץ תמיכת YAML lint).

code 05-setup-backup-restore/assets/manifests/triliovault-values-v2.9.2.yaml

לבסוף, התקינו את TrilioVault עבור Kubernetes באמצעות Helm:

helm install triliovault-operator triliovault-operator/k8s-triliovault-operator \
  --namespace tvk \
  --create-namespace \
  -f 05-setup-backup-restore/assets/manifests/triliovault-values.yaml

–create-namespace \

הפקודה מעל מתקינה את TrilioVault Operator ואת משאב המנהל של TriloVault (TVM) באמצעות הפרמטרים שסופקו ב- triliovault-values.yaml. גרסת TVK מנוהלת כעת על ידי השדה tag בקובץ 05-setup-backup-restore/assets/manifests/triliovault-values.yaml, כך שהפקודת helm תמיד תכיל את הגרסה העדכנית ביותר של TVK.

  1. ניתן לעדכן את השדות הבאים ב- values.yaml:
  2. installTVK.applicationScope עבור תיקון ה-TVK המותקן, לדוגמה Cluster או Namespaced
  3. installTVK.ingressConfig.host עבור שם מארח של ממשק המשתמש של TVK, לדוגמה tvk-doks.com

installTVK.ComponentConfiguration.ingressController.service.type עבור סוג השירות לגישה לממשק המשתמש של TVK, לדוגמה NodePort או LoadBalancer

helm ls -n tvk

עכשיו, בדקו את התקנת ה-TVK שלכם:

NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
triliovault-manager-tvk tvk             1               2022-06-08 08:30:08.490304959 +0000 UTC deployed        k8s-triliovault-2.9.2           2.9.2
triliovault-operator    tvk             1               2022-06-08 11:32:55.755395 +0300 EEST   deployed        k8s-triliovault-operator-2.9.2  2.9.2

הפלט דומה לקטע הבא (עמודת STATUS צריכה להציג deployed):

kubectl get deployments -n tvk

הבא, וודא ש-TrilioVault פועלת ותקינה:

NAME                                            READY   UP-TO-DATE   AVAILABLE   AGE
k8s-triliovault-admission-webhook               1/1     1            1           83s
k8s-triliovault-control-plane                   1/1     1            1           83s
k8s-triliovault-exporter                        1/1     1            1           83s
k8s-triliovault-ingress-nginx-controller        1/1     1            1           83s
k8s-triliovault-web                             1/1     1            1           83s
k8s-triliovault-web-backend                     1/1     1            1           83s
triliovault-operator-k8s-triliovault-operator   1/1     1            1           4m22s

הפלט דומה לקטע הבא. כל קפיצות ההתקנה חייבות להיות במצב Ready.

אם הפלט נראה כך, התקנת TVK בוצעה בהצלחה. באשף הבא, תלמד איך לבדוק את סוג הרישיון ותוקפו, וכן תינן איך לחדש אותו.

רישיון יישום TrilioVault

  • ברירת המחדל, בעת התקנת TVK דרך Helm, לא מותקן רישיון לניסיון חינם באופן אוטומטי. בכל זמן ניתן לעבור לאתר של Trilio וליצור רישיון חדש לקבוצת ה-Cluster שלך שמתאים לך (לדוג' ניתן לבחור את סוג הרישיון הבסיסי שמאפשר לך להריץ את TrilioVault ללא הגבלה אם קיבולת ה-Cluster שלך אינה עוברת את 10 קפיצות). רישיון ניסיון חינם מאפשר לך להריץ את TVK לחודש אחד על קפיצות ה-Cluster הבלתי מוגבלות.
  • TrilioVault היא בחינם עבור קפיצות ה-Kubernetes עם עד 100000 קפיצות עבור משתמשי DigitalOcean. הם יכולים לעקוב אחר השלבים הבאים כדי ליצור רישיון מיוחד זמין רק ללקוחות DO.

דוגמאות ערכת ההתחלה תלויות בסוג הרישיון של ה-Cluster כדי לפעול כהלכה.

יצירת ובדיקת רישויי אפליקציה TVK

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/tvk_install_license.yaml

הריץ את הפקודה הבאה כדי ליצור רישיון חדש עבור האשכול שלך (הוא ניהולי דרך CRD הרישיון):

הפקודה לעיל תיצור משימה job.batch/tvk-license-digitalocean שתפעיל כמשנה tvk-license-digitalocean-828rx כדי למשוך את הרישיון משרת הרישוי של Trilio ולהתקין אותו על האשכול DOKS. לאחר השלמת המשימה, היא תימחק בעוד 60 שניות.

kubectl apply -f <YOUR_LICENSE_FILE_NAME>.yaml -n tvk

אם אתה מוריד רישיון חינמי מאתר האינטרנט של Trilio, החל אותו באמצעות הפקודה הבאה:

kubectl get license -n tvk

אנא הרץ את הפקודה הבאה כדי לראות האם הרישיון מותקן ובמצב Active על האשכול שלך.

NAME             STATUS   MESSAGE                                   CURRENT NODE COUNT   GRACE PERIOD END TIME   EDITION     CAPACITY   EXPIRATION TIME        MAX NODES
test-license-1   Active   Cluster License Activated successfully.   1                                            FreeTrial   100000     2023-02-25T00:00:00Z   1

הפלט נראה דומה לזה שלמטה. שים לב לשדה STATUS שצריך להיות Active, כמו גם לסוג הרישיון בעמודת EDITION ולEXPIRATION TIME.

kubectl describe license test-license-1 -n tvk

הרישיון ניהולי דרך CRD מיוחד בשם אובייקט License. אתה יכול לבדוק אותו על ידי הרצת הפקודה הבאה:

Name:         test-license-1
Namespace:    tvk
Labels:       <none>
Annotations:
              generation: 1
              triliovault.trilio.io/creator: system:serviceaccount:tvk:k8s-triliovault
              triliovault.trilio.io/instance-id: b060660d-4851-482b-8e60-4addd260e1d3
              triliovault.trilio.io/updater:
                [{"username":"system:serviceaccount:tvk:k8s-triliovault","lastUpdatedTimestamp":"2022-02-24T06:38:21.418828262Z"}]
API Version:  triliovault.trilio.io/v1
Kind:         License
Metadata:
  Creation Timestamp:  2022-02-24T06:38:21Z
...
Status:
  Condition:
    Message:           License Key changed
    Timestamp:         2022-02-24T06:38:21Z
    Message:           Cluster License Activated successfully.
    Status:            Active
    Timestamp:         2022-02-24T06:38:21Z
  Current Node Count:  1
  Max Nodes:           1
  Message:             Cluster License Activated successfully.
  Properties:
    Active:                        true
    Capacity:                      100000
    Company:                       TRILIO-KUBERNETES-LICENSE-GEN-DIGITALOCEAN-BASIC
    Creation Timestamp:            2022-02-24T00:00:00Z
    Edition:                       FreeTrial
    Expiration Timestamp:          2023-02-25T00:00:00Z
    Kube UID:                      b060660d-4851-482b-8e60-4addd260e1d3
    License ID:                    TVAULT-5a4b42c6-953c-11ec-8116-0cc47a9fd48e
    Maintenance Expiry Timestamp:  2023-02-25T00:00:00Z
    Number Of Users:               -1
    Purchase Timestamp:            2022-02-24T00:00:00Z
    Scope:                         Cluster
...

הפלט נראה דומה לזה שלמטה. שים לב לשדה Message ולשדה Capacity, כמו גם לEdition.

הפלט לעיל יספק לך גם מתי הרישיון מתכוון לפוג בשדה תאריך פקיעה, והטווח (במקרה זה, מבוסס על קבוצה). באפשרותך לבחור בסוג רישיון לרשת כולה או במבוסס רישיון לפי אמצעי.

מתיחה של רישיון אפליקציית TVK

kubectl apply -f <YOUR_LICENSE_FILE_NAME>.yaml -n tvk

לחידוש הרישיון, עליך לבקש אחד חדש מאתר האינטרנט של Trilio על ידי ניווט אל דף הרישויות כדי להחליף את הישן. לאחר מילוי הטופס, אתה אמור לקבל את מפתח הרישיון YAML, אשר ניתן להחיל על הקבוצה שלך באמצעות kubectl. הפקודות הבאות מניחות כי TVK מותקן במרחב השמור tvk כברירת מחדל (יש להחליף את המילים המסומנות <> בהתאם, כאשר נדרש):

לאחר מכן, באפשרותך לבדוק את מצב הרישיון החדש כפי שלמדת כבר דרך:


kubectl get license -n tvk

# רשימת הרישיונות שזמינים לראשונה מתוך מרחב השמור `tvk`
kubectl describe license <YOUR_LICENSE_NAME_HERE> -n tvk

# קבלת מידע על רישיון מסוים מתוך מרחב השמור `tvk`

בשלב הבא, תלמד כיצד להגדיר את מאגר האחסון האחורי עבור TrilioVault לאחסון גיבויים, שנקרא "יעד".

שלב 2 – יצירת יעד TrilioVault לאחסון גיבויים

A typical Target definition looks like:

apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
  name: trilio-s3-target
  namespace: tvk
spec:
  type: ObjectStore
  vendor: Other
  enableBrowsing: true
  objectStoreCredentials:
    bucketName: <YOUR_DO_SPACES_BUCKET_NAME_HERE>
    region: <YOUR_DO_SPACES_BUCKET_REGION_HERE>
    url: 'https://<YOUR_DO_SPACES_BUCKET_ENDPOINT_HERE>'
    credentialSecret:
      name: trilio-s3-target
      namespace: tvk
  thresholdCapacity: 10Gi

TrilioVault צריך לדעת לאן לאחסן את הגיבויים שלך תחילה. TrilioVault מתייחס לאחסון האחורי באמצעות מונח ה-target, והוא ניהל דרך CRD מיוחדת בשם Target. הסוגים הבאים של יעדים נתמכים: S3 ו- NFS. עבור DigitalOcean ולמטרת ערכת ההתחלה, יש משמעות לסמוך על סוג האחסון S3 מכיוון שהוא זול וניתן להתרחבות. כדי להרוויח מרמת הגנה משופרת, ניתן ליצור מספר רב של סוגי יעדים (לשני ה-S3 ו-NFS), כך שהנתונים שלך נשמרים במקומות מרובים, מה שמבטיח את האטימות של הגיבויים.

  • בהגדרה זו,
  • spec.type: סוג היעד לאחסון הגיבויים (S3 הוא סטור עצם).
  • spec.vendor: ספק האחסון מהצד השלישי שמארח את היעד (עבור תחסון DigitalOcean Spaces עליך להשתמש ב- Other במקום ב- AWS).
  • spec.enableBrowsing: אפשר גלישה עבור היעד.
  • spec.objectStoreCredentials: מגדיר נתוני זיהוי נדרשים (דרך credentialSecret) כדי לגשת אל סטור ה- S3, ופרמטרים אחרים כגון אזור הסל ושם הסל.

spec.thresholdCapacity: קיבולת אישור מרבית לאחסון נתוני גיבויים.

apiVersion: v1
kind: Secret
metadata:
  name: trilio-s3-target
  namespace: tvk
type: Opaque
stringData:
  accessKey: <YOUR_DO_SPACES_ACCESS_KEY_ID_HERE> כדי לגשת לאחסון S3, כל יעד צריך לדעת את פרטי האישור של הדלי. עליך גם ליצור Secret ב-Kubernetes:

  secretKey: <YOUR_DO_SPACES_SECRET_KEY_HERE>    # הערך חייב להיות מוצפן בבסיס 64

# הערך חייב להיות מוצפן בבסיס 64

שים לב כי שם הסוד הוא trilio-s3-target והוא מתייחס לשדה spec.objectStoreCredentials.credentialSecret של ה-CRD של היעד שנסבר למעלה. ה-secret יכול להיות באותו namespace שבו הותקן TrilioVault (ברירת המחדל היא tvk), או בכל ניימספייס אחר שתבחר. רק וודא שאתה מתייחס לניימספייס בצורה נכונה. מצד שני, וודא שאתה מגן על הניימספייס שבו אתה אוחסן סודות TrilioVault דרך RBAC מסיבות אבטחה.

שלבים ליצירת יעד עבור TrilioVault:

cd Kubernetes-Starter-Kit-Developers

ראשית, שנה את התיקייה שבה התיק של Starter Kit של Git נוצר על המחשב המקומי שלך:

kubectl create secret generic trilio-s3-target \
  --namespace=tvk \
  --from-literal=accessKey="<YOUR_DO_SPACES_ACCESS_KEY_HERE>" \
  --from-literal=secretKey="<YOUR_DO_SPACES_SECRET_KEY_HERE>"

לאחר מכן, צור את ה-Secret של Kubernetes שמכיל פרטי האישור של הדלי שלך ב-S3 (אנא החלף את המילות מצופה <> בהתאם):

code 05-setup-backup-restore/assets/manifests/triliovault/triliovault-s3-target.yaml

–from-literal=accessKey="<המפתח_הגישה_שלך_ל-DO_SPACES_כאן>" \

–from-literal=secretKey="<המפתח_הסודי_שלך_ל-DO_SPACES_כאן>"

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/triliovault-s3-target.yaml

אז, פתחו ובדקו את קובץ התיאור של היעד המסופק במאגר הקוד המקורי של הערכת ההתחלה באמצעות עורך שתבחרו (מומלץ עם תמיכה ב־YAML lint).

עכשיו, אנא החליפו את המציינים <> בהתאם עבור הסל שלכם ב־DO Spaces Trilio, כמו bucketName, region, url ו־credentialSecret.

kubectl get target trilio-s3-target  -n tvk

לבסוף, שמרו את קובץ התיאור וצרו את אובייקט היעד באמצעות kubectl:

NAME               TYPE          THRESHOLD CAPACITY   VENDOR   STATUS      BROWSING ENABLED
trilio-s3-target   ObjectStore   10Gi                 Other    Available

הבא, TrilioVault תיצור עבודה של עובד בשם trilio-s3-target-validator אחראית לאימות הסל שלך ב־S3 (כמו זמינות, הרשאות, וכו'). אם העבודה מסתיימת בהצלחה, הסל נחשב כבריא או זמין ומשאב העבודה trilio-s3-target-validator נמחק אחר כך. אם משהו קורה, עבודת האימות של סל היעד ב־S3 נשארת תקפה כדי שתוכלו לבדוק את הלוגים ולמצוא את הבעיה האפשרית.

עכשיו, אנא המשיכו ובדקו האם משאב היעד שנוצר קודם הוא בריא:

הפלט דומה למקרים הבאים. שימו לב לערך העמודה STATUS - צריך להיות Available, מה שאומר שהוא במצב בריא.
kubectl get pods -n tvk | grep trilio-s3-target-validator

אם הפלט נראה כך, אז הגדרתם בהצלחה את אובייקט היעד של S3.
במקרה שהאובייקט היעד נכשל בהתגברות על הבריאות, ניתן לבדוק את הלוגים מה־Pod של trilio-s3-target-validator כדי למצוא את הבעיה:

# תחילה, עליך למצוא את הוולידטור היעד
kubectl logs pod/trilio-s3-target-validator-tio99a-6lz4q -n tvk

# הפלט נראה דומה לזה:

...
INFO:root:2021-11-24 09:06:50.595166: waiting for mount operation to complete.
INFO:root:2021-11-24 09:06:52.595772: waiting for mount operation to complete.
ERROR:root:2021-11-24 09:06:54.598541: timeout exceeded, not able to mount within time.
ERROR:root:/triliodata is not a mountpoint. We can't proceed further.
Traceback (most recent call last):
  File "/opt/tvk/datastore-attacher/mount_utility/mount_by_target_crd/mount_datastores.py", line 56, in main
    utilities.mount_datastore(metadata, datastore.get(constants.DATASTORE_TYPE), base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 377, in mount_datastore
    mount_s3_datastore(metadata_list, base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 306, in mount_s3_datastore
    wait_until_mount(base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 328, in wait_until_mount
    base_path))
Exception: /triliodata is not a mountpoint. We can't proceed further.
...

#trilio-s3-target-validator-tio99a-6lz4q 1/1 פועל 0 104 שניות

# עכשיו, קבל נתוני יומנים

הפלט יהיה זה החריג:

לאחר מכן, תגלה את לוח הבקרה של TVK שהוא תוספת שימושית שתעזור לך לנהל פעולות גיבוי ושחזור בקלות, בין השאר.

שלב 3 – להכיר את לוח הבקרה לניהול של TVK

בעוד שניתן לנהל פעולות גיבוי ושחזור מקו־פקודה לגמרי באמצעות kubectl ו־CRDs, TVK מספקת לוח בקרה לניהול רשתי לביצוע אותן פעולות באמצעות ממשק המשתמש הגרפי. לוח הבקרה מפשט משימות נפוצות באמצעות פעולות לחיצה וספק תצוגה ובדיקה טובה יותר של עצמות הקבוצה של TVK, כמו גם יצירת תוכניות לשחזור מקרים חירום (DRPs).

ההתקנה המבוססת על Helm שנעשית בשלב 1 – התקנת TrilioVault עבור Kubernetes כיסתה כבר את הרכיבים הנדרשים ללוח הבקרה לניהול הרשתי.

kubectl get svc -n tvk

קבלת גישה לממשק הניהול ברשת של TVK

NAME                                                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
k8s-triliovault-admission-webhook                               ClusterIP   10.245.202.17    <none>        443/TCP                      13m
k8s-triliovault-ingress-nginx-controller                        NodePort    10.245.192.140   <none>        80:32448/TCP,443:32588/TCP   13m
k8s-triliovault-ingress-nginx-controller-admission              ClusterIP   10.3.20.89       <none>        443/TCP                      13m
k8s-triliovault-web                                             ClusterIP   10.245.214.13    <none>        80/TCP                       13m
k8s-triliovault-web-backend                                     ClusterIP   10.245.10.221    <none>        80/TCP                       13m
triliovault-operator-k8s-triliovault-operator-webhook-service   ClusterIP   10.245.186.59    <none>        443/TCP                      16m

כדי להיכנס לממשק ולחקור את התכונות שהוא מציע, עליך להפוך את שירות השליטת הכניסה של TVK לנגיש באופן פומבי.

בראשית, עליך לזהות את שירות ingress-nginx-controller מתוך המרחב של השם tvk:
installTVK:
  ingressConfig:
    host: "tvk-doks.com"

הפלט דומה לדוגמא שלמטה. חפש את השורה k8s-triliovault-ingress-nginx-controller, ושים לב שהוא מאזין לפתחה 80 בעמודת PORT(S).

127.0.0.1 tvk-doks.com

TVK משתמשת בבקר Ingress של Nginx כדי להפנות תעבורה אל שירותי ממשק הניהול ברשת. ההפנייה היא על פי המארח, ושם המארח הוא tvk-doks.com כפי שהוגדר בקובץ ערכי ה-Helm מקובץ ההתחלה:

kubectl port-forward svc/k8s-triliovault-ingress-nginx-controller 8080:80 -n tvk

# השם המארח שיש להשתמש בו בעת גישה לממשק האינגרס של TVK דרך הבקר nginx ingress

כשיש לך את המידע הנ"ל לידך, אנא הוסף את הערך הבא לקובץ /etc/hosts:
doctl k8s cluster list

באמצעות זאת, צור קיבוץ פורט עבור שירות בקר ה-Ingress של TVK:
doctl kubernetes cluster kubeconfig show <YOUR_CLUSTER_NAME_HERE> > config_<YOUR_CLUSTER_NAME_HERE>.yaml

לבסוף, ייצא את קובץ ה-kubeconfig עבור קבוצת ה-DOKS שלך. צעד זה נדרש כדי שממשק האינטרנט יוכל לאמת אותך.

DOKS_CLUSTER_NAME="$(doctl k8s cluster list --no-header --format Name)"
doctl kubernetes cluster kubeconfig show $DOKS_CLUSTER_NAME > config_${DOKS_CLUSTER_NAME}.yaml

# רשימת האשכולות הזמינים

# שמירת הגדרות האשכול ל־YAML

אם יש לך רק אשכול אחד, אז הפעל את הפקודה הבאה:

לאחר הביצוע של השלבים הללו, תוכל לגשת לממשק המשתמש בדפדפן האינטרנט שלך על ידי ניווט אל: http://tvk-doks.com:8080. כאשר יידרש לך לקובץ kubeconfig, בחר את הקובץ שיצרת בפקודה האחרונה מלמעלה.

נא שמור על קובץ ה־kubeconfig שנוצר מאובטח מאחר והוא מכיל מידע רגיש.

  • חקירת ממשק המשתמש בממשק ה־TVK Web Console
  • עיין בכל קטע מהשמאל, כמו:
  • ניהול אשכול: מציג את רשימת האשכולות הראשיים והאחרים שיש להם מופעי TVK, הוספה לאשכול הראשי של OVH באמצעות תכונת הניהול של מספר אשכולים.
  • גיבוי ושחזור: זוהי לוח מחוונים הראשי המציג לך סקירה כללית של כל האשכול, כגון אחזור שמות, אפליקציות, רשימת תוכניות גיבוי, מטרות, תפריטים, מדיניות, וכו '

ניטור: ישנם שני אפשרויות- ניטור TrilioVault ו- ניטור Velero אם למשתמש הוגדר Velero על האשכול שלו ב- OVH.

אסון טבע: מאפשר לך לנהל ולבצע פעולות שחזור מקרי אסון.

אסון טבע: מאפשר לך לנהל ולבצע פעולות שחזור מקרי אסון.

תוכל גם לראות את המטרה S3 שנוצרה מקודם, על ידי ניווט אל גיבוי ושחזור -> מטרות -> <שמות מרחב השמות> tvk מהתפריט הנפתח בחלק העליון.

להמשך, תוכל לעיין במטרה ולרשום את הגיבויים הזמינים על ידי לחיצה על הכפתור פעולות מצד ימין, ואז לבחור באפשרות הפעל דפדפן מתוך התפריט הקופץ. כדי שזה יעבוד, על המטרה להגדיר את הדגל enableBrowsing לערך true.

למידע נוסף ותכונות זמינות, יש לעיין בתיעוד הרשמי של ממשק מנהל הרשת הוובי של TVK.

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

שלב 4 – דוגמה לגיבוי ושחזור עם שם מרחב

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
  name: ambassador-helm-release-backup-plan
  namespace: ambassador
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
  backupPlanComponents:
    helmReleases:
      - ambassador

בשלב זה, תלמד כיצד ליצור גיבוי חד-פעמי עבור מרחב שלם (ambassador במקרה זה) מהאשכול שלך ב-DOKS ולשחזר אותו לאחר מכן, ולוודא שכל המשאבים יושחזרו. ל-TVK יש יכולת שמאפשרת לך לבצע גיבוים ברמה גבוהה יותר מאשר רק מרחבים.

  • יצירת גיבוי של משחרר הקסדת השגריר
  • כדי לבצע גיבוים עבור אפליקציה יחידה ברמת המרחב (או שחרור Helm), נדרש BackupPlan ואז Backup CRD. BackupPlan הוא הגדרה של 'מה', 'איפה', 'ל', ו־'כיצד' של תהליך הגיבוי, אך הוא אינו מבצע את הגיבוי הממשי. קריאת ה-Backup CRD אחראית להפעלת תהליך הגיבוי הממשי, כפי שמוגדר בפרטי ה־BackupPlan.
  • בתצורה זו,

A typical Backup CRD looks like below:

apiVersion: triliovault.trilio.io/v1
kind: Backup
metadata:
  name: ambassador-helm-release-full-backup
  namespace: ambassador
spec:
  type: Full
  backupPlan:
    name: ambassador-helm-release-backup-plan
    namespace: ambassador

spec.backupConfig.target.name: אומר ל-TVK איזה שם יעד להשתמש בו לאחסון הגיבויים.

  • spec.backupConfig.target.namespace: אומר ל-TVK באיזה מרחב היעד נוצר היעד.
  • spec.backupComponents: מגדיר רשימת משאבים לגיבוי.

בהגדרה זו,

spec.type: מציין את סוג הגיבוי.

spec.backupPlan: מציין את התוכנית לגיבוי שבה הגיבוי צריך להשתמש.

cd Kubernetes-Starter-Kit-Developers

שלבים להתחלת גיבוי חד פעמי של Ambassador Helm release:

code 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-backup-plan.yaml
code 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-backup.yaml

ראשית, ודא כי ה-Ambassador Edge Stack מופעל באשכול שלך על ידי ביצוע השלבים מהמדריך של Ambassador Ingress.

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-backup-plan.yaml
kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-backup.yaml

באמצע, שנה את התיקייה למיקום שבו התיקייה של Starter Kit Git נקלטה במחשב המקומי שלך:

kubectl get backupplan ambassador-helm-release-backup-plan -n ambassador

לאחר מכן, פתח ובדוק את קבצי המניפסט של Ambassador BackupPlan ו-Backup שסופקו בתיקיית Starter Kit באמצעות עורך שאתה מעדיף (למשל, עם תמיכה ב־YAML lint).

NAME                                  TARGET             ...   STATUS
ambassador-helm-release-backup-plan   trilio-s3-target   ...   Available

לבסוף, צור את המשאבים BackupPlan ו-Backup באמצעות kubectl.

kubectl get backup ambassador-helm-release-full-backup -n ambassador

כעת, בדוק את מצב BackupPlan (מכוון ל-Helm release של ambassador) באמצעות kubectl:

NAME                                  BACKUPPLAN                            BACKUP TYPE   STATUS       ...
ambassador-helm-release-full-backup   ambassador-helm-release-backup-plan   Full          InProgress   ...

הפלט דומה להבא. שים לב לערך בעמודה STATUS שצריך להיות מוגדר ל־Available.

לבסוף, בדוק את מצב אובייקט הגיבוי באמצעות kubectl:
NAME                                  BACKUPPLAN                            BACKUP TYPE   STATUS      ...   PERCENTAGE
ambassador-helm-release-full-backup   ambassador-helm-release-backup-plan   Full          Available   ...   100

הפלט דומה להבא. שים לב לערך בעמודה STATUS שצריך להיות מוגדר ל־InProgress, וגם ל־BACKUP TYPE שצריך להיות מוגדר ל־Full.

s3cmd ls s3://trilio-starter-kit --recursive

לאחר שכל רכיבי השחרור של השגריר Helm מסתיימים להעלאה אל מטרת S3, עליך לקבל את התוצאות הבאות:

2021-11-25 07:04           28  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/
2021-11-25 07:04           28  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/
2021-11-25 07:04          311  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backup-namespace.json.manifest.00000004
2021-11-25 07:04          302  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backup.json.manifest.00000004
2021-11-25 07:04          305  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backupplan.json.manifest.00000004
2021-11-25 07:04           28  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/
2021-11-25 07:04           28  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/metadata-snapshot/
2021-11-25 07:04          330  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/metadata-snapshot/metadata.json.manifest.00000002
...

# הפלט נראה דומה לזה (שים לב שהמצב משתנה ל־`Available`, וה־`PERCENTAGE` הוא `100`)

kubectl get pods -n ambassador | grep metamover

אם הפלט נראה כך, ייבחר השחזור של השגריר ambassador בהצלחה. תוכל להמשיך ולראות איך TrilioVault אוחסן את המטא נתוני Kubernetes על ידי רשימת תוכן הדלפק TrilioVault S3. לדוגמה, תוכל להשתמש ב־s3cmd:

ambassador-helm-release-full-backup-metamover-mg9gl0--1-2d6wx   1/1     Running   0          4m32s

הפלט דומה לדוגמה הבאה. שים לב שהרשימה מכילה את המנייפסטים בפורמט JSON ואת UIDs, המייצגים אובייקטים של Kubernetes.

kubectl logs pod/ambassador-helm-release-full-backup-metamover-mg9gl0--1-2d6wx -n ambassador -f

במקרה שהגיבוי נכשל להיות זמין, תוכל לבדוק את הלוגים מה־metamover פוד כדי למצוא את הבעיה:

...
{"component":"meta-mover","file":"pkg/metamover/snapshot/parser/commons.go:1366","func":"github.com/trilioData/k8s-triliovault/pkg/metamover/snapshot/parser.(*Component).ParseForDataComponents","level":"info","msg":"Parsing data components of resource rbac.authorization.k8s.io/v1, Kind=ClusterRoleBinding: [edge-stack]","time":"2022-06-14T06:20:56Z"}
{"component":"meta-mover","file":"pkg/metamover/snapshot/parser/commons.go:1366","func":"github.com/trilioData/k8s-triliovault/pkg/metamover/snapshot/parser.(*Component).ParseForDataComponents","level":"info","msg":"Parsing data components of resource rbac.authorization.k8s.io/v1, Kind=RoleBinding: [edge-stack-agent-config]","time":"2022-06-14T06:20:56Z"}
...

הפלט דומה ל:

עכשיו, קבל נתוני יומני הלוג:

הפלט דומה לדוגמה הבאה.

helm delete ambassador -n ambassador

לבסוף, תוכל לבדוק אם הגיבוי זמין בקונסולת האינטרנט גם על ידי ניווט אל Resource Management -> Ambassador -> Backup Plans. שים לב שהוא נמצא במצב Available ושהשחרור של השגריר Helm נשמר בתת־תצוגת ה־Component Details.

kubectl get all -n ambassador

מחיקת שחרור השגריר Helm והמשאבים

curl -Li http://quote.starter-kit.online/quote/
curl -Li http://echo.starter-kit.online/echo/

עכשיו, המשך והדמה חריגה על ידי מחיקה מכוונת של השחרור של Helm של ה- ambassador:

לְאַחַר מכן, בדוק שמשאבי הכנסה נמחקו (הרשימה צריכה להיות ריקה):

אם אתה משחזר את אותו שטח שמקורו, וודא שרכיבי היישום המקוריים נמחקו. במיוחד ה- PVC של היישום נמחק.

apiVersion: triliovault.trilio.io/v1
kind: Restore
metadata:
  name: ambassador-helm-release-restore
  namespace: ambassador
spec:
  source:
    type: Backup
    backup:
      name: ambassador-helm-release-full-backup
      namespace: ambassador
  skipIfAlreadyExists: true

אם אתה משחזר לקבוצה אחרת (תרחיש ההעברה), ודא ש-TrilioVault עבור Kubernetes פועלת בכנסת/הקבוצה המרוחקת גם. כדי לשחזר לקבוצה חדשה (שבה לא קיים אובייקט גיבוי CR), source.type חייב להיות מוגדר ל־location. אנא הפנה ל־מידע על שחזור הגדרת משאב מותאם אישית כדי לראות דוגמה ל־שחזור לפי מיקום.

  • כאשר אתה מוחק את כנסת ambassador, משאב מאזני העומס המשוייך לשירות השליח יימחק גם. לכן, כאשר אתה משחזר את השירות ambassador, ה־LB יופצע מחדש על ידי DigitalOcean. הבעיה היא שתקבל כתובת IP חדשה עבור ה־LB שלך, כך שתצטרך להתאים את רשומות ה־A כדי לקבל תעבורת אל הדומיינים שלך שמארחים על הקבוצה.
  • כדי לשחזר גיבוי ספציפי, עליך ליצור כותרת CRD. כותרת שחזור טיפולית נראית כמו בהמשך:
  • בהגדרה זו,

spec.source.type: מציין איזה סוג גיבוי לשחזר ממנו.

spec.source.backup: מכיל התייחסות לאובייקט הגיבוי לשחזר ממנו.

code 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-restore.yaml

spec.skipIfAlreadyExists: מציין האם לדלג על השחזור של משאב אם הוא כבר קיים בכנסת השוחזרת.

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-restore.yaml

משיב מאפשר לך לשחזר את הגיבוי האחרון של יישום. משמש כדי לשחזר מרחבי שמות או הוצאה לאור של Helm, המוגנים על ידי Backup CRD. ה-Backup CRD מזוהה לפי שמו ambassador-helm-release-full-backup.

kubectl get restore ambassador-helm-release-restore -n ambassador

ראשית, בדוק את דוגמת ה-CRD של Restore מתוך תיק התחלה של גיט:

NAME                              STATUS      DATA SIZE   START TIME             END TIME               PERCENTAGE COMPLETED   DURATION
ambassador-helm-release-restore   Completed   0           2021-11-25T15:06:52Z   2021-11-25T15:07:35Z   100                    43.524191306s

לאחר מכן, צור משאב Restore באמצעות kubectl:

לבסוף, בדוק את מצב אובייקט השחזור:

הפלט דומה להבא. שים לב לעמודת STATUS המוגדרת ל-Completed, כמו גם לעמודת PERCENTAGE COMPLETED המוגדרת ל-100.

kubectl get all -n ambassador

אם הפלט נראה כך, אז תהליך השחזור של הוצאת לאור של ambassador Helm הושלם בהצלחה.

NAME                                    READY   STATUS    RESTARTS   AGE
pod/ambassador-5bdc64f9f6-42wzr         1/1     Running   0          9m58s
pod/ambassador-5bdc64f9f6-nrkzd         1/1     Running   0          9m58s
pod/ambassador-agent-bcdd8ccc8-ktmcv    1/1     Running   0          9m58s
pod/ambassador-redis-64b7c668b9-69drs   1/1     Running   0          9m58s

NAME                       TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
service/ambassador         LoadBalancer   10.245.173.90    157.245.23.93   80:30304/TCP,443:30577/TCP   9m59s
service/ambassador-admin   ClusterIP      10.245.217.211   <none>          8877/TCP,8005/TCP            9m59s
service/ambassador-redis   ClusterIP      10.245.77.142    <none>          6379/TCP                     9m59s

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ambassador         2/2     2            2           9m59s
deployment.apps/ambassador-agent   1/1     1            1           9m59s
deployment.apps/ambassador-redis   1/1     1            1           9m59s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/ambassador-5bdc64f9f6         2         2         2       9m59s
replicaset.apps/ambassador-agent-bcdd8ccc8    1         1         1       9m59s
replicaset.apps/ambassador-redis-64b7c668b9   1         1         1       9m59s

אימות תקינות היישומים לאחר השחזור

kubectl get hosts -n ambassador

בדוק כי כל משאבי רכיבי מרחבי השמות נמצאים במקום ורצים:

NAME         HOSTNAME                   STATE   PHASE COMPLETED   PHASE PENDING   AGE
echo-host    echo.starter-kit.online    Ready                                     11m
quote-host   quote.starter-kit.online   Ready                                     11m

הפלט דומה ל:

kubectl get mappings -n ambassador

קבל את מארחי השגריר:

NAME                          SOURCE HOST                SOURCE PREFIX                               DEST SERVICE     STATE   REASON
ambassador-devportal                                     /documentation/                             127.0.0.1:8500
ambassador-devportal-api                                 /openapi/                                   127.0.0.1:8500
ambassador-devportal-assets                              /documentation/(assets|styles)/(.*)(.css)   127.0.0.1:8500
ambassador-devportal-demo                                /docs/                                      127.0.0.1:8500
echo-backend                  echo.starter-kit.online    /echo/                                      echo.backend
quote-backend                 quote.starter-kit.online   /quote/                                     quote.backend

הפלט דומה להבא. על העמודה STATE להיות Ready, כמו גם העמודה HOSTNAME לצבור את שם המארח המובלט במלואו.

קבל עמודות של השגריר:

curl -Li http://quote.starter-kit.online/quote/
curl -Li http://echo.starter-kit.online/echo/

הפלט דומה למה שלמטה. שים לב ל- echo-backend שממופה למארח echo.starter-kit.online ולקידומת המקור /echo/, כמו גם ל- quote-backend.

עכשיו, עליך לעדכן את רשומות ה- DNS שלך A, מכיוון שמשאב המאזין של DigitalOcean נוצר מחדש, ויש לו IP חיצוני חדש.

לבסוף, בדוק אם היישומים בצד השרת מגיבים גם לבקשות HTTP. נא הפנה אל יצירת שירותי צד השרת של Ambassador Edge Stack לגבי היישומים בצד השרת המשמשים בהדרכת Starter Kit.

השלב הבא עוסק בגיבוי ושחזור של כל האשכול.

שלב 5 – דוגמת גיבוי ושחזור של כל האשכול

A typical ClusterBackupPlan manifest targeting multiple namespaces looks like this:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: starter-kit-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
  backupComponents:
    - namespace: ambassador
    - namespace: backend
    - namespace: monitoring

בשלב זה, תדמה תרחיש של התאוששות מאסון. כל האשכול של DOKS יימחק ואז היישומים החשובים ישוחזרו מגיבוי קודם.

יצירת גיבוי לאשכול DOKS

cd Kubernetes-Starter-Kit-Developers

הרעיון העיקרי כאן הוא לבצע גיבוי של אשכול DOKS על ידי כלול את כל המרחבי שמות המרכזיים המכילים את היישומים וההגדרות החיוניים שלך.

code 05-setup-backup-restore/assets/manifests/triliovault/starter-kit-cluster-backup-plan.yaml
code 05-setup-backup-restore/assets/manifests/triliovault/starter-kit-cluster-backup.yaml

שים לב ש- kube-system (או מרחבי שמות אחרים הקשורים ל- DOKS) אינו כלול ברשימה. לרוב, אלה אינם נדרשים, אלא אם יש מקרה מיוחד הדורש הגדרות מסוימות להישמר ברמה זו.

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/starter-kit-cluster-backup-plan.yaml
kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/starter-kit-cluster-backup.yaml

ראשית, שנה את התיקייה שבה נקלון תיק ה-Git של Starter Kit על המחשב המקומי שלך:

kubectl get clusterbackupplan starter-kit-cluster-backup-plan -n tvk

לאחר מכן, פתח ובדוק את קבצי המפרט ClusterBackupPlan ו- ClusterBackup שסופקו במאגר Starter Kit באמצעות עורך שבחירתך (רצוי עם תמיכת YAML lint).

NAME                              TARGET             ...   STATUS
starter-kit-cluster-backup-plan   trilio-s3-target   ...   Available

לבסוף, צור את המשאבים ClusterBackupPlan ו- ClusterBackup באמצעות kubectl:

kubectl get clusterbackup starter-kit-cluster-backup -n tvk

כעת, בדוק את מצב המערך ClusterBackupPlan באמצעות kubectl:

NAME                        BACKUPPLAN                        BACKUP TYPE   STATUS      ...   PERCENTAGE COMPLETE
starter-kit-cluster-backup  starter-kit-cluster-backup-plan   Full          Available   ...   100

הפלט דומה לדוגמא שלמטה. שים לב לערך העמודה STATUS שצריך להיות מוגדר ל- Available.

הבדוק את מצב המערך ClusterBackup באמצעות kubectl:

הפלט דומה לדוגמא שלמטה. שים לב לערך העמודה STATUS שצריך להיות מוגדר ל- Available, כמו גם לערך PERCENTAGE COMPLETE שצריך להיות מוגדר ל- 100.

אם הפלט דומה לדוגמא לעיל, אז כל מרחבי השמות של היישומים החשובים שלך גובו בהצלחה.

ייתכן שיקח זמן עד שהגיבוי המלא של האשכול יסתיים, תלוי בכמה מרחבי שמות ומשאבים מקושרים כלולים בתהליך.

אתה יכול גם לפתוח את לוח המחוונים הראשי של עקבות האינטרנט ולבדוק את לוח המחוונים הרב-מרחבי (שים לב שכל המרחבים החשובים שנגבו מודגשים בצבע ירוק, במבנה של צלבי דבש):

doctl kubernetes cluster delete <DOKS_CLUSTER_NAME>

בניית האשף ושחזור יישומים

נקודה חשובה לשים לב אליה היא שכאשר אתה משמיד את אשף ה-DOKS ואז משחזר אותו, משמיד הערכת מאזן עומס חדש עם כתובת IP חיצונית חדשה גם כאשר TVK משחזר את הבקר שלך לקבלת כניסה. לכן, יש לוודא שתעדכן את רשומות ה-DNS שלך ב-DigitalOcean רשומות A בהתאם.

עכשיו, מחק את כל אשף ה-DOKS (ודא שתחליף את מילות המפתח <> בהתאם):

לאחר מכן, בנה מחדש את האשף כפי שתואר ב-הגדרת קוברנטיס של DigitalOcean.

כדי לבצע את פעולת השחזור, יש להתקין את יישום ה-TVK כפי שתואר ב-שלב 1 – מתקין TrilioVault עבור Kubernetes. חשוב להשתמש ב-אותו גרסת תרשים Helm.

כאשר ההתקנה מסתיימת בהצלחה, הגדר את היעד של TVK כפי שמתואר ב־שלב 2 – יצירת יעד TrilioVault לאחסון גיבויים והפנה אותו לאותו S3 bucket בו נמצאים נתוני הגיבוי שלך. ודא גם כי ניווט ביעד מופעל.

בשלב הבא, אמת והפעל רישיון חדש כפי שמתואר בסעיף רישיון אפליקציית TrilioVault.

כדי לקבל גישה לממשק משתמש של קונסולת האינטרנט, יש להתייעץ בסעיף קבלת גישה לממשק הניהול באינטרנט של TVK.

לאחר מכן, נווט אל ניהול משאבים -> מרחב שמות TVK -> יעדים (במידה ומדובר בערכת ההתחלה, המרחב שמות TVK הוא tvk):

להמשך, נווט ביעד ורשום את הגיבויים הזמינים על ידי לחיצה על הלחצן פעולות. לאחר מכן, בחר באפשרות הפעל דפדפן מתוך תפריט ההקפצה. על מנת שזה יעבוד, יש לוודא כי היעד מכיל את הקובץ הגלגולי enableBrowsing שמוגדר ל־true.

כעת, לחץ על הפריט starter-kit-cluster-backup-plan מתוך הרשימה, ואז לחץ והרחב על הפריט starter-kit-cluster-backup מתוך החלון הנכון:

kubectl get all --all-namespaces

כדי להתחיל בתהליך שחזור, לחץ על הלחצן שחזר.

בדיקת מצב יישומי האשף של אשף DOKS

curl -Li http://quote.starter-kit.online/quote/
curl -Li http://echo.starter-kit.online/echo/

ראשית, ודאו את כל משאבי Kubernetes של האשף.

לאחר מכן, ודאו שרשומות ה-DNS A שלכם עודכנו כך שיצביעו לכתובת ה-IP החיצונית החדשה של המאזן הטעינה שלכם.

לבסוף, היישומים האחוריים צריכים להגיב לבקשות HTTP גם כן. אנא הפנו ל-יצירת שירותי גב ה- Ambassador Edge Stack לגבי היישומים האחוריים שמשמשים במדריך התחלתי של הסטרטר.

בשלב הבא, תלמדו כיצד לבצע גיבויים מתוזמנים (או אוטומטיים) עבור יישומי האשף שלכם ב-DOKS.

kind: Policy
apiVersion: triliovault.trilio.io/v1
metadata:
  name: scheduled-backup-every-5min
  namespace: tvk
spec:
  type: Schedule
  scheduleConfig:
    schedule:
      - "*/5 * * * *" שלב 6 - גיבויים מתוזמנים

גיבויים אוטומטיים בהתבסס על לוח זמנים הוא תכונה מאוד שימושית. היא מאפשרת לך להשיב את המערכת למצב עבודה קודם אם משהו הולך לא נכון. סעיף זה מספק דוגמה של גיבוי אוטומטי על לוח זמנים של 5 דקות (נמלטה במרחב השמות kube-system).

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: kube-system-ns-backup-plan-5min-schedule
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    schedulePolicy:
      fullBackupPolicy:
        name: scheduled-backup-every-5min
        namespace: tvk
  backupComponents:
    - namespace: kube-system
    - namespace: backend

ראשית, עליך ליצור CRD של Policy מסוג Schedule שמגדיר את לוח הזמנים לגביית גיבוי בפורמט cron (זהה ל-cron של Linux). מדיניות לוח הזמנים יכולה לשמש עבור CRDs של BackupPlan או ClusterBackupPlan. דגם סטנדרטי של מדיניות של לוח זמנים נראה כך (מגדיר לוח זמנים של 5 דקות):

# מפעיל כל 5 דקות

לאחר מכן, תוכל להחיל את מדיניית הזמנים על CRD של ClusterBackupPlan לדוגמה, כמו שמוצג למטה:

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/scheduled-backup-every-5min.yaml

ניתן לשים לב שזו CRD יסודית של ClusterBackupPlan, המתייחסת ל-CRD של Policy שהוגדרה בעבר דרך שדה spec.backupConfig.schedulePolicy. ניתן ליצור מדיניות נפרדת עבור גיבויים מלאים או חלקיים, לכן ניתן לציין את fullBackupPolicy או incrementalBackupPolicy ב-spec.

kubectl get policies -n tvk

כעת, אנא צור את מדיניית הזמנים Policy באמצעות הרכיב הדוגמא המסופק על ידי המדריך לסטארטר קיט.

NAME                          POLICY     DEFAULT
scheduled-backup-every-5min   Schedule   false

שנה את התיקייה לתיקיית המאגר של Git של סטארטר קיט שהורד במחשב המקומי שלך.


בדוק שמשאב המדיניות נוצר:

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/kube-system-ns-backup-plan-scheduled.yaml


הפלט דומה להבא. שים לב לסוג ה-POLICY שמוגדר כ-Schedule.

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/kube-system-ns-backup-scheduled.yaml

לבסוף, צור את המשאבים עבור גיבויים מתוכננים בכלי ה-kube-system:

kubectl get clusterbackupplan kube-system-ns-backup-plan-5min-schedule -n tvk

# צור קודם תוכנית גיבוי עבור המרחב של kube-system

NAME                                       TARGET             ...   FULL BACKUP POLICY            STATUS
kube-system-ns-backup-plan-5min-schedule   trilio-s3-target   ...   scheduled-backup-every-5min   Available

# צור והפעל את הגיבוי המתוכנן עבור המרחב של kube-system

kubectl get clusterbackup kube-system-ns-full-backup-scheduled -n tvk

בדוק את מצב תוכנית הגיבוי המתוזמנת עבור kube-system:

NAME                                   BACKUPPLAN                                 BACKUP TYPE   STATUS      ...
kube-system-ns-full-backup-scheduled   kube-system-ns-backup-plan-5min-schedule   Full          Available   ...

הפלט נראה דומה לכך שמוצג למטה. שים לב לערך FULL BACKUP POLICY שהוגדר למשאב מדיניות הגיבוי שנוצרה מראש בשם scheduled-backup-every-5min, וגם לערך STATUS שצריך להיות Available.

בדוק את מצב גיבוי המתוזמן עבור kube-system:

הפלט נראה דומה לכך שמוצג למטה. שים לב לערך BACKUPPLAN שהוגדר למשאב תוכנית הגיבוי שנוצרה מראש, וגם לערך STATUS שצריך להיות Available.

כעת, תוכל לוודא כי הגיבויים מבוצעים בתדירות קבועה (כל 5 דקות), על ידי שאילתת משאב גיבוי האשכול ובדיקה של עמודת START TIME (kubectl get clusterbackup -n tvk). זה צריך לשקף את ההפרש של 5 דקות, כפי שמודגש בתמונה למטה:

בשלב הבא, תלמד כיצד להגדיר מדיניות שמירת גיבויים.

שלב 7 – מדיניות שמירת גיבויים

apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
  name: sample-policy
spec:
  type: Retention
  retentionConfig:
    latest: 2
    weekly: 1
    dayOfWeek: Wednesday
    monthly: 1
    dateOfMonth: 15
    monthOfYear: March
    yearly: 1

המדיניות שמירה מאפשרת לך להגדיר את מספר הגיבויים לשמירה ואת התדירות למחיקת הגיבויים על פי דרישות ההתאמה לתקנות. מרכז הקריאה למדיניות שמירה מספק פרטי YAML פשוטים להגדרת מספר הגיבויים לשמירה בימים, שבועות, חודשים, שנים, הגדרות אחרונות וכו'.

  • שימוש במדיניות שמירה
  • מדיניות שמירה ניתן להשתמש בה עבור CRDs BackupPlan או ClusterBackupPlan. תבנית מפורטת של Policy עבור סוג השמירה נראית כך:
  • המדיניות שמירה לעיל מתרגמת ל:
  • כל שבוע, שמור גיבוי אחד בכל יום רביעי.

כל חודש, שמור גיבוי אחד ביום ה-15.

A typical ClusterBackupPlan example configuration that has a retention set looks like:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: kube-system-ns-backup-plan-5min-schedule
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    retentionPolicy:
      fullBackupPolicy:
        name: ambassador-backups-retention-policy
        namespace: tvk
  backupComponents:
    - namespace: kube-system
    - namespace: backend

כל שנה, שמור גיבוי אחד בכל מרץ.

בסה"כ, יש להיות 2 הגיבויים האחרונים זמינים.

הזרם הבסיסי ליצירת משאבי מדיניות שמירה הולך באותו אופן כמו לגיבויים מתוכנתים. נדרש BackupPlan או ClusterBackupPlan CRD מוגדר כדי להתייחס למדיניות השמירה, ולאחר מכן להיות לו אובייקט Backup או ClusterBackup כדי להפעיל את התהליך.

apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
  name: garbage-collect-policy
spec:
  type: Cleanup
  cleanupConfig:
    backupDays: 5

שימו לב שהיא משתמשת בשדה retentionPolicy כדי להתייחס למדיניות הרלוונטית. ברור שניתן להגדיר תוכנית גיבוי שמכילה שני סוגי מדיניות, כך שתוכל לבצע גיבויים מתוכנתים, כמו גם להתמודד עם אסטרטגיות שמירה.

שימוש במדיניות ניקוי

אתה צריך דרך לאיסוף אשפה של כל האובייקטים הלא נמצאים בשימוש יותר. לכן, עליך להכניס את ה-Cleanup Policy CRD:

המדיניות לניקוי לעיל חייבת להיות מוגדרת במרחב השם של ההתקנה של TVK. לאחר מכן, נוצר באופן אוטומטי עבורך עבודת כרון שרץ כל 30 דקות ומוחק גיבויים שכשלו על סמך הערך שצויין עבור backupdays בתוך שדה ה-spec.

מסקנה

  • במדריך זה, למדת כיצד לבצע גיבויים חד-פעמיים ומתוזמנים, ולשחזר הכול.
  • כל המשימות והפעולות הבסיסיות המוסברות במדריך זה, מתכוונות לתת לך הקדמה בסיסית והבנה של מה ש-TrilioVault עבור Kubernetes מסוגלת לעשות.
  • מידע נוסף

גיבוי ושחזור נתוני DOKS באמצעות Velero

Source:
https://www.digitalocean.com/community/developer-center/how-to-perform-backup-and-restore-using-triliovault-in-doks