كيفية إجراء النسخ الاحتياطي والاستعادة باستخدام TrilioVault في DOKS

المقدمة

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

مزايا استخدام Trilio:

  • إجراء نسخ احتياطية كاملة (أو تزايدي) لعنقودك واستعادتها في حالة فقدان البيانات.
  • الترحيل من عنقود إلى آخر.
  • يتم دعم نسخ احتياطية لإصدارات Helm.
  • تشغيل الخطوط السابقة واللاحقة لعمليات النسخ الاحتياطي والاستعادة.
  • واجهة إدارة ويب تتيح لك فحص حالة عمليات النسخ الاحتياطي/الاستعادة بالتفصيل.
  • تعريف سياسات الاحتفاظ بنسخ الاحتياطية الخاصة بك.
  • يمكن إدارة دورة حياة التطبيق (أي TVK نفسه) عبر TrilioVault Operator مخصص`.
  • التكامل مع Velero.
  • يمكنك عمل نسخ احتياطية واستعادة التطبيقات القائمة على المشغل.

لمزيد من المعلومات، يرجى الرجوع إلى الوثائق الرسمية لـ TVK CRDs.

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

المتطلبات

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

  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 لتفاعل واجهة برمجة التطبيقات لـ DigitalOcean.
  5. Kubectl لتفاعل Kubernetes.

لكي يعمل TrilioVault بشكل صحيح ولكي يقوم بنسخ احتياطي لـ PVCs الخاصة بك، يجب تكوين DOKS لدعم واجهة تخزين الحاويات (أو CSI بشكل مختصر). بشكل افتراضي، يأتي مع البرنامج التشغيل مثبتًا ومكونًا بالفعل. يمكنك التحقق باستخدام الأمر التالي:

kubectl get storageclass

يجب أن يبدو الإخراج مشابهًا لمقطع الشفرة التالي. لاحظ أن المزود هو 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

يجب أن يبدو الإخراج مشابهًا لمقطع الشفرة التالي. إذا لم يتم تثبيت VolumeSnapshot CRD، فراجع تثبيت VolumeSnapshot CRDs.

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

في نهاية ملف YAML CRD، يجب أن ترى قائمة storedVersions تحتوي على قيم v1beta1 و v1 (إذا لم يتم التثبيت، راجع تثبيت VolumeSnapshot CRDs):

...
- 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. تعرِّف CRD TrilioVaultManager الذي يخبر مشغل TrilioVault كيفية التعامل مع التثبيت وخطوات ما بعد التكوين والترقيات المستقبلية لمكونات تطبيق Trilio.
  • عبر الرسم البياني triliovault-operator الذي يتم إدارته بالكامل بواسطة Helm، (مشمول في هذا البرنامج التعليمي).

تثبيت TrilioVault باستخدام Helm

يستخدم برنامج Starter Kit نوع التثبيت في العنقود لتطبيق TVK (applicationScope قيمة Helm مُعينة إلى “Cluster”). تعتمد جميع الأمثلة من هذا البرنامج التعليمي على هذا النوع من التثبيت للعمل بشكل صحيح.

أولاً، انسخ مستودع Git لـ Starter Kit وغير الدليل إلى نسختك المحلية:

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 وتصديره إلى ملف لرؤية جميع الخيارات المتاحة.

ثم، قم بفتح وفحص ملف قيم Helm لـ TrilioVault المقدم في مستودع Starter kit باستخدام محرر تفضله (مع دعم فحص YAML).

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 Manager (TVM) Custom Resource باستخدام المعلمات المقدمة في 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 و توليد ترخيص جديد لعقدتك التي تناسب احتياجاتك (على سبيل المثال، يمكنك اختيار نوع الترخيص الأساسي الذي يتيح لك تشغيل TrilioVault بشكل دائم إذا لم تتجاوز قدرة عقدتك 10 عقد). يتيح لك ترخيص الفترة التجريبية المجانية تشغيل TVK لمدة شهر على عقدات غير محدودة.
  • يتم توفير TrilioVault بشكل مجاني لعقدات Kubernetes التي تصل إلى 100000 عقدة لمستخدمي DigitalOcean. يمكن للمستخدمين اتباع الخطوات التالية لإنشاء ترخيص خاص متاح لعملاء DO فقط.

تعتمد أمثلة حزمة البداية على نوع الترخيص العقدة للوظيفة بشكل صحيح.

إنشاء وفحص ترخيص تطبيق 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 object. يمكنك تفقده من خلال تشغيل الأمر التالي:

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.

الناتج أعلاه سيُظهر لك أيضًا متى سينتهي الرخصة في حقل Expiration Timestamp، والنطاق (Scope) (يُعتمد على النطاق Cluster في هذه الحالة). يمكنك اختيار نوع رخصة على مستوى النطاق أو على أساس مساحة الاسم (Namespace)

تجديد رخصة تطبيق 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>    # يجب أن تكون القيمة مشفرة بترميز base64

# يجب أن تكون القيمة مشفرة بترميز base64

لاحظ أن اسم السر هو trilio-s3-target ويتم الإشارة إليه بواسطة حقل spec.objectStoreCredentials.credentialSecret في CRD Target المشروح سابقًا. يمكن أن يكون الـ secret في نفس مساحة الأسماء التي تم تثبيت 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=“<YOUR_DO_SPACES_ACCESS_KEY_HERE>” \

–from-literal=secretKey=“<YOUR_DO_SPACES_SECRET_KEY_HERE>”

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

ثم، قم بفتح وتفقد ملف التجسيد المستهدف المقدم في مستودع Starter Kit باستخدام محرر اختيارك (مع دعم YAML lint إذا كان متاحاً).

الآن، يرجى استبدال العلامات <> وفقًا لدليلات DO Spaces Trilio bucket الخاص بك، مثل bucketName، region، url و credentialSecret.

kubectl get target trilio-s3-target  -n tvk

في النهاية، قم بحفظ ملف التجسيد وإنشاء كائن Target باستخدام kubectl:

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

بعد ذلك، سيقوم TrilioVault بإنشاء عملية عمل (worker job) تحت اسم 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 104s

# الآن، جلب بيانات السجلات

سيكون الإخراج هو هذا الاستثناء:

الخطوة التالية، ستكتشفون واجهة مستخدم ويب TVK التي هي إضافة مفيدة لمساعدتك في إدارة عمليات النسخ الاحتياطي واستعادة البيانات بسهولة، إلى جانب العديد من الوظائف الأخرى.

الخطوة 3 – التعرف على واجهة إدارة الويب TVK

بينما يمكنك إدارة عمليات النسخ الاحتياطي واستعادة البيانات بالكامل من خلال واجهة سطر الأوامر (CLI) تمامًا عبر 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 تحكم الإدخال Nginx لتوجيه حركة المرور إلى خدمات وحدة التحكم عبر الويب. التوجيه مستند إلى المضيف، واسم المضيف هو tvk-doks.com كما هو محدد في ملف قيم Helm من Starter Kit:

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

# اسم المضيف المستخدم عند الوصول إلى وحدة التحكم عبر الويب عبر تحكم الإدخال لـ TVK

بعد الحصول على المعلومات أعلاه، يرجى المضي قدمًا وتحرير ملف /etc/hosts، وأضف هذا الإدخال:
doctl k8s cluster list

بعد ذلك، قم بإنشاء توجيه البوابة لخدمة تحكم الإدخال لـ 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
  • استكشف كل قسم من اليسار، مثل:
  • إدارة العناقيد: يعرض قائمة العناقيد الأساسية والأخرى التي تحتوي على مثيلات TVK، المضافة إلى عنقود OVH الأساسي باستخدام ميزة الإدارة متعددة العناقيد.
  • النسخ الاحتياطي والاستعادة: هذه هي لوحة المعلومات الرئيسية التي توفر لك نظرة عامة على العنقود بأكمله، مثل الأسماء الفضائية المكتشفة، والتطبيقات، وقائمة خطط النسخ الاحتياطي، والأهداف، والخطافات، والسياسات، وما إلى ذلك.

الرصد: يحتوي هذا على خيارين- رصد TrilioVault و رصد Velero إذا كان المستخدم قد قام بتكوين Velero على عنقود OVH الخاص بهم.

استعادة الكوارث: تتيح لك إدارة وأداء عمليات استعادة الكوارث.

استعادة الكوارث: تتيح لك إدارة وأداء عمليات استعادة الكوارث.

يمكنك أيضًا رؤية الهدف S3 الذي تم إنشاؤه سابقًا، عن طريق الانتقال إلى النسخ الاحتياطي والاستعادة -> الأهداف -> <Namespace> من القائمة المنسدلة في الأعلى.

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

للمزيد من المعلومات والميزات المتاحة، يرجى الاطلاع على الوثائق الرسمية لـ واجهة مستخدم إدارة الويب TrilioVault.

بعد ذلك، ستتعلم كيفية أداء عمليات النسخ الاحتياطي واستعادة لحالات الاستخدام المحددة.

الخطوة 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 لديه ميزة تسمح لك بإجراء النسخ الاحتياطي على مستوى أعلى من مجرد مساحات الأسماء.

  • إنشاء نسخة احتياطية لإطلاق Ambassador Helm
  • لإجراء النسخ الاحتياطي لتطبيق واحد على مستوى مساحة الأسماء (أو إصدار 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

بعد ذلك، غير الدليل إلى المسار حيث تم استنساخ مستودع Git Starter Kit على جهازك المحلي:

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
...

# تبدو النتيجة مشابهة لهذا (لاحظ أن `STATUS` تغيرت إلى `Available`، و `PERCENTAGE` هو `100`)

kubectl get pods -n ambassador | grep metamover

إذا كانت النتيجة تبدو مشابهة لهذا، فقد نجحت في نسخ احتياطي لإطلاق السفير ambassador. يمكنك المتابعة ومعرفة كيفية تخزين البيانات الوصفية لـ Kubernetes من خلال قائمة محتويات دلو TrilioVault S3. على سبيل المثال، يمكنك استخدام s3cmd:

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

تبدو النتيجة مشابهة لما يلي. لاحظ أن القائمة تحتوي على ملفات JSON ومعرفات الوحدات، التي تمثل كائنات Kubernetes.

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

في حالة عدم توفر النسخ الاحتياطي، يمكنك فحص السجلات من Pod 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

وأخيرًا، يمكنك التحقق من توفر النسخ الاحتياطي أيضًا في واجهة التحكم عبر الويب من خلال التنقل إلى إدارة الموارد -> السفير -> خطط النسخ الاحتياطي. لاحظ أنها في حالة Available وأن إطلاق السفير Helm تم نسخه في عرض البيانات الفرعية.

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 في مساحة الأسماء/العنقود البعيدة أيضًا. لإعادة التأهيل إلى عنقود جديد (حيث لا يوجد موجود Backup CR)، يجب تعيين source.type إلى location. يرجى الرجوع إلى قسم تعريف مورد مخصص للاستعادة لعرض مثال استعادة حسب الموقع.

  • عند حذف مساحة الأسماء ambassador، سيتم حذف مورد موازن الحمل المرتبط بخدمة السفير أيضًا. لذا، عند استعادة خدمة السفير، سيتم إعادة إنشاء LB بواسطة DigitalOcean. المشكلة هي أنه ستحصل على عنوان IP جديد لـ LB الخاص بك، لذا ستحتاج إلى ضبط A records للحصول على حركة المرور إلى النطاقات الخاصة بك المستضافة على العنقود.
  • لاستعادة نسخة احتياطية محددة، يجب عليك إنشاء Restore CRD. يبدو الـ Restore 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

يتيح لك Restore استعادة آخر نسخة احتياطية ناجحة لتطبيق. يُستخدم لاستعادة مساحات أسماء فردية أو إصدار Helm، والتي يتم حمايتها بواسطة Backup CRD. يُحدد Backup CRD بواسطة اسمه ambassador-helm-release-full-backup.

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

أولاً، قم بتفحص مثال Restore CRD من مستودع Starter Kit Git:

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:

وأخيرًا، قم بتفحص حالة كائن Restore:

يبدو الإخراج مشابهًا للتالي. لاحظ عمود STATUS الذي تم تعيينه إلى Completed، بالإضافة إلى تعيين PERCENTAGE COMPLETED إلى 100.

kubectl get all -n ambassador

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

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

تحقق من وجود جميع موارد مساحة الأسماء 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

احصل على مضيفي 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 يشير إلى اسم المضيف الكامل.

احصل على تعيينات ambassador:

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 الخاصة بك، لأن موارد موازن الحمل في ديجيتال أوشن تم إعادة إنشاؤها، وتم تعيين عنوان IP الخارجي الجديد لها.

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

الخطوة التالية تتعامل مع النسخ الاحتياطي واستعادة العمليات للمجموعة بأكملها.

الخطوة 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 لمجموعة البداية على جهازك المحلي:

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

ثم، افتح وافحص ملفات التخطيط للنسخ الاحتياطي للعنقود والنسخ الاحتياطي للعنقود المقدمة في مستودع مجموعة البداية باستخدام محرر اختيارك (مفضلًا مع دعم فحص YAML).

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 واستعادة التطبيقات

جانب مهم يجب أن تضعه في اعتبارك هو أنه كلما قمت بتدمير عقدة DOKS ثم استعدتها، يتم إنشاء محمل تحميل جديد بعنوان IP خارجي جديد أيضًا عندما يقوم TVK بإعادة تثبيت متحكم الدخول الخاص بك. لذا، يرجى التأكد من تحديث سجلات DNS الخاصة بـ DigitalOcean A records وفقًا لذلك.

الآن، احذف عقدة DOKS بالكامل (تأكد من استبدال العلامات <> وفقًا لذلك):

بعد ذلك، أعد إنشاء العقدة كما هو موضح في إعداد Kubernetes لـ DigitalOcean.

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

بعد اكتمال التثبيت بنجاح، قم بتكوين الهدف TVK كما هو موضح في الخطوة 2 – إنشاء هدف TrilioVault لتخزين النسخ الاحتياطية، وقم بتوجيهه إلى نفس الحاوية S3 حيث تقع بيانات النسخ الاحتياطي الخاصة بك. كما يرجى التأكد من تمكين تصفح الهدف.

بعد ذلك، قم بالتحقق من الترخيص الجديد وتنشيطه كما هو موضح في القسم ترخيص تطبيق TrilioVault.

للوصول إلى واجهة مستخدم وحدة التحكم عبر الويب، يرجى الرجوع إلى القسم الحصول على وصول إلى وحدة التحكم الإدارية لـ TVK.

ثم، انتقل إلى إدارة الموارد -> فضاء الأسماء TVK -> الأهداف (في حالة حقيبة البداية، فإن فضاء الأسماء TVK هو tvk):

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

الآن، انقر على عنصر starter-kit-cluster-backup-plan من القائمة، ثم انقر وقم بتوسيع عنصر starter-kit-cluster-backup من النافذة الفرعية اليمنى:

kubectl get all --all-namespaces

لبدء عملية استعادة النسخ الاحتياطية، انقر على زر استعادة.

فحص حالة تطبيقات DOKS Cluster

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

أولاً، تحقق من جميع موارد Kubernetes في العنقود.

ثم، تأكد من أن سجلات DNS A مُحدّثة لتشير إلى عنوان IP الخارجي الجديد لموزّع الأحمال الخاص بك.

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

في الخطوة التالية، ستتعلم كيفية إجراء نسخ احتياطية مجدولة (أو تلقائية) لتطبيقات عنقود 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 من النوع Schedule الذي يحدد جدول النسخ الاحتياطي بتنسيق cron (نفس تنسيق cron في Linux). يمكن استخدام سياسات الجدولة للـ BackupPlan أو ClusterBackupPlan CRDs. يبدو السجل CRD لسياسة الجدولة النموذجية كما يلي (يحدد جدولًا بـ 5 دقائق):

# يشغل كل 5 دقائق

بعد ذلك، يمكنك تطبيق سياسة الجدولة على CRD للـ ClusterBackupPlan على سبيل المثال، كما يظهر أدناه:

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

يمكنك ملاحظة أنها عبارة عن CRD أساسي للـ ClusterBackupPlan، يشير إلى سجل CRD المحدد سابقًا من خلال حقل spec.backupConfig.schedulePolicy. يمكنك إنشاء سياسات منفصلة للنسخ الاحتياطي الكامل أو التزايدية، لذا يمكن تحديد fullBackupPolicy أو incrementalBackupPolicy في المواصفات.

kubectl get policies -n tvk

الآن، يرجى إنشاء سياسة الجدولة باستخدام السجل النموذجي المقدم في دليل Starter Kit.

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

قم بتغيير الدليل إلى المكان الذي تم فيه استنساخ مستودع Git Starter Kit على جهازك المحلي.

تحقق من أن مورد السياسة تم إنشاؤه:
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

تسمح سياسة الاحتفاظ بتحديد عدد النسخ الاحتياطية المُحتفظ بها والإيقاع لحذف النسخ الاحتياطية وفقًا لمتطلبات الامتثال. يوفر CRD لسياسة الاحتفاظ بمواصفة YAML بسيطة لتحديد عدد النسخ الاحتياطية المُحتفظ بها بالأيام، والأسابيع، والشهور، والسنوات، وآخرها.

  • استخدام سياسات الاحتفاظ
  • يمكن استخدام سياسات الاحتفاظ لكل من ملفات الـ BackupPlan أو ClusterBackupPlan CRDs. يبدو المظهر النموذجي لـ Policy من نوع Retention كما يلي:
  • تُترجم سياسة الاحتفاظ أعلاه إلى:
  • كل أسبوع، الاحتفاظ بنسخة واحدة كل أربعاء.

كل شهر، الاحتفاظ بنسخة واحدة في اليوم الخامس عشر.

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

كل عام، الاحتفاظ بنسخة واحدة في كل مارس.

بشكل عام، يجب أن تكون هناك نسختان الأحدث متاحتان.

تتبع العملية الأساسية لإنشاء مورد سياسة الاحتفاظ بنفس الطريقة المتبعة للنسخ الاحتياطي المجدول. تحتاج إلى تحديد BackupPlan أو ClusterBackupPlan CRD للإشارة إلى سياسة الاحتفاظ، ثم يتعين وجود كائن Backup أو ClusterBackup لتشغيل العملية.

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

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

استخدام سياسات التنظيف

تحتاج إلى طريقة لجمع القمامة من كل تلك الكائنات التي لم تعد قيد الاستخدام. لذا، تحتاج إلى إدخال سجل CRD لـ Cleanup Policy:

يجب أن يتم تعريف سياسة التنظيف أعلاه في مساحة أسماء تثبيت TVK. بعد ذلك، يتم إنشاء وظيفة cron تلقائيًا تعمل كل 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