دليل لتحسين استخدام الموارد والتكاليف باستخدام مُوسِّع Pod العمودي التلقائي (VPA) في مجموعات Kubernetes
تشرح هذه المقالة كيفية تحقيق تحسين الأداء والتكلفة عن طريق الضبط الديناميكي لمتطلبات موارد تطبيقاتك (وحدة المعالجة المركزية/الذاكرة) باستخدام مُوسِّع Pod العمودي التلقائي (VPA) في Kubernetes. سنتناول خطوة بخطوة كيفية إعداد وتكوين VPA للتغلب على تحديات إدارة الموارد اليدوية وضمان تشغيل تطبيقاتك دائمًا بالقدر المناسب من الموارد.
ما هو VPA ولماذا هو مهم؟
في معماريات الخدمات المصغرة الحديثة والتطبيقات المعبأة في حاويات، يعد تحديد التخصيص الصحيح لموارد وحدة المعالجة المركزية والذاكرة لكل Pod مهمة صعبة. يمكن أن يؤدي نقص التخصيص إلى تدهور الأداء وتعطل التطبيقات، بينما يؤدي الإفراط في التخصيص إلى زيادة التكاليف وإهدار موارد المجموعة. تم تصميم مُوسِّع Pod العمودي التلقائي (VPA) في Kubernetes لحل هذه المشكلة. يراقب VPA الاستهلاك التاريخي وفي الوقت الفعلي لموارد Pods الخاصة بك، ويقترح أو يطبق مباشرة قيم request و limit المثلى لوحدة المعالجة المركزية والذاكرة.
كيف يعمل VPA
يتكون نظام VPA من ثلاثة مكونات رئيسية:
- VPA Recommender: يراقب سجل استخدام موارد Pods ويقدم توصيات لإعدادات الموارد المثلى.
- VPA Updater: يقوم بتحديث طلبات موارد Pods بناءً على اقتراحات Recommender. تتطلب هذه العملية عادةً إعادة تشغيل Pod.
- VPA Admission Controller: يعترض إنشاء Pods الجديدة في المجموعة ويطبق إعدادات الموارد الموصى بها من قبل VPA.
يعمل VPA على تحسين أداء Pods مع زيادة كفاءة الموارد الإجمالية عبر المجموعة.
خطوات التثبيت
يعد تثبيت VPA على مجموعة Kubernetes الخاصة بك أمرًا بسيطًا للغاية. أولاً، نحتاج إلى تنزيل ملفات YAML التي تحتوي على مكونات VPA:
git clone https://github.com/kubernetes/autoscaler.git\ncd autoscaler/vertical-pod-autoscaler/deployبعد ذلك، يمكنك نشر مكونات VPA في مجموعتك عن طريق تشغيل برنامج التثبيت النصي:
./vpa-up.shسيقوم هذا البرنامج النصي بتثبيت مكونات VPA Recommender و Updater و Admission Controller في مجموعتك. للتحقق من نجاح التثبيت، يمكنك استخدام الأمر التالي:
kubectl get pods -n kube-system | grep vpaتكوين VPA لتطبيق
الآن دعنا نرى كيفية إدارة تطبيق Nginx كمثال باستخدام VPA. أولاً، دعنا ننشئ نشر Nginx كمثال (بدون تحديد قيود الموارد أو بقيود منخفضة):
# nginx-deployment.yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: nginx-deployment\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: nginx\n template:\n metadata:\n labels:\n app: nginx\n spec:\n containers:\n - name: nginx\n image: nginx:latest\n ports:\n - containerPort: 80\n # لا نحدد request/limit هنا للسماح لـ VPA بتحديد هذه القيم\n # أو يمكننا تعيين قيم أولية منخفضة.\n # resources:\n # requests:\n # cpu: "100m"\n # memory: "100Mi"طبق النشر:
kubectl apply -f nginx-deployment.yamlالآن دعنا نحدد كائن VPA لهذا النشر. في هذا المثال، سنقوم بتكوين VPA في وضع Auto، مما يسمح لـ VPA بتحديث طلبات الموارد تلقائيًا وإعادة تشغيل Pods إذا لزم الأمر.
# nginx-vpa.yaml\napiVersion: autoscaling.k8s.io/v1\nkind: VerticalPodAutoscaler\nmetadata:\n name: nginx-vpa\nspec:\n targetRef:\n apiVersion: "apps/v1"\n kind: Deployment\n name: nginx-deployment\n updatePolicy:\n updateMode: Auto\n resourcePolicy:\n containerPolicies:\n - containerName: '*'
minAllowed:\n cpu: 100m\n memory: 100Mi\n maxAllowed:\n cpu: 2\n memory: 4Gi\n controlledResources: ["cpu", "memory"]طبق كائن VPA:
kubectl apply -f nginx-vpa.yamlبعد فترة، سيبدأ VPA في مراقبة استخدام موارد Pods Nginx الخاصة بك وتقديم التوصيات. لرؤية التوصيات:
kubectl describe vpa nginx-vpaفي قسم Status، سترى قيم وحدة المعالجة المركزية والذاكرة الموصى بها من قبل VPA. بفضل updateMode: Auto، سيقوم VPA بتطبيق هذه القيم تلقائيًا على Pods الخاصة بك.
أوضاع VPA وحالات الاستخدام
يحتوي VPA على ثلاثة قيم رئيسية لـ updateMode:
- Off: يوفر VPA فقط توصيات للموارد ولكنه لا يغير طلبات موارد Pods تلقائيًا. هذا الوضع مفيد عندما تريد تحليل التوصيات يدويًا قبل إدخال VPA في الإنتاج.
- Recommender: في هذا الوضع، يوفر VPA توصيات للموارد ولكنه لا يقوم بتحديث Pods الموجودة. يتم تطبيق طلبات الموارد التي يحددها VPA فقط على Pods التي تم إنشاؤها حديثًا. يمكن أن تكون هذه نقطة بداية جيدة لأعباء العمل الحساسة لإعادة التشغيل.
- Auto: يقوم VPA بتحديث طلبات الموارد تلقائيًا ويمكنه إعادة تشغيل Pods لتطبيق التغييرات. يفضل هذا الوضع لإدارة الموارد الأكثر ديناميكية وتلقائية.
اعتبارات وأفضل الممارسات
- تعارضات VPA و HPA: يمكن أن تحدث تعارضات إذا حاول VPA و Horizontal Pod Autoscaler (HPA) إدارة نفس الموارد (وحدة المعالجة المركزية/الذاكرة) على نفس Pod. بشكل عام، يوصى باستخدام VPA لوحدة المعالجة المركزية والذاكرة، بينما يتم استخدام HPA للمقاييس المخصصة أو الأحداث الخارجية.
- إعادة تشغيل Pods: عند استخدام
updateMode: Auto، قد يقوم VPA بإعادة تشغيل Pods لتطبيق تغييرات الموارد. هذا يعني أنك بحاجة إلى التأكد من أن تطبيقاتك مرنة أمام الانقطاعات أو تستخدم استراتيجيات نشر مناسبة (RollingUpdate). - الحدود الدنيا/القصوى: يمكنك تحديد قيم الموارد الدنيا والقصوى التي سيوصي بها VPA أو يطبقها باستخدام
resourcePolicy. هذا أمر بالغ الأهمية لمنع تخصيصات الموارد المنخفضة جدًا أو العالية جدًا غير المرغوب فيها. - المراقبة والتحقق: راقب بانتظام سلوك VPA وتأثير توصياته على أداء تطبيقك. يمكنك تتبع مقاييس VPA باستخدام أدوات مثل Prometheus و Grafana.
الخلاصة
يعد مُوسِّع Pod العمودي التلقائي (VPA) في Kubernetes أداة قوية تتيح لك الاستفادة القصوى من مجموعات Kubernetes الخاصة بك عن طريق أتمتة وتحسين إدارة الموارد. عند تكوينه بشكل صحيح، يمكن لـ VPA تحسين استقرار تطبيقاتك وكفاءة التكلفة بشكل كبير مع تقليل النفقات التشغيلية. باتباع الخطوات الواردة في هذا الدليل، يمكنك تنفيذ VPA بنجاح في بيئة Kubernetes الخاصة بك ونقل استراتيجية إدارة الموارد الخاصة بك إلى المستوى التالي.
التعليقات (0)
لا توجد تعليقات بعد. كن أول من يعلق!