كيفية نسخ احتياطي واستعادة بيانات على DOKS باستخدام Velero

المقدمة

مثل أي بيئة أخرى، يمكن أن تكون البيانات في مجموعة Kubernetes في خطر من الضياع. لتجنب المشاكل الخطيرة، من الضروري أن يكون لديك خطة لاسترداد البيانات في متناول اليد. طريقة بسيطة وفعالة للقيام بذلك هي عن طريق إجراء نسخ احتياطية، لضمان سلامة بياناتك في حالة حدوث أي أحداث غير متوقعة. يمكن تشغيل النسخ الاحتياطية مرة واحدة أو بشكل مجدول. من الجيد أن يكون لديك نسخ احتياطية مجدولة لضمان أن لديك نسخة احتياطية حديثة يمكنك الانتقال إليها بسهولة.

Velero – أداة مفتوحة المصدر مصممة لمساعدة عمليات النسخ الاحتياطي واستعادة البيانات لمجموعات Kubernetes. إنها مثالية لحالات الاسترداد من الكوارث، فضلاً عن إنشاء لقطة لحالة تطبيقك قبل تنفيذ عمليات النظام على مجموعتك، مثل الترقيات. لمزيد من التفاصيل حول هذا الموضوع، يرجى زيارة الصفحة الرسمية كيف يعمل Velero.

في هذا البرنامج التعليمي، ستتعلم كيفية نشر Velero إلى مجموعة Kubernetes الخاصة بك، وإنشاء نسخ احتياطية، والاسترداد من نسخة احتياطية إذا حدث خطأ ما. يمكنك أن تقوم بعمل نسخ احتياطية لمجموعة كاملة أو اختيار مساحة أسماء أو محدد تسمية اختياري لعمل نسخ احتياطية لمجموعتك.

جدول المحتويات

المتطلبات المسبقة

لإكمال هذا البرنامج التعليمي، تحتاج إلى ما يلي:

  • A DO Spaces Bucket and access keys. Save the access and secret keys in a safe place for later use.
  • A DigitalOcean API token for Velero to use.
  • A Git client, to clone the Starter Kit repository.
  • Helm لإدارة إصدارات Velero وترقياتها.
  • Doctl لتفاعل واجهة برمجة التطبيقات الخاصة بـ DigitalOcean.
  • Kubectl لتفاعل Kubernetes.
  • عميل Velero لإدارة نسخ Velero.

الخطوة 1 – تثبيت Velero باستخدام Helm

في هذه الخطوة، ستقوم بنشر Velero وجميع المكونات المطلوبة، بحيث يكون قادرًا على إجراء نسخ احتياطية لموارد عنقود Kubernetes الخاصة بك (بما في ذلك الأنواع المستديمة). سيتم تخزين بيانات النسخ الاحتياطي في دلو DO Spaces الذي تم إنشاؤه في القسم المتطلبات الأولية.

أولاً، قم بنسخ مستودع Git لمجموعة البداية وتغيير الدليل إلى نسختك المحلية:

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

cd Kubernetes-Starter-Kit-Developers

بعد ذلك، أضف مستودع Helm واستعرض الرسم البياني المتاح:

helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts

helm repo update vmware-tanzu

helm search repo vmware-tanzu

الناتج يبدو مشابهًا للتالي:

NAME                    CHART VERSION   APP VERSION     DESCRIPTION
vmware-tanzu/velero     2.29.7          1.8.1           A Helm chart for velero

الرسم البياني المهم هو vmware-tanzu/velero، الذي سيقوم بتثبيت Velero على العنقود. يُرجى زيارة صفحة velero-chart لمزيد من التفاصيل حول هذا الرسم البياني.

ثم، قم بفتح وتفتيش ملف قيم Helm الخاص بـ Velero المقدم في مستودع Starter Kit باستخدام محرر اختيارك (مع دعم لفحص YAML إذا أمكن).

VELERO_CHART_VERSION="2.29.7"

code 05-setup-backup-restore/assets/manifests/velero-values-v${VELERO_CHART_VERSION}.yaml

بعد ذلك، يرجى استبدال العلامات <> وفقًا لدلو DO Spaces الخاص بك لـ Velero (مثل الاسم والمنطقة والسريان). تأكد من توفير رمز API الخاص بـ DigitalOcean أيضًا (مفتاح DIGITALOCEAN_TOKEN).

وأخيرًا، قم بتثبيت Velero باستخدام helm:

VELERO_CHART_VERSION="2.29.7"

helm install velero vmware-tanzu/velero --version "${VELERO_CHART_VERSION}" \
  --namespace velero \
  --create-namespace \
  -f 05-setup-backup-restore/assets/manifests/velero-values-v${VELERO_CHART_VERSION}.yaml

A specific version of the Velero Helm chart is used. In this case 2.29.7 is picked, which maps to the 1.8.1 version of the application (see the output from Step 2.). It’s a good practice in general to lock on a specific version. This helps to have predictable results and allows versioning control via Git.

–create-namespace \

helm ls -n velero

الآن، تحقق من نشر Velero الخاص بك عن طريق تشغيل:

NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
velero  velero          1               2022-06-09 08:38:24.868664 +0300 EEST   deployed        velero-2.29.7   1.8.1

الناتج يبدو مشابهًا للتالي (يجب أن يعرض العمود STATUS قيمة deployed):

kubectl get deployment velero -n velero

بعد ذلك، تحقق من أن Velero قيد التشغيل ويعمل:

NAME     READY   UP-TO-DATE   AVAILABLE   AGE
velero   1/1     1            1           67s

الناتج يبدو مشابهًا لما يلي (يجب أن تكون البودات الخاصة بالنشر في حالة جاهزة):

kubectl -n velero get all

إذا كنت مهتمًا بالمزيد، يمكنك عرض مكونات خادم Velero من الجانب الخادم:

  • استكشف صفحات مساعدة سطر الأوامر لـ Velero لمعرفة الأوامر والأوامر الفرعية المتاحة. يمكنك الحصول على المساعدة لكل منها باستخدام العلامة --help:
  • قائمة جميع الأوامر المتاحة لـ Velero:

اطلع على خيارات أمر النسخ الاحتياطي لـ Velero:

يستخدم Velero عدة CRDs (تعريفات الموارد المخصصة) لتمثيل موارده مثل النسخ الاحتياطية، وجداول النسخ الاحتياطي، إلخ. ستكتشف كل واحد في الخطوات التالية من البرنامج التعليمي، جنبًا إلى جنب مع بعض الأمثلة الأساسية.

الخطوة 2 – مثال على النسخ الاحتياطي واستعادة النطاق

في هذه الخطوة، ستتعلم كيفية إجراء نسخ احتياطي مرة واحدة لمساحة الأسماء بأكملها من عنقود DOKS الخاص بك واستعادتها بعد ذلك مع التأكد من إعادة إنشاء جميع الموارد. المساحة الأسماء المعنية هي ambassador.

إنشاء نسخة احتياطية لمساحة الأسماء Ambassador

velero backup create ambassador-backup --include-namespaces ambassador

أولاً، قم ببدء النسخ الاحتياطي:

velero backup get

ثم، تحقق من أن النسخ الاحتياطي قد تم إنشاؤه:

NAME                                       STATUS      ERRORS   WARNINGS   CREATED                          EXPIRES   STORAGE LOCATION   SELECTOR
ambassador-backup                          Completed   0        0          2021-08-25 19:33:03 +0300 EEST   29d       default            <none>

تبدو النتيجة مشابهة لما يلي:

velero backup describe ambassador-backup --details

ثم، بعد بضع لحظات، يمكنك تفقد ذلك:

Name:         ambassador-backup
Namespace:    velero
Labels:       velero.io/storage-location=default
Annotations:  velero.io/source-cluster-k8s-gitversion=v1.21.2
              velero.io/source-cluster-k8s-major-version=1
              velero.io/source-cluster-k8s-minor-version=21

Phase:  Completed

Errors:    0
Warnings:  0

Namespaces:
  Included:  ambassador
  Excluded:  <none>
  ...
  • تبدو النتيجة مشابهة لما يلي:
  • ابحث عن السطر Phase. يجب أن يقول Completed.
  • تحقق من عدم تقديم أي أخطاء أيضًا.

تم إنشاء كائن نسخ احتياطي Kubernetes جديد:

~ kubectl get backup/ambassador-backup -n velero -o yaml

apiVersion: velero.io/v1
kind: Backup
metadata:
annotations:
velero.io/source-cluster-k8s-gitversion: v1.21.2
velero.io/source-cluster-k8s-major-version: "1"
velero.io/source-cluster-k8s-minor-version: "21"
...

وأخيرًا، تحقق من دلو DO Spaces وتحقق مما إذا كان هناك مجلد جديد يحمل اسم backups والذي يحتوي على الأصول التي تم إنشاؤها لنسخة الاحتياطية الخاصة بك ambassador-backup:

حذف مساحة السفير والموارد

kubectl delete namespace ambassador

أولاً، قم بمحاكاة كارثة عن طريق حذف مساحة السفير بشكل متعمد:

kubectl get namespaces

ثم، تحقق من حذف المساحة (قائمة المساحات لا يجب أن تطبع ambassador):

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

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

وأخيراً، تحقق من أن نقطة نهاية خدمات الخلفية echo و quote متوقفة. يُرجى الرجوع إلى إنشاء خدمات الخلفية لمكدس حواف السفير بخصوص التطبيقات الخلفية المستخدمة في دليل البداية. يمكنك استخدام curl للاختبار (أو يمكنك استخدام متصفح الويب الخاص بك):

استعادة نسخة احتياطية لمساحة السفير

velero restore create --from-backup ambassador-backup

استعد النسخة الاحتياطية لـ ambassador-backup:

مهم: عند حذف ambassador الفضاء الاسمي ، سيتم حذف مورد موازن الحمل المرتبط بخدمة السفير أيضًا. لذا ، عند استعادة خدمة ambassador ، سيتم إعادة إنشاء موازن الحمل بواسطة DigitalOcean. المشكلة هنا هي أنك ستحصل على عنوان IP جديد لموازن الحمل الخاص بك ، لذا ستحتاج إلى ضبط A records للحصول على حركة المرور إلى النطاقات الخاصة بك المستضافة على العقدة.

التحقق من استعادة فضاء الأسماء الخاص بالسفير

velero restore describe ambassador-backup

للتحقق من استعادة الفضاء الأسمي لـ ambassador ، تحقق من خط الـ Phase من مخرجات أمر استعادة ambassador-backup. يجب أن يقول Completed (أيضًا ، يرجى ملاحظة قسم التحذيرات – يُخبر إذا حدث خطأ ما):

kubectl get all --namespace ambassador

بعد ذلك ، تحقق من أن جميع الموارد تم استعادتها لـ الفضاء الأسمي ambassador. ابحث عن بودات ambassador ، services ، و deployments.

NAME                                    READY   STATUS    RESTARTS   AGE
pod/ambassador-5bdc64f9f6-9qnz6         1/1     Running   0          18h
pod/ambassador-5bdc64f9f6-twgxb         1/1     Running   0          18h
pod/ambassador-agent-bcdd8ccc8-8pcwg    1/1     Running   0          18h
pod/ambassador-redis-64b7c668b9-jzxb5   1/1     Running   0          18h

NAME                       TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                      AGE
service/ambassador         LoadBalancer   10.245.74.214    159.89.215.200   80:32091/TCP,443:31423/TCP   18h
service/ambassador-admin   ClusterIP      10.245.204.189   <none>           8877/TCP,8005/TCP            18h
service/ambassador-redis   ClusterIP      10.245.180.25    <none>           6379/TCP                     18h

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

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

تبدو المخرجات مشابهة لـ:

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

تبدو المخرجات مشابهة لـ:

STATE يجب أن يكون Ready ويجب أن تشير العمود HOSTNAME إلى اسم المضيف الكامل المؤهل.

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

المخرج يبدو مشابهًا لـ (لاحظ echo-backend الذي يتم ربطه بالمضيف echo.starter-kit.online وبادئ المصدر /echo/، نفس الأمر بالنسبة لـ quote-backend):

curl -Li https://quote.starter-kit.online/quote/

curl -Li https://echo.starter-kit.online/echo/

وأخيرًا، بعد إعادة تكوين موازن الحمل وإعدادات نطاقك في DigitalOcean، يرجى التحقق من أن نقطة نهاية خدمات الخلفية echo و quote هي UP. راجع إنشاء خدمات الخلفية لـ Ambassador Edge Stack.

في الخطوة التالية، ستقوم بمحاكاة كارثة عن طريق حذف عمدًا عقدة DOKS الخاصة بك.

الخطوة 3 – مثال على النسخ الاحتياطي والاستعادة للعقدة بأكملها

في هذه الخطوة، ستقوم بمحاكاة سيناريو لاستعادة الكوارث. سيتم حذف عقدة DOKS بأكملها ثم استعادتها من نسخة احتياطية سابقة.

إنشاء نسخة احتياطية لعقدة DOKS

velero backup create all-cluster-backup

أولاً، قم بإنشاء نسخة احتياطية لعقدة DOKS بأكملها:

velero backup get

ثم، تحقق من أن النسخ الاحتياطي قد تم إنشاؤه وأنه لا يوجد تقارير عن أي أخطاء. يقوم الأمر التالي بسرد جميع النسخ الاحتياطية المتاحة:

NAME                                       STATUS      ERRORS   WARNINGS   CREATED                          EXPIRES   STORAGE LOCATION   SELECTOR
all-cluster-backup                         Completed   0        0          2021-08-25 19:43:03 +0300 EEST   29d       default            <none>

يبدو الإخراج مماثلًا للتالي:

velero backup describe all-cluster-backup

velero backup logs all-cluster-backup

أخيرًا، قم بفحص حالة النسخ الاحتياطي والسجلات (تحقق من عدم تقارير وجود أخطاء):

مهم: كلما قمت بتدمير مجموعة DOKS دون تحديد علامة --dangerous لأمر doctl ثم استعادتها، يتم إعادة إنشاء نفس موزع الأحمال بنفس عنوان IP. هذا يعني أنه لا داعي لتحديث سجلات DNS A الخاصة بـ DigitalOcean الخاصة بك.
ولكن عند تطبيق العلامة --dangerous على أمر doctl، سيتم تدمير موزع الأحمال الحالي وسيتم إنشاء موزع أحمال جديد بعنوان IP خارجي جديد عندما يقوم Velero بإعادة تشغيل متحكم الوصول الخاص بك. لذا، يرجى التأكد من تحديث سجلات DNS A الخاصة بـ DigitalOcean الخاصة بك وفقًا لذلك.

أولاً، احذف مجموعة DOKS بأكملها (تأكد من استبدال عناصر <> وفقًا لذلك).

doctl kubernetes cluster delete <DOKS_CLUSTER_NAME>

لحذف مجموعة Kubernetes دون تدمير موزع الأحمال المرتبط، قم بتشغيل:

doctl kubernetes cluster delete <DOKS_CLUSTER_NAME> --dangerous

أو لحذف مجموعة Kubernetes مع موزع الأحمال المرتبط:

ثم، أعد إنشاء العنقود، كما هو موضح في إعداد كلاس DigitalOcean Kubernetes. من المهم التأكد من أن عدد العقد الجديدة لعقد DOKS متساوٍ أو أكبر من العدد الأصلي.

ثم، قم بتثبيت سطر الأوامر والخادم الأساسي Velero، كما هو موضح في قسم المتطلبات الأولية و الخطوة 1 – تثبيت Velero باستخدام Helm على التوالي. من المهم استخدام نفس إصدار Helm Chart.

velero restore create --from-backup all-cluster-backup

أخيرًا، استعد كل شيء عن طريق تشغيل الأمر التالي:

التحقق من حالة تطبيقات عقدة DOKS

velero restore describe all-cluster-backup-<timestamp>

أولاً، تحقق من السطر Phase في إخراج الأمر all-cluster-backup restore describe. (استبدل العلامات <> وفقًا لذلك). يجب أن يقول Completed.

kubectl get all --all-namespaces

الآن، قم بالتحقق من جميع موارد العقدة عن طريق تشغيل:

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

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

الآن، يجب أن تستجيب التطبيقات الخلفية لطلبات HTTP أيضًا. يرجى الرجوع إلى إنشاء خدمات الخلفية لمكدس Ambassador Edge بخصوص التطبيقات الخلفية المستخدمة في درس Starter Kit.

الخطوة التالية، ستتعلم كيفية أداء النسخ الاحتياطية المجدولة (أو التلقائية) لتطبيقات عُقدة خدمة كبيرة النطاق.

الخطوة 4 – النسخ الاحتياطي المجدول

أخذ النسخ الاحتياطية تلقائيًا بناءً على جدول زمني هو ميزة مفيدة حقًا. يتيح لك إرجاع النظام إلى حالة عمل سابقة إذا حدث خطأ ما.

إن إنشاء نسخة احتياطية مجدولة عملية مباشرة جدًا. يتم توفير مثال أدناه لفترة زمنية بواقع 1 دقيقة (تم اختيار مساحة الأسماء kube-system).

velero schedule create kube-system-minute-backup --schedule="@every 1m" --include-namespaces kube-system

أولاً، قم بإنشاء الجدول الزمني:

schedule="*/1 * * * *"

يتم دعم تنسيق مهمة cronjob في Linux أيضًا:

velero schedule get

ثم، تحقق من أن الجدول الزمني قد تم إنشاؤه:

NAME                        STATUS    CREATED                          SCHEDULE    BACKUP TTL   LAST BACKUP   SELECTOR
kube-system-minute-backup   Enabled   2021-08-26 12:37:44 +0300 EEST   @every 1m   720h0m0s     32s ago       <none>

تبدو النتيجة مماثلة ل:

velero backup get

ثم، تفقد جميع النسخ الاحتياطية بعد دقيقة تقريبًا:

NAME                                       STATUS      ERRORS   WARNINGS   CREATED                          EXPIRES   STORAGE LOCATION   SELECTOR
kube-system-minute-backup-20210826093916   Completed   0        0          2021-08-26 12:39:20 +0300 EEST   29d       default            <none>
kube-system-minute-backup-20210826093744   Completed   0        0          2021-08-26 12:37:44 +0300 EEST   29d       default            <none>

تبدو النتيجة مماثلة ل:

التحقق من حالة النسخ الاحتياطي المجدول

velero backup describe kube-system-minute-backup-<timestamp>

أولاً، تحقق من السطر Phase من إحدى النسخ الاحتياطية (يرجى استبدال المكان <> بما يلزم). يجب أن يقول Completed.

استعادة النسخ الاحتياطية المجدولة

لاستعادة النسخ الاحتياطية من دقيقة مضت، يُرجى اتباع نفس الخطوات التي تعلمتها في الخطوات السابقة من هذا البرنامج التعليمي. هذه طريقة جيدة لممارسة واختبار الخبرة التي اكتسبتها حتى الآن.

في الخطوة التالية، ستتعلم كيفية حذف النسخ الاحتياطية المحددة يدويًا أو تلقائيًا التي أنشأتها على مر الوقت.

الخطوة 5 – حذف النسخ الاحتياطية

إذا كنت لا تحتاج إلى النسخ الاحتياطية القديمة، يمكنك تحرير بعض الموارد على كل من عقدة Kubernetes ودلو Velero DO Spaces.

حذف نسخة احتياطية يدويًا

velero backup delete kube-system-minute-backup-<timestamp>

أولاً، اختر نسخة احتياطية لمدة دقيقة واحدة على سبيل المثال، وقم بإصدار الأمر التالي (يرجى استبدال العلامات التكميلية <> وفقًا لذلك):

الآن، تحقق من أنه قد تمت إزالته من إخراج أمر velero backup get. يجب حذفه أيضًا من دلو DO Spaces.

المقبل، ستقوم بحذف عدة نسخ احتياطية دفعة واحدة باستخدام selector. يوفر الأمر الفرعي velero backup delete علمًا يُسمى --selector. يتيح لك حذف عدة نسخ احتياطية دفعة واحدة بناءً على تسميات Kubernetes. تنطبق نفس القواعد كما هو الحال بالنسبة لـ محددات تسميات Kubernetes.

velero backup get

أولاً، قم بسرد النسخ الاحتياطية المتاحة:

NAME                                       STATUS      ERRORS   WARNINGS   CREATED                          EXPIRES   STORAGE LOCATION   SELECTOR
ambassador-backup                          Completed   0        0          2021-08-25 19:33:03 +0300 EEST   23d       default            <none>
backend-minute-backup-20210826094116       Completed   0        0          2021-08-26 12:41:16 +0300 EEST   24d       default            <none>
backend-minute-backup-20210826094016       Completed   0        0          2021-08-26 12:40:16 +0300 EEST   24d       default            <none>
backend-minute-backup-20210826093916       Completed   0        0          2021-08-26 12:39:16 +0300 EEST   24d       default            <none>
backend-minute-backup-20210826093816       Completed   0        0          2021-08-26 12:38:16 +0300 EEST   24d       default            <none>
backend-minute-backup-20210826093716       Completed   0        0          2021-08-26 12:37:16 +0300 EEST   24d       default            <none>
backend-minute-backup-20210826093616       Completed   0        0          2021-08-26 12:36:16 +0300 EEST   24d       default            <none>
backend-minute-backup-20210826093509       Completed   0        0          2021-08-26 12:35:09 +0300 EEST   24d       default            <none>

يبدو الإخراج مشابهًا لـ:

velero describe backup backend-minute-backup-20210826094116

بعد ذلك، قل أنك تريد حذف جميع ملفات النسخ الاحتياطية backend-minute-backup-*. اختر نسخة من القائمة، وافحص العلامات Labels:

Name:         backend-minute-backup-20210826094116
Namespace:    velero
Labels:       velero.io/schedule-name=backend-minute-backup
              velero.io/storage-location=default
Annotations:  velero.io/source-cluster-k8s-gitversion=v1.21.2
              velero.io/source-cluster-k8s-major-version=1
              velero.io/source-cluster-k8s-minor-version=21

Phase:  Completed

Errors:    0
Warnings:  0

Namespaces:
Included:  backend
Excluded:  <none>
...

يبدو الإخراج مشابهًا لـ (لاحظ قيمة العلامة velero.io/schedule-name):

velero backup delete --selector velero.io/schedule-name=backend-minute-backup

بعد ذلك، يمكنك حذف جميع النسخ الاحتياطية التي تتطابق مع قيمة backend-minute-backup لعلامة velero.io/schedule-name:

أخيرًا، تحقق من أن جميع ملفات النسخ الاحتياطية backend-minute-backup-* قد اختفت من إخراج أمر velero backup get بالإضافة إلى دلو DO Spaces.

حذف النسخ الاحتياطية التلقائي عبر TTL

  • عند إنشاء نسخة احتياطية، يمكنك تحديد TTL (الوقت للعيش)، باستخدام العلم --ttl. إذا رأى Velero أن مورد النسخة الاحتياطية الموجودة قد انتهت صلاحيته، فإنه يقوم بإزالة:
  • مورد النسخ الاحتياطية
  • ملف النسخ الاحتياطية من مخزن الكائنات السحابي التخزين
  • جميع اللقطات PersistentVolume

جميع الاستعادات المرتبطة

تسمح العلم TTL للمستخدم بتحديد فترة الاحتفاظ بالنسخ الاحتياطية بالقيمة المحددة بالساعات والدقائق والثواني في الشكل --ttl 24h0m0s. إذا لم يتم تحديده، سيتم تطبيق قيمة TTL الافتراضية 30 يومًا.

velero backup create ambassador-backup-3min-ttl --ttl 0h3m0s --include-namespaces ambassador

أولاً، أنشئ نسخة احتياطية لـ ambassador، باستخدام قيمة TTL قدرها 3 دقائق:

velero backup describe ambassador-backup-3min-ttl

ثم، قم بتفحص نسخة الاحتياطية لـ ambassador:

Name:         ambassador-backup-3min-ttl
Namespace:    velero
Labels:       velero.io/storage-location=default
Annotations:  velero.io/source-cluster-k8s-gitversion=v1.21.2
              velero.io/source-cluster-k8s-major-version=1
              velero.io/source-cluster-k8s-minor-version=21

Phase:  Completed

Errors:    0
Warnings:  0

Namespaces:
Included:  ambassador
Excluded:  <none>

Resources:
Included:        *
Excluded:        <none>
Cluster-scoped:  auto

Label selector:  <none>

Storage Location:  default

Velero-Native Snapshot PVs:  auto

TTL:  3m0s
...

A new folder should be created in the DO Spaces Velero bucket as well, named ambassador-backup-3min-ttl.

يبدو الإخراج مشابهًا لهذا (لاحظ قسم المساحات الاسمية -> المضمنة – يجب أن يعرض ambassador، والحقل TTL محدد على 3ms0):

وأخيرًا، بعد ثلاث دقائق تقريبًا، يجب حذف النسخة الاحتياطية والموارد المرتبطة تلقائيًا. يمكنك التحقق من أن كائن النسخ الاحتياطية تم تدميره باستخدام: velero backup describe ambassador-backup-3min-ttl. يجب أن يفشل مع خطأ يشير إلى أن النسخة الاحتياطية لم تعد موجودة. سيتم حذف المجلد المقابل ambassador-backup-3min-ttl من دلو DO Spaces Velero أيضًا.

velero backup delete --help

ومن ثم، يمكنك استكشاف جميع الخيارات المتاحة لحذف النسخ الاحتياطية من Velero، عبر:

الختام

في هذا البرنامج التعليمي، تعلمت كيفية إجراء النسخ الاحتياطي لمرة واحدة، وكذلك الجدولة، واستعادة كل شيء. يعتبر وجود النسخ الاحتياطية المجدولة مهمًا للغاية حيث يتيح لك الرجوع إلى لقطة زمنية سابقة إذا حدث خطأ في الطريق. لقد تعرفت أيضًا على سيناريو استعادة الكوارث.

استعادة الأحجام من لقطات في مجموعات Kubernetes

Source:
https://www.digitalocean.com/community/developer-center/how-to-backup-and-restore-data-of-a-doks-cluster-using-velero