المقدمة
مثل أي بيئة أخرى، يمكن أن تكون البيانات في مجموعة Kubernetes في خطر من الضياع. لتجنب المشاكل الخطيرة، من الضروري أن يكون لديك خطة لاسترداد البيانات في متناول اليد. طريقة بسيطة وفعالة للقيام بذلك هي عن طريق إجراء نسخ احتياطية، لضمان سلامة بياناتك في حالة حدوث أي أحداث غير متوقعة. يمكن تشغيل النسخ الاحتياطية مرة واحدة أو بشكل مجدول. من الجيد أن يكون لديك نسخ احتياطية مجدولة لضمان أن لديك نسخة احتياطية حديثة يمكنك الانتقال إليها بسهولة.
Velero – أداة مفتوحة المصدر مصممة لمساعدة عمليات النسخ الاحتياطي واستعادة البيانات لمجموعات Kubernetes. إنها مثالية لحالات الاسترداد من الكوارث، فضلاً عن إنشاء لقطة لحالة تطبيقك قبل تنفيذ عمليات النظام على مجموعتك، مثل الترقيات. لمزيد من التفاصيل حول هذا الموضوع، يرجى زيارة الصفحة الرسمية كيف يعمل Velero.
في هذا البرنامج التعليمي، ستتعلم كيفية نشر Velero إلى مجموعة Kubernetes الخاصة بك، وإنشاء نسخ احتياطية، والاسترداد من نسخة احتياطية إذا حدث خطأ ما. يمكنك أن تقوم بعمل نسخ احتياطية لمجموعة كاملة أو اختيار مساحة أسماء أو محدد تسمية اختياري لعمل نسخ احتياطية لمجموعتك.
جدول المحتويات
- المتطلبات المسبقة
- الخطوة 1 – تثبيت Velero باستخدام Helm
- الخطوة 2 – مثال على نسخ واستعادة المساحة الاسمية
- الخطوة 3 – مثال على نسخ واستعادة العنقود بأكمله
- الخطوة 4 – النسخ الاحتياطي المجدولة
- الخطوة 5 – حذف النسخ الاحتياطية
المتطلبات المسبقة
لإكمال هذا البرنامج التعليمي، تحتاج إلى ما يلي:
- 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 لمجموعة البداية وتغيير الدليل إلى نسختك المحلية:
بعد ذلك، أضف مستودع Helm واستعرض الرسم البياني المتاح:
الناتج يبدو مشابهًا للتالي:
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 إذا أمكن).
بعد ذلك، يرجى استبدال العلامات <>
وفقًا لدلو DO Spaces الخاص بك لـ Velero (مثل الاسم والمنطقة والسريان). تأكد من توفير رمز API الخاص بـ DigitalOcean أيضًا (مفتاح DIGITALOCEAN_TOKEN
).
وأخيرًا، قم بتثبيت Velero باستخدام helm
:
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 \
الآن، تحقق من نشر 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
):
بعد ذلك، تحقق من أن Velero قيد التشغيل ويعمل:
NAME READY UP-TO-DATE AVAILABLE AGE
velero 1/1 1 1 67s
الناتج يبدو مشابهًا لما يلي (يجب أن تكون البودات الخاصة بالنشر في حالة جاهزة
):
إذا كنت مهتمًا بالمزيد، يمكنك عرض مكونات خادم Velero من الجانب الخادم:
- استكشف صفحات مساعدة سطر الأوامر لـ Velero لمعرفة الأوامر والأوامر الفرعية المتاحة. يمكنك الحصول على المساعدة لكل منها باستخدام العلامة
--help
: - قائمة جميع الأوامر المتاحة لـ
Velero
:
اطلع على خيارات أمر النسخ الاحتياطي
لـ Velero
:
يستخدم Velero عدة CRDs (تعريفات الموارد المخصصة) لتمثيل موارده مثل النسخ الاحتياطية، وجداول النسخ الاحتياطي، إلخ. ستكتشف كل واحد في الخطوات التالية من البرنامج التعليمي، جنبًا إلى جنب مع بعض الأمثلة الأساسية.
الخطوة 2 – مثال على النسخ الاحتياطي واستعادة النطاق
في هذه الخطوة، ستتعلم كيفية إجراء نسخ احتياطي مرة واحدة لمساحة الأسماء بأكملها من عنقود DOKS الخاص بك واستعادتها بعد ذلك مع التأكد من إعادة إنشاء جميع الموارد. المساحة الأسماء المعنية هي ambassador
.
إنشاء نسخة احتياطية لمساحة الأسماء Ambassador
أولاً، قم ببدء النسخ الاحتياطي:
ثم، تحقق من أن النسخ الاحتياطي قد تم إنشاؤه:
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>
تبدو النتيجة مشابهة لما يلي:
ثم، بعد بضع لحظات، يمكنك تفقد ذلك:
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
:
أولاً، قم بمحاكاة كارثة عن طريق حذف مساحة السفير بشكل متعمد:
ثم، تحقق من حذف المساحة (قائمة المساحات لا يجب أن تطبع ambassador
):
وأخيراً، تحقق من أن نقطة نهاية خدمات الخلفية echo
و quote
متوقفة. يُرجى الرجوع إلى إنشاء خدمات الخلفية لمكدس حواف السفير بخصوص التطبيقات الخلفية المستخدمة في دليل البداية. يمكنك استخدام curl
للاختبار (أو يمكنك استخدام متصفح الويب الخاص بك):
استعادة نسخة احتياطية لمساحة السفير
استعد النسخة الاحتياطية لـ ambassador-backup
:
مهم: عند حذف ambassador
الفضاء الاسمي ، سيتم حذف مورد موازن الحمل المرتبط بخدمة السفير أيضًا. لذا ، عند استعادة خدمة ambassador
، سيتم إعادة إنشاء موازن الحمل بواسطة DigitalOcean. المشكلة هنا هي أنك ستحصل على عنوان IP جديد لموازن الحمل الخاص بك ، لذا ستحتاج إلى ضبط A records
للحصول على حركة المرور إلى النطاقات الخاصة بك المستضافة على العقدة.
التحقق من استعادة فضاء الأسماء الخاص بالسفير
للتحقق من استعادة الفضاء الأسمي لـ ambassador
، تحقق من خط الـ Phase
من مخرجات أمر استعادة ambassador-backup
. يجب أن يقول Completed
(أيضًا ، يرجى ملاحظة قسم التحذيرات – يُخبر إذا حدث خطأ ما):
بعد ذلك ، تحقق من أن جميع الموارد تم استعادتها لـ الفضاء الأسمي 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
تبدو المخرجات مشابهة لـ:
احصل على مضيفي السفير:
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
إلى اسم المضيف الكامل المؤهل.
احصل على تعيينات السفير:
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
):
وأخيرًا، بعد إعادة تكوين موازن الحمل وإعدادات نطاقك في DigitalOcean، يرجى التحقق من أن نقطة نهاية خدمات الخلفية echo
و quote
هي UP
. راجع إنشاء خدمات الخلفية لـ Ambassador Edge Stack.
في الخطوة التالية، ستقوم بمحاكاة كارثة عن طريق حذف عمدًا عقدة DOKS الخاصة بك.
الخطوة 3 – مثال على النسخ الاحتياطي والاستعادة للعقدة بأكملها
في هذه الخطوة، ستقوم بمحاكاة سيناريو لاستعادة الكوارث. سيتم حذف عقدة DOKS بأكملها ثم استعادتها من نسخة احتياطية سابقة.
إنشاء نسخة احتياطية لعقدة DOKS
أولاً، قم بإنشاء نسخة احتياطية لعقدة DOKS بأكملها:
ثم، تحقق من أن النسخ الاحتياطي قد تم إنشاؤه وأنه لا يوجد تقارير عن أي أخطاء. يقوم الأمر التالي بسرد جميع النسخ الاحتياطية المتاحة:
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>
يبدو الإخراج مماثلًا للتالي:
أخيرًا، قم بفحص حالة النسخ الاحتياطي والسجلات (تحقق من عدم تقارير وجود أخطاء):
مهم: كلما قمت بتدمير مجموعة DOKS دون تحديد علامة --dangerous
لأمر doctl
ثم استعادتها، يتم إعادة إنشاء نفس موزع الأحمال بنفس عنوان IP. هذا يعني أنه لا داعي لتحديث سجلات DNS A
الخاصة بـ DigitalOcean الخاصة بك.
ولكن عند تطبيق العلامة --dangerous
على أمر doctl
، سيتم تدمير موزع الأحمال الحالي وسيتم إنشاء موزع أحمال جديد بعنوان IP خارجي جديد عندما يقوم Velero بإعادة تشغيل متحكم الوصول الخاص بك. لذا، يرجى التأكد من تحديث سجلات DNS A
الخاصة بـ DigitalOcean الخاصة بك وفقًا لذلك.
أولاً، احذف مجموعة DOKS بأكملها (تأكد من استبدال عناصر <>
وفقًا لذلك).
لحذف مجموعة Kubernetes دون تدمير موزع الأحمال المرتبط، قم بتشغيل:
أو لحذف مجموعة Kubernetes مع موزع الأحمال المرتبط:
ثم، أعد إنشاء العنقود، كما هو موضح في إعداد كلاس DigitalOcean Kubernetes. من المهم التأكد من أن عدد العقد الجديدة لعقد DOKS متساوٍ أو أكبر من العدد الأصلي.
ثم، قم بتثبيت سطر الأوامر والخادم الأساسي Velero، كما هو موضح في قسم المتطلبات الأولية و الخطوة 1 – تثبيت Velero باستخدام Helm على التوالي. من المهم استخدام نفس إصدار Helm Chart.
أخيرًا، استعد كل شيء عن طريق تشغيل الأمر التالي:
التحقق من حالة تطبيقات عقدة DOKS
أولاً، تحقق من السطر Phase
في إخراج الأمر all-cluster-backup
restore describe. (استبدل العلامات <>
وفقًا لذلك). يجب أن يقول Completed
.
الآن، قم بالتحقق من جميع موارد العقدة عن طريق تشغيل:
الآن، يجب أن تستجيب التطبيقات الخلفية لطلبات HTTP أيضًا. يرجى الرجوع إلى إنشاء خدمات الخلفية لمكدس Ambassador Edge بخصوص التطبيقات الخلفية المستخدمة في درس Starter Kit.
الخطوة التالية، ستتعلم كيفية أداء النسخ الاحتياطية المجدولة (أو التلقائية) لتطبيقات عُقدة خدمة كبيرة النطاق.
الخطوة 4 – النسخ الاحتياطي المجدول
أخذ النسخ الاحتياطية تلقائيًا بناءً على جدول زمني هو ميزة مفيدة حقًا. يتيح لك إرجاع النظام إلى حالة عمل سابقة إذا حدث خطأ ما.
إن إنشاء نسخة احتياطية مجدولة عملية مباشرة جدًا. يتم توفير مثال أدناه لفترة زمنية بواقع 1 دقيقة
(تم اختيار مساحة الأسماء kube-system
).
أولاً، قم بإنشاء الجدول الزمني:
schedule="*/1 * * * *"
يتم دعم تنسيق مهمة cronjob في Linux أيضًا:
ثم، تحقق من أن الجدول الزمني قد تم إنشاؤه:
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>
تبدو النتيجة مماثلة ل:
ثم، تفقد جميع النسخ الاحتياطية بعد دقيقة تقريبًا:
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>
تبدو النتيجة مماثلة ل:
التحقق من حالة النسخ الاحتياطي المجدول
أولاً، تحقق من السطر Phase
من إحدى النسخ الاحتياطية (يرجى استبدال المكان <>
بما يلزم). يجب أن يقول Completed
.
استعادة النسخ الاحتياطية المجدولة
لاستعادة النسخ الاحتياطية من دقيقة مضت، يُرجى اتباع نفس الخطوات التي تعلمتها في الخطوات السابقة من هذا البرنامج التعليمي. هذه طريقة جيدة لممارسة واختبار الخبرة التي اكتسبتها حتى الآن.
في الخطوة التالية، ستتعلم كيفية حذف النسخ الاحتياطية المحددة يدويًا أو تلقائيًا التي أنشأتها على مر الوقت.
الخطوة 5 – حذف النسخ الاحتياطية
إذا كنت لا تحتاج إلى النسخ الاحتياطية القديمة، يمكنك تحرير بعض الموارد على كل من عقدة Kubernetes ودلو Velero DO Spaces.
أولاً، اختر نسخة احتياطية لمدة دقيقة واحدة على سبيل المثال، وقم بإصدار الأمر التالي (يرجى استبدال العلامات التكميلية <>
وفقًا لذلك):
الآن، تحقق من أنه قد تمت إزالته من إخراج أمر velero backup get
. يجب حذفه أيضًا من دلو DO Spaces.
المقبل، ستقوم بحذف عدة نسخ احتياطية دفعة واحدة باستخدام selector
. يوفر الأمر الفرعي velero backup delete
علمًا يُسمى --selector
. يتيح لك حذف عدة نسخ احتياطية دفعة واحدة بناءً على تسميات Kubernetes. تنطبق نفس القواعد كما هو الحال بالنسبة لـ محددات تسميات Kubernetes.
أولاً، قم بسرد النسخ الاحتياطية المتاحة:
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>
يبدو الإخراج مشابهًا لـ:
بعد ذلك، قل أنك تريد حذف جميع ملفات النسخ الاحتياطية 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
):
بعد ذلك، يمكنك حذف جميع النسخ الاحتياطية التي تتطابق مع قيمة 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 يومًا.
أولاً، أنشئ نسخة احتياطية لـ ambassador
، باستخدام قيمة TTL قدرها 3 دقائق
:
ثم، قم بتفحص نسخة الاحتياطية لـ 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 أيضًا.