النسخ الاحتياطي واستعادة موارد Kubernetes مع Heptio Ark

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


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


باستخدام Heptio ، يمكنك إنشاء نسخ احتياطية للكتلة بأكملها أو فراغات أسماء فردية أو أنواع موارد وإجراء نسخ احتياطية في الموعد المحدد. بالنسبة لي ، فإن الميزة الرئيسية لـ Heptio Ark هي تكاملها مع العديد من موفري الخدمات السحابية ، على سبيل المثال AWS و Azure و Google Cloud وما إلى ذلك. لذلك عندما يتم الاحتفاظ بنسخة احتياطية منه ، فإنه يأخذ لقطات من الأحجام المستمرة المستخدمة.


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


سيكون هناك منشور منفصل حول النسخ الاحتياطي للمجلدات الدائمة.


التثبيت


ستجد تعليمات التثبيت هنا: أمثلة / README.md. ستنشئ هذه العملية العديد من تعريفات الموارد المخصصة ، وقواعد RBAC (التحكم في الوصول استنادًا إلى الدور) التي تسمح لـ Heptio بالنسخ الاحتياطي والنشر. بشكل افتراضي ، تكون في مساحة الاسم heptio-ark.


هام! بعد التثبيت الناجح ، تحتاج إلى تكوين heptio-ark لإخبار الخادم بموفر الخدمة السحابية الذي سيتم استخدامه ومكان تخزين النسخ الاحتياطية. إليك ما يبدو عليه هذا التكوين:


apiVersion: ark.heptio.com/v1 kind: Config metadata: namespace: heptio-ark name: default backupStorageProvider: name: aws bucket: heptio-backup-bucket config: region: eu-central-1 backupSyncPeriod: 30m gcSyncPeriod: 30m scheduleSyncPeriod: 1m restoreOnlyMode: false 

يمكنك تطبيقه باستخدام الأمر


  kubectl apply -f heptio.yaml 

يعرف Heptio الآن أي دلو يجب نسخه احتياطيًا. يجب أن يكون موقع تخزين النسخ الاحتياطي يمكن الوصول إليه من المداخن خادم الخادم ، بحيث يمكنك استخدام ملف تعريف المثيل مع الوصول إلى هذا الدلو أو Kube2IAM لملفات تعريف المثيلات الديناميكية المستندة إلى الموقد.


أخيرًا ، للنسخ الاحتياطية والجداول الزمنية والاسترداد ، تحتاج إلى تنزيل Heptio Ark CLI من GitHub .


يمكن تنفيذ جميع الأوامر تقريبًا كتعريفات موارد مخصصة من خلال YAML أو JSON.


النسخ الاحتياطي


في هذا المثال الصغير ، قمت بإنشاء NGINX للنشر البسيط ، وقبله خدمة في مساحة اسم خادم الويب :


 $ kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/nginx 1 1 1 1 28s NAME DESIRED CURRENT READY AGE rs/nginx-66f5756f9b 1 1 1 28s NAME READY STATUS RESTARTS AGE po/nginx-66f5756f9b-c88ck 1/1 Running 0 28s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/nginx ClusterIP 10.32.0.183 <none> 80/TCP 28s 

دعونا نقوم بعمل نسخة احتياطية من Heptio Ark CLI:


 $ ark backup create nginx-simple --include-namespaces webserver 

يقوم هذا الأمر بعمل نسخة احتياطية فقط من مساحة اسم خادم الويب . بدون هذه المعلمة ، سيقوم Heptio Ark بإنشاء نسخة احتياطية كاملة لجميع الموارد في مجموعة Kubernetes. النسخ الاحتياطي سيستغرق بعض الوقت. سيتم حفظ نسخة في الجرافة المحددة في S3 ( heptio-backup-bucket ). لعرض حالة وقائمة بجميع النسخ الاحتياطية ، أدخل الأمر التالي في CLI:


 $ ark backup get NAME STATUS CREATED EXPIRES SELECTOR nginx-simple Completed 2018-07-08 17:35:09 +0200 CEST 29d <none> 

كما ترى ، اكتمل النسخ الاحتياطي.


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


دعنا نزيل مساحة اسم خادم الويب (مضمنة):


 $ kubectl delete ns heptio-test 

الآن ، قم باستعادة مساحة الاسم بعد حذف "عشوائي" ، ومرة ​​أخرى من Heptio Ark CLI:


 $ ark restore create --from-backup nginx-simple Restore request "nginx-simple-20180708173924" submitted successfully. Run `ark restore describe nginx-simple-20180708173924` for more details. 

يجب أن ترى استعادة مساحة الاسم وجميع الموارد (النشر ومجموعة النسخ المتماثلة والخدمات الفرعية):


 $ kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/nginx 1 1 1 1 20s NAME DESIRED CURRENT READY AGE rs/nginx-66f5756f9b 1 1 1 20s NAME READY STATUS RESTARTS AGE po/nginx-66f5756f9b-9mjvg 1/1 Running 0 20s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/nginx ClusterIP 10.32.0.77 <none> 80/TCP 20s 

هيكل النسخ الاحتياطي


لعرض هيكل النسخ الاحتياطي ، ما عليك سوى تحميله من المجموعة في S3 أو إدخال أمر Heptio Ark:


 $ ark backup download nginx-simple Backup nginx-simple has been successfully downloaded to $PWD/nginx-simple-data.tar.gz 


في ملف webserver.json لمساحة الاسم الخاصة بنا ، نرى موردًا عاديًا لمساحة الاسم.


 { "apiVersion":"v1", "kind":"Namespace", "metadata": { "annotations": { "kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"webserver\",\"namespace\":\"\"}}\n" }, "creationTimestamp":"2018-07-08T15:26:44Z", "name":"webserver", "resourceVersion":"3364", "selfLink":"/api/v1/namespaces/webserver", "uid":"52698ae7-82c3-11e8-8529-0645eb60c3f4" }, "spec": { "finalizers":["kubernetes"] }, "status": { "phase":"Active" } } 

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


 $ ark schedule create nginx-schedule --schedule="* 10 * * *" --include-namespaces webserver Schedule "nginx-schedule" created successfully. 

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


يمكن لـ Heptio Ark تنفيذ المهام المجدولة. نشير إلى الموارد ومساحات الأسماء التي يجب تضمينها في النسخة الاحتياطية أو استبعادها منها ومتى يتم النسخ الاحتياطي:


 $ ark schedule create nginx-schedule --schedule="* 10 * * *" --include-namespaces webserver Schedule "nginx-schedule" created successfully. 

في هذه الحالة ، سيتم إنشاء نسخة احتياطية كل يوم الساعة 10 صباحًا وتضمين مساحة اسم خادم الويب فقط. في Heptio Ark CLI ، نرى أن الجدول قد ظهر وأن Heptio Ark قد أنشأ بالفعل أول نسخة احتياطية:


 $ ark schedule get NAME STATUS CREATED SCHEDULE BACKUP TTL LAST BACKUP SELECTOR nginx-schedule Enabled 2018-07-08 17:49:00 +0200 CEST * 10 * * * 720h0m0s 25s ago <none> $ ~/Downloads/ark backup get NAME STATUS CREATED EXPIRES SELECTOR nginx-schedule-20180708154900 Completed 2018-07-08 17:49:00 +0200 CEST 29d <none> nginx-simple Completed 2018-07-08 17:35:09 +0200 CEST 29d <none> 

يشار هنا إلى أنه يتم حذف النسخ الاحتياطية المجدولة بعد 720 ساعة ، أي بعد 30 يومًا. عند إنشاء نسخة احتياطية أو جدول زمني ، يمكنك تحديد عمر النسخة - TTL. بعد هذه الفترة ، سيتم حذف النسخة الاحتياطية من المستودع ، في حالتنا AWS.

Source: https://habr.com/ru/post/ar423559/


All Articles