كيفية إعداد التعافي من الفشل لمشغل المسارات الثابتة في DigitalOcean

0 الأسهم
0
0
0
0

مقدمة

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

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

الهدف الرئيسي من هذا البرنامج التعليمي هو إظهار كيفية إدارة جدول التوجيه لكل عقدة عاملة استنادًا إلى مواصفات CRD وإعداد بوابة الفشل.

المتطلبات الأساسية
  • مجموعة Kubernetes التي تديرها DigitalOcean والتي يمكنك الوصول إليها.
  • تم تثبيت Kubectl CLI على جهازك المحلي (تم تكوينه للإشارة إلى مجموعة Kubernetes المُدارة بواسطة DigitalOcean)
  • تم تكوين قطرات NAT GW (2 أو أعلى) وتنفيذها على النحو المفصل هنا.
  • أنشئ نظامًا للكشف عن الأعطال في Gateway Droplet، مُصمم خصيصًا لاحتياجات المستخدم، ويضمن كشفًا واضحًا ودقيقًا مع الحد الأدنى من الإنذارات الخاطئة. استخدم خدمات المراقبة مثل Prometheus أو Nagios، أو أنشئ نقاط نهاية للتحقق من الحالة في Droplet، أو أدوات تنبيه مثل Alertmanager للإشعارات. لهذا الغرض، يمكنك استخدام حزمة مراقبة من سوقنا.

فيما يلي مخطط العمارة:

نشر مشغل مسارات Kubernetes الثابتة

قم بنشر أحدث إصدار من مشغل المسارات الثابتة إلى مجموعة Kubernetes المُدارة بواسطة DigitalOcean باستخدام kubectl:

kubectl apply -f https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml
تأكد من تشغيل وحدات المشغل:

دعونا نتحقق ما إذا كانت وحدات المشغل تعمل بشكل جيد.

“"bash kubectl get staticroutes -o wide -n staticroutes

The output looks similar to the below:
```bash
[secondary_label Output]
NAME AGE DESTINATIONS GATEWAY
static-route-ifconfig.me 119s ["XX.XX.XX.XX"] XX.XX.XX.XX
static-route-ipinfo.io 111s ["XX.XX.XX.XX"] XX.XX.XX.XX

الآن دعونا نتحقق من تقارير المشغل ولا ينبغي الإبلاغ عن أي استثناءات:

kubectl logs -f ds/k8s-staticroute-operator -n static-routes

يجب عليك ملاحظة الناتج التالي:

Output
Found 2 pods, using pod/k8s-staticroute-operator-498vv
[2023-05-15 14:12:32,282] kopf._core.reactor.r [DEBUG ] Starting Kopf 1.35.6.
[2023-05-15 14:12:32,282] kopf._core.engines.a [INFO ] Initial authentication has been initiated.
[2023-05-15 14:12:32,283] kopf.activities.auth [DEBUG ] Activity 'login_via_pykube' is invoked.
[2023-05-15 14:12:32,285] kopf.activities.auth [DEBUG ] Pykube is configured in cluster with service account.
[2023-05-15 14:12:32,286] kopf.activities.auth [INFO ] Activity 'login_via_pykube' succeeded.
[2023-05-15 14:12:32,286] kopf.activities.auth [DEBUG ] Activity 'login_via_client' is invoked.
[2023-05-15 14:12:32,287] kopf.activities.auth [DEBUG ] Client is configured in cluster with service account.
[2023-05-15 14:12:32,288] kopf.activities.auth [INFO ] Activity 'login_via_client' succeeded.
[2023-05-15 14:12:32,288] kopf._core.engines.a [INFO ] Initial authentication has finished.
[2023-05-15 14:12:32,328] kopf._cogs.clients.w [DEBUG ] Starting the watch-stream for customresourcedefinitions.v1.apiextensions.k8s.io cluster-wide.
[2023-05-15 14:12:32,330] kopf._cogs.clients.w [DEBUG ] Starting the watch-stream for staticroutes.v1.networking.digitalocean.com cluster-wide.

للتخفيف من تأثير تعطل البوابة، يُنصح بتجهيز بوابة احتياطية للتعافي من التعطل عند الحاجة. على الرغم من أن المشغل لا يدعم حاليًا التوافر العالي الحقيقي (HA)، إلا أن إجراء التعافي من التعطل يُساعد في تقليل مدة انقطاع الخدمة.

لنفترض أن لديك عنوان IP وجهة مُحددًا، وهو 34.160.111.145، وهو البوابة النشطة أو الرئيسية، وعنوان IP 10.116.0.4 مسؤول عن إعادة توجيه حركة المرور. يُخزَّن هذا في ملف primar.yaml.

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: primary
spec:
destinations: 
- "34.160.111.145"
gateway: "10.116.0.4"

بالإضافة إلى ذلك، سيكون لديك بوابة احتياطية أو ثانوية بعنوان IP 10.116.0.12، وهي جاهزة للتعامل مع حركة المرور من نفس عنوان IP الوجهة. تعريف StaticRoute في ملف secondary.yaml مطابق للتعريف الأساسي، باستثناء عنوان IP للبوابة (واسم الكائن). يُخزَّن هذا في ملف secondary.yaml.

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: secondary
spec:
destinations: 
- "34.160.111.145"
gateway: "10.116.0.12"

ومن ثم فإن عملية الفشل الفعلية تتضمن الخطوات التالية:

  • اكتشف أن البوابة النشطة ذات عنوان IP 10.116.0.5 معطلة.
  • حذف StaticRoute النشط حاليًا.
  • قم بتطبيق StaticRoute الجاهز.

حذف المسار الثابت النشط

الآن دعنا نحذف StaticRoute النشط حاليًا.

kubectl delete -f primary.yaml

انتظر من ٣٠ إلى ٦٠ ثانية لإعطاء كل مُشغِّل وقتًا كافيًا لمعالجة حذف الكائن. أي، استجب بحذف المسار من جميع العقد.

تطبيق StaticRoute الاحتياطي

دعونا نقوم بتمكين StaticRoute الثانوي.

 kubectl apply -f secondary.yaml

يجب على المُشغِّل اختيار مسار StaticRoute الاحتياطي الجديد وإدخال إدخالات جدول التوجيه المُقابلة. بعد ذلك، يكتمل التعافي من الفشل.

اختبار الإعداد

يُنشئ كل نموذج CRD مسارًا ثابتًا إلى موقعين إلكترونيين يُبلغان عن عنوان IP العام الخاص بك - ifconfig.me/ip و ipinfo.io/ip. يبدو تعريف المسار الثابت النموذجي كما يلي:

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: static-route-ifconfig.me
spec:
destinations: 
- "34.160.111.145"
gateway: "10.116.0.5"

لاختبار الإعدادات، قم بتنزيل بيان عينة من موقع المثال:

مثال لـ ifconfig.me و ipinfo.io-

curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ifconfig.me.yaml
curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ipinfo.io.yaml

بعد تنزيل البيانات، استبدل كل ملف بـ <>. ثم طبّق كل بيان باستخدام kubectl:

kubectl apply -f static-route-ifconfig.me.yaml
kubectl apply -f static-route-ipinfo.io.yaml

أخيرًا، تحقق مما إذا كانت وحدة اختبار curl-test تستجيب لعنوان IP العام لـ NAT Gateway لكل مسار:

kubectl exec -it curl-test -- curl ifconfig.me/ip
kubectl exec -it curl-test -- curl ipinfo.io/ip

يجب استخدام نفس الاختبار أثناء اختبار التعافي من الفشل. أثناء فشل تجاوز نقطة البوابة الرئيسية، يجب أن تُعطي النتيجة عنوان IP العام لبوابة NAT GW، وأثناء تجاوز نقطة/فشل البوابة الثانوية، يجب أن تُعطي النتيجة عنوان IP العام لبوابة NAT التابعة لنقطة البوابة الثانوية.

استكشاف الأخطاء وإصلاحها

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

kubectl get StaticRoute <static-route-name> -o yaml

التحقق من السجلات: للبحث بشكل أعمق، يمكنك التحقق من سجلات مشغل الطريق الثابت بحثًا عن الأخطاء.

kubectl logs -f ds/k8s-staticroute-operator -n static-routes

مسح

لإزالة المشغل والموارد المرتبطة به، يرجى تشغيل أمر kubectl التالي (تأكد من استخدام نفس إصدار الإصدار الذي استخدمته أثناء التثبيت):

kubectl delete -f deploy https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml

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

customresourcedefinition.apiextensions.k8s.io "staticroutes.networking.digitalocean.com" deleted
serviceaccount "k8s-staticroute-operator" deleted
clusterrole.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
clusterrolebinding.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
daemonset.apps "k8s-staticroute-operator" deleted

الآن، إذا قمت باختبار نفس أمر curl، فستحصل على عنوان IP الخاص بعقدة العامل كإخراج:

kubectl exec -it curl-test -- curl ifconfig.me/ip
kubectl exec -it curl-test -- curl ipinfo.io/ip 

الآن تحقق من عنوان IP العام لعقدة العامل:

kubectl get nodes -o wide

نتيجة

يعد تنفيذ إمكانيات التعافي من الفشل، حتى لو لم يتم دعم التوفر العالي الحقيقي (HA) بالكامل، نهجًا موصى به لتقليل تأثير فشل البوابة.

يمكن للمؤسسات تقليل مدة انقطاع الخدمة بشكل كبير من خلال توفير بوابة احتياطية للتعافي من الفشل إذا لزم الأمر.

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

قد يعجبك أيضاً