التحجيم التلقائي للجراب العمودي في خدمة Azure Kubernetes (AKS)
توفر هذه المقالة نظرة عامة على التحجيم التلقائي للجراب العمودي (VPA) في خدمة Azure Kubernetes (AKS)، والتي تستند إلى إصدار مصدر مفتوح Kubernetes. عند التكوين، فإنه يقوم تلقائيا بتعيين طلبات الموارد والحدود على الحاويات لكل حمل عمل استنادا إلى الاستخدام السابق. يقوم VPA بتحرير وحدة المعالجة المركزية والذاكرة للحجيرات الأخرى ويساعد على الاستفادة الفعالة من مجموعة AKS الخاصة بك.
يوفر التحجيم التلقائي للجراب العمودي توصيات لاستخدام الموارد بمرور الوقت. لإدارة الزيادات المفاجئة في استخدام الموارد، استخدم التحجيم التلقائي للجراب الأفقي، الذي يقوم بتحجيم عدد النسخ المتماثلة للحجيرة حسب الحاجة.
المزايا
يوفر التحجيم التلقائي للجراب العمودي المزايا التالية:
يقوم بتحليل موارد المعالج والذاكرة وضبطها إلى الحجم الصحيح للتطبيقات الخاصة بك. VPA ليست مسؤولة فقط عن زيادة الحجم، ولكن أيضا عن تقليص الحجم استنادا إلى استخدام الموارد الخاصة بها بمرور الوقت.
يتم إخلاء جراب إذا كان بحاجة إلى تغيير طلبات الموارد الخاصة به إذا تم تعيين وضع التحجيم الخاص به إلى تلقائي أو إعادة إنشائه.
تعيين قيود وحدة المعالجة المركزية والذاكرة للحاويات الفردية عن طريق تحديد نهج مورد
يضمن أن العقد لديها موارد صحيحة لجدولة الجراب
تسجيل قابل للتكوين لأي تعديلات على موارد المعالج أو الذاكرة التي تم إجراؤها
تحسين استخدام موارد نظام المجموعة وتحرير وحدة المعالجة المركزية والذاكرة لوحدات الجراب الأخرى.
القيود
يدعم التحجيم التلقائي للجراب العمودي 1000 جراب كحد أقصى مقترن
VerticalPodAutoscaler
بالكائنات لكل نظام مجموعة.قد يوصي VPA بموارد أكثر من المتوفرة في نظام المجموعة. ونتيجة لذلك، يمنع هذا تعيين الجراب إلى عقدة وتشغيلها، لأن العقدة لا تحتوي على موارد كافية. يمكنك التغلب على هذا القيد عن طريق تعيين LimitRange إلى الحد الأقصى للموارد المتاحة لكل مساحة اسم، ما يضمن عدم طلب pods موارد أكثر من المحددة. بالإضافة إلى ذلك، يمكنك تعيين الحد الأقصى لتوصيات الموارد المسموح بها لكل جراب في كائن
VerticalPodAutoscaler
. يجب أن تدرك أن VPA لا يمكنه التغلب بشكل كامل على مشكلة مورد عقدة غير كافية. تم إصلاح نطاق الحد، ولكن يتم تغيير استخدام مورد العقدة ديناميكيا.لا نوصي باستخدام أداة التحجيم التلقائي للجراب العمودي مع التحجيم التلقائي للجراب الأفقي، والذي يتوسع استنادا إلى نفس مقاييس استخدام وحدة المعالجة المركزية والذاكرة.
يخزن VPA Recommender ما يصل إلى ثمانية أيام فقط من البيانات التاريخية.
لا يدعم VPA أحمال العمل المستندة إلى JVM بسبب الرؤية المحدودة لاستخدام الذاكرة الفعلية لحمل العمل.
لا يوصى أو مدعوما لتشغيل تنفيذ VPA الخاص بك جنبا إلى جنب مع هذا التنفيذ المدار ل VPA. وجود موصي إضافي أو مخصص مدعوم.
حاويات AKS Windows غير مدعومة.
قبل البدء
تقوم مجموعة AKS بتشغيل الإصدار 1.24 من Kubernetes والإصدارات الأحدث.
تم تثبيت الإصدار 2.52.0 من Azure CLI أو إصدار أحدث وتكوينه. قم بتشغيل
az --version
للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.kubectl
يجب أن يكون متصلا بالمجموعة التي تريد تثبيت VPA.
نظرة عامة على VPA
كائن واجهة برمجة التطبيقات
التحجيم التلقائي للجراب العمودي هو مورد واجهة برمجة التطبيقات في مجموعة واجهة برمجة تطبيقات التحجيم التلقائي Kubernetes. الإصدار المدعوم هو 0.11 والإصدارات الأحدث، ويمكن العثور عليه في مستودع مقياس Kubernetes التلقائي.
يتكون كائن VPA من ثلاثة مكونات:
Recommender - يراقب استهلاك الموارد الحالي والسابق، وبناء على ذلك، يوفر القيم الموصى بها لطلبات/حدود وحدة المعالجة المركزية والذاكرة للحاويات. يراقب Recommender محفوظات القياس وأحداث نفاد الذاكرة (OOM) ومواصفات توزيع VPA، ويقترح طلبات عادلة. من خلال توفير طلب مورد مناسب وتكوين حدود، يتم رفع الحدود وخفضها.
Updater - يتحقق من أي من القرون المدارة لديها مجموعة موارد صحيحة، وإذا لم يكن الأمر كذلك، فإنه يقتلها بحيث يمكن إعادة إنشائها بواسطة وحدات التحكم الخاصة بهم مع الطلبات المحدثة.
وحدة تحكم قبول VPA - تعين طلبات الموارد الصحيحة على وحدات الجراب الجديدة (إما تم إنشاؤها أو إعادة إنشائها بواسطة وحدة التحكم الخاصة بها بسبب نشاط المحدث).
وحدة تحكم قبول VPA
وحدة تحكم قبول VPA هو ثنائي يسجل نفسه على أنه إخطار على الويب للقبول المتغير. مع كل جراب تم إنشاؤه، فإنه يحصل على طلب من apiserver ويقيم ما إذا كان هناك تكوين VPA مطابق، أو العثور على واحد مطابق واستخدام التوصية الحالية لتعيين طلبات الموارد في pod.
تعمل وظيفة مستقلة خارج وحدة تحكم قبول VPA، تسمى overlay-vpa-cert-webhook-check
. overlay-vpa-cert-webhook-check
يتم استخدام لإنشاء الشهادات وتجديدها، وتسجيل وحدة تحكم قبول VPA ك MutatingWebhookConfiguration
.
للحصول على قابلية وصول عالية، تدعم AKS نسختين متماثلتين لوحدة تحكم القبول.
أوضاع عملية كائن VPA
يتم إدراج مورد Pod Autoscaler عمودي لكل وحدة تحكم تريد أن يكون لها متطلبات موارد حوسبة تلقائيا. هذا هو التوزيع الأكثر شيوعا. هناك أربعة أوضاع تعمل فيها VPAs:
Auto
- يعين VPA طلبات الموارد أثناء إنشاء الجراب ويحدث الحجيرات الموجودة باستخدام آلية التحديث المفضلة. حاليا،Auto
يعادلRecreate
، وهو أيضا الوضع الافتراضي. بمجرد توفر تحديث مجاني ("في الموضع") لطلبات الجراب، يمكن استخدامه كآلية التحديث المفضلة منAuto
قبل الوضع. عند استخدامRecreate
الوضع، يقوم VPA بإخلاء جراب إذا كان بحاجة إلى تغيير طلبات الموارد الخاصة به. قد يتسبب في إعادة تشغيل القرون كلها في وقت واحد، مما يتسبب في عدم تناسق التطبيق. يمكنك الحد من عمليات إعادة التشغيل والحفاظ على التناسق في هذه الحالة باستخدام PodDisruptionBudget.Recreate
- يعين VPA طلبات الموارد أثناء إنشاء الجراب بالإضافة إلى تحديث الجرابات الموجودة عن طريق إخلائها عندما تختلف الموارد المطلوبة بشكل كبير عن التوصية الجديدة (احترام موازنة تعطيل الجراب، إذا تم تعريفها). يجب استخدام هذا الوضع نادرا، فقط إذا كنت بحاجة إلى التأكد من إعادة تشغيل pods كلما تغير طلب المورد. وإلا،Auto
يفضل الوضع، الذي قد يستفيد من التحديثات الخالية من إعادة التشغيل بمجرد توفرها.Initial
- يعين VPA طلبات الموارد فقط أثناء إنشاء الجراب ولا يتغير أبدا بعد ذلك.Off
- لا يغير VPA متطلبات الموارد تلقائيا للجرابات. يتم حساب التوصيات ويمكن فحصها في كائن VPA.
نمط التوزيع أثناء تطوير التطبيق
نمط توزيع شائع موصى به لك إذا لم تكن معتادا على VPA هو تنفيذ الخطوات التالية أثناء تطوير التطبيق من أجل تحديد خصائص استخدام الموارد الفريدة الخاصة به، واختبار VPA للتحقق من أنه يعمل بشكل صحيح، والاختبار جنبا إلى جنب مع مكونات Kubernetes الأخرى لتحسين استخدام الموارد للمجموعة.
قم بتعيين UpdateMode = "إيقاف" في مجموعة الإنتاج الخاصة بك وقم بتشغيل VPA في وضع التوصية حتى تتمكن من اختبار VPA واكتساب الإلمام به. يمكن أن يتجنب UpdateMode = "إيقاف" إدخال تكوين خاطئ يمكن أن يسبب انقطاعا.
تحديد إمكانية المراقبة أولا عن طريق جمع بيانات تتبع الاستخدام الفعلي للموارد على مدى فترة زمنية معينة. يساعدك هذا على فهم سلوك وعلامات الأعراض أو المشكلات من موارد الحاوية والجراب المتأثرة بأحمال العمل التي تعمل عليها.
تعرف على بيانات المراقبة لفهم خصائص الأداء. استنادا إلى هذه الرؤى، قم بتعيين الطلبات/الحدود المطلوبة وفقا لذلك ثم في التوزيع أو الترقية التالية
قم بتعيين
updateMode
القيمة إلىAuto
أوRecreate
أوInitial
استنادا إلى متطلباتك.
توزيع VPA أو ترقيته أو تعطيله على نظام مجموعة
في هذا القسم، يمكنك نشر أو ترقية أو تعطيل التحجيم التلقائي للجراب العمودي على نظام المجموعة.
لتمكين VPA على نظام مجموعة جديد، استخدم
--enable-vpa
المعلمة مع الأمر az aks create .az aks create -n myAKSCluster -g myResourceGroup --enable-vpa
بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة.
اختياريا، لتمكين VPA على نظام مجموعة موجود، استخدم
--enable-vpa
مع الأمر [https://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update].az aks update -n myAKSCluster -g myResourceGroup --enable-vpa
بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة.
اختياريا، لتعطيل VPA على نظام مجموعة موجود، استخدم
--disable-vpa
مع الأمر [https://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update].az aks update -n myAKSCluster -g myResourceGroup --disable-vpa
بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة.
للتحقق من إنشاء pods Autoscaler Vertical Pod بنجاح، استخدم الأمر kubectl get .
kubectl get pods -n kube-system
يتضمن إخراج الأمر النتائج التالية الخاصة بوحدات جراب VPA. يجب أن تظهر pods حالة التشغيل .
NAME READY STATUS RESTARTS AGE
vpa-admission-controller-7867874bc5-vjfxk 1/1 Running 0 41m
vpa-recommender-5fd94767fb-ggjr2 1/1 Running 0 41m
vpa-updater-56f9bfc96f-jgq2g 1/1 Running 0 41m
اختبار تثبيت التحجيم التلقائي للجراب العمودي
تنشئ الخطوات التالية توزيعا مع جرابين، كل منهما يقوم بتشغيل حاوية واحدة تطلب 100 مللي ميليكور وتحاول استخدام أكثر قليلا من 500 مللي ميليكور. كما يتم إنشاء تكوين VPA، مشيرا إلى النشر. يراقب VPA سلوك الحجيرات، وبعد حوالي خمس دقائق، يتم تحديثها بطلب وحدة معالجة مركزية أعلى.
أنشئ ملفا باسم
hamster.yaml
وانسخه في البيان التالي لمثال التحجيم التلقائي للجراب العمودي من مستودع GitHub kubernetes/autoscaler .hamster.yaml
انشر مثال التحجيم التلقائي للجراب العمودي باستخدام الأمر kubectl apply وحدد اسم بيان YAML الخاص بك:kubectl apply -f hamster.yaml
بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة.
قم بتشغيل الأمر kubectl get التالي للحصول على pods من تطبيق مثال hamster:
kubectl get pods -l app=hamster
يشبه إخراج المثال ما يلي:
hamster-78f9dcdd4c-hf7gk 1/1 Running 0 24s hamster-78f9dcdd4c-j9mc7 1/1 Running 0 24s
استخدم الأمر kubectl describe على أحد pods لعرض وحدة المعالجة المركزية وحجز الذاكرة. استبدل "exampleID" بأحد معرفات الجراب التي تم إرجاعها في الإخراج من الخطوة السابقة.
kubectl describe pod hamster-exampleID
إخراج المثال هو مقتطف من المعلومات حول نظام المجموعة:
hamster: Container ID: containerd:// Image: k8s.gcr.io/ubuntu-slim:0.1 Image ID: sha256: Port: <none> Host Port: <none> Command: /bin/sh Args: -c while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done State: Running Started: Wed, 28 Sep 2022 15:06:14 -0400 Ready: True Restart Count: 0 Requests: cpu: 100m memory: 50Mi Environment: <none>
يحتوي الجراب على 100 مللي وحدة معالجة و50 ميبيبايت من الذاكرة المحجوزة في هذا المثال. بالنسبة لهذا التطبيق النموذجي، يحتاج الجراب إلى أقل من 100 مللي وحدة معالجة مركزية لتشغيله، لذلك لا تتوفر سعة وحدة المعالجة المركزية. تحتفظ القرون أيضا بذاكرة أقل بكثير مما هو مطلوب. يقوم توزيع Vertical Pod Autoscaler vpa-recommender بتحليل الحجيرات التي تستضيف تطبيق hamster لمعرفة ما إذا كانت متطلبات وحدة المعالجة المركزية والذاكرة مناسبة. إذا كانت هناك حاجة إلى التعديلات، يقوم محدث vpa بإعادة توحيد pods مع القيم المحدثة.
انتظر حتى يقوم vpa-updater بتشغيل جراب هامستر جديد، والذي يجب أن يستغرق بضع دقائق. يمكنك مراقبة pods باستخدام الأمر kubectl get .
kubectl get --watch pods -l app=hamster
عند بدء تشغيل جراب هامستر جديد، وصف الجراب الذي يقوم بتشغيل الأمر وصف kubectl وعرض وحدة المعالجة المركزية المحدثة وحجوزات الذاكرة.
kubectl describe pod hamster-<exampleID>
إخراج المثال هو مقتطف من المعلومات التي تصف pod:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
في الإخراج السابق، يمكنك أن ترى أن حجز وحدة المعالجة المركزية زاد إلى 587 مللي ثانية، وهو أكثر من خمسة أضعاف القيمة الأصلية. زادت الذاكرة إلى 262144 كيلوبايت، أي حوالي 250 ميجابايت، أو خمسة أضعاف القيمة الأصلية. كان هذا الجراب غير مزود بالموارد الكافية، وصحح التحجيم التلقائي للجراب العمودي التقدير بقيمة أكثر ملاءمة.
لعرض التوصيات المحدثة من VPA، قم بتشغيل الأمر kubectl describe لوصف معلومات مورد hamster-vpa.
kubectl describe vpa/hamster-vpa
إخراج المثال هو مقتطف من المعلومات حول استخدام الموارد:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
تعيين طلبات Pod Autoscaler
يستخدم VerticalPodAutoscaler
التحجيم التلقائي للجراب العمودي الكائن لتعيين طلبات الموارد تلقائيا على pods عند تعيين updateMode إلى Auto. يمكنك تعيين قيمة مختلفة اعتمادا على متطلباتك واختبارك. في هذا المثال، يتم تعيين updateMode إلى Recreate
.
قم بتمكين VPA لنظام المجموعة الخاص بك عن طريق تشغيل الأمر التالي. استبدل اسم
myAKSCluster
نظام المجموعة باسم مجموعة AKS واستبدلmyResourceGroup
باسم مجموعة الموارد التي تتم استضافة نظام المجموعة فيها.az aks update -n myAKSCluster -g myResourceGroup --enable-vpa
قم بإنشاء ملف باسم
azure-autodeploy.yaml
، وانسخه في البيان التالي.apiVersion: apps/v1 kind: Deployment metadata: name: vpa-auto-deployment spec: replicas: 2 selector: matchLabels: app: vpa-auto-deployment template: metadata: labels: app: vpa-auto-deployment spec: containers: - name: mycontainer image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
يصف هذا البيان التوزيع الذي يحتوي على جرابين. تحتوي كل حاوية على حاوية واحدة تطلب 100 مللي وحدة معالجة مركزية و50 ميجابايت من الذاكرة.
إنشاء pod باستخدام الأمر kubectl create ، كما هو موضح في المثال التالي:
kubectl create -f azure-autodeploy.yaml
بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة.
قم بتشغيل الأمر kubectl get التالي للحصول على pods:
kubectl get pods
يشبه الإخراج المثال التالي الذي يوضح اسم وحالة pods:
NAME READY STATUS RESTARTS AGE vpa-auto-deployment-54465fb978-kchc5 1/1 Running 0 52s vpa-auto-deployment-54465fb978-nhtmj 1/1 Running 0 52s
أنشئ ملفا باسم
azure-vpa-auto.yaml
، وانسخ في البيان التالي الذي يصفVerticalPodAutoscaler
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: vpa-auto spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: vpa-auto-deployment updatePolicy: updateMode: "Recreate"
targetRef.name
تحدد القيمة أن أي جراب يتم التحكم فيه بواسطة نشر يسمىvpa-auto-deployment
ينتمي إلىVerticalPodAutoscaler
.updateMode
تعني قيمةRecreate
أن وحدة تحكم التحجيم التلقائي للجراب العمودي يمكنها حذف جراب، وضبط طلبات وحدة المعالجة المركزية والذاكرة، ثم إنشاء جراب جديد.تطبيق البيان على نظام المجموعة باستخدام الأمر kubectl apply :
kubectl create -f azure-vpa-auto.yaml
انتظر بضع دقائق، واعرض pods قيد التشغيل مرة أخرى عن طريق تشغيل الأمر kubectl get التالي:
kubectl get pods
يشبه الإخراج المثال التالي الذي يوضح تغيير أسماء الجراب وحالة pods:
NAME READY STATUS RESTARTS AGE vpa-auto-deployment-54465fb978-qbhc4 1/1 Running 0 2m49s vpa-auto-deployment-54465fb978-vbj68 1/1 Running 0 109s
احصل على معلومات مفصلة حول أحد pods قيد التشغيل باستخدام الأمر Kubectl get . استبدل
podName
باسم أحد pods التي قمت باستردادها في الخطوة السابقة.kubectl get pod podName --output yaml
يشبه الإخراج المثال التالي، الذي يوضح أن وحدة تحكم التحجيم التلقائي للجراب العمودي قد زادت طلب الذاكرة إلى 262144k وطلب وحدة المعالجة المركزية إلى 25 مللي وحدة معالجة مركزية.
apiVersion: v1 kind: Pod metadata: annotations: vpaObservedContainers: mycontainer vpaUpdates: 'Pod resources updated by vpa-auto: container 0: cpu request, memory request' creationTimestamp: "2022-09-29T16:44:37Z" generateName: vpa-auto-deployment-54465fb978- labels: app: vpa-auto-deployment spec: containers: - args: - -c - while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done command: - /bin/sh image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine imagePullPolicy: IfNotPresent name: mycontainer resources: requests: cpu: 25m memory: 262144k
للحصول على معلومات مفصلة حول التحجيم التلقائي للجراب العمودي وتوصياته لوحدة المعالجة المركزية والذاكرة، استخدم الأمر kubectl get :
kubectl get vpa vpa-auto --output yaml
يشبه الإخراج المثال التالي:
recommendation: containerRecommendations: - containerName: mycontainer lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k uncappedTarget: cpu: 25m memory: 262144k upperBound: cpu: 230m memory: 262144k
تظهر النتائج السمة
target
التي تحدد أنه لتشغيل الحاوية على النحو الأمثل، لا تحتاج إلى تغيير وحدة المعالجة المركزية أو هدف الذاكرة. قد تختلف نتائجك حيث تكون توصية وحدة المعالجة المركزية والذاكرة الهدف أعلى.يستخدم
lowerBound
التحجيم التلقائي للجراب العمودي السمتين وupperBound
لتحديد ما إذا كنت تريد حذف جراب واستبداله بجراب جديد. إذا كانت الحاوية تحتوي على طلبات أقل من الحد السفلي أو أكبر من الحد العلوي، فإن التحجيم التلقائي للجراب العمودي يحذف الجراب ويستبدله بجراب يلبي السمة الهدف.
أداة التوصية الإضافية لأداة التحجيم التلقائي للجراب العمودي
في VPA، أحد المكونات الأساسية هو Recommender. ويوفر توصيات لاستخدام الموارد استنادا إلى استهلاك الموارد في الوقت الحقيقي. تنشر AKS موصيا عندما تقوم مجموعة بتمكين VPA. يمكنك نشر موصي مخصص أو موصي إضافي بنفس الصورة مثل الصورة الافتراضية. تتمثل فائدة وجود موصي مخصص في أنه يمكنك تخصيص منطق التوصية الخاص بك. باستخدام موصي إضافي، يمكنك تقسيم VPAs إلى العديد من التوصيين إذا كان هناك العديد من كائنات VPA.
المثال التالي هو موصي إضافي يمكنك تطبيقه على نظام مجموعة AKS الحالي. ثم تقوم بتكوين كائن VPA لاستخدام أداة التوصية الإضافية.
أنشئ ملفا باسم
extra_recommender.yaml
وانسخه في البيان التالي:apiVersion: apps/v1 kind: Deployment metadata: name: extra-recommender namespace: kube-system spec: replicas: 1 selector: matchLabels: app: extra-recommender template: metadata: labels: app: extra-recommender spec: serviceAccountName: vpa-recommender securityContext: runAsNonRoot: true runAsUser: 65534 # nobody containers: - name: recommender image: registry.k8s.io/autoscaling/vpa-recommender:0.13.0 imagePullPolicy: Always args: - --recommender-name=extra-recommender resources: limits: cpu: 200m memory: 1000Mi requests: cpu: 50m memory: 500Mi ports: - name: prometheus containerPort: 8942
extra-recomender.yaml
انشر مثال التحجيم التلقائي للجراب العمودي باستخدام الأمر kubectl apply وحدد اسم بيان YAML الخاص بك.kubectl apply -f extra-recommender.yaml
بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة.
أنشئ ملفا باسم
hamnster_extra_recommender.yaml
وانسخه في البيان التالي:apiVersion: "autoscaling.k8s.io/v1" kind: VerticalPodAutoscaler metadata: name: hamster-vpa spec: recommenders: - name: 'extra-recommender' targetRef: apiVersion: "apps/v1" kind: Deployment name: hamster updatePolicy: updateMode: "Auto" resourcePolicy: containerPolicies: - containerName: '*' minAllowed: cpu: 100m memory: 50Mi maxAllowed: cpu: 1 memory: 500Mi controlledResources: ["cpu", "memory"] --- apiVersion: apps/v1 kind: Deployment metadata: name: hamster spec: selector: matchLabels: app: hamster replicas: 2 template: metadata: labels: app: hamster spec: securityContext: runAsNonRoot: true runAsUser: 65534 # nobody containers: - name: hamster image: k8s.gcr.io/ubuntu-slim:0.1 resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: - "-c" - "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"
إذا
memory
لم يتم تحديد فيcontrolledResources
، فإن Recommender لا يستجيب لأحداث OOM. في هذه الحالة، تقوم بإعداد وحدة المعالجة المركزية فقط فيcontrolledValues
.controlledValues
يسمح لك باختيار ما إذا كنت تريد تحديث طلبات موارد الحاوية حسبRequestsOnly
الخيار، أو كل من طلبات الموارد والحدود باستخدامRequestsAndLimits
الخيار . القيمة الافتراضية هيRequestsAndLimits
. إذا كنت تستخدمRequestsAndLimits
الخيار ، يتم حساب الطلبات بناء على الاستخدام الفعلي، ويتم حساب الحدود استنادا إلى طلب الحاوية الحالية ونسبة الحد.على سبيل المثال، إذا بدأت بجراب يطلب اثنين من وحدات المعالجة المركزية ويحد من 4 وحدات معالجة مركزية، فإن VPA يعين دائما الحد ليكون ضعف الطلبات. ينطبق نفس المبدأ على الذاكرة. عند استخدام
RequestsAndLimits
الوضع، يمكن أن يكون بمثابة مخطط لطلبات موارد التطبيق الأولي وحدوده.
يمكنك تبسيط كائن VPA باستخدام الوضع التلقائي وتوصيات الحوسبة لكل من وحدة المعالجة المركزية والذاكرة.
hamster_extra-recomender.yaml
انشر المثال باستخدام الأمر kubectl apply وحدد اسم بيان YAML الخاص بك.kubectl apply -f hamster_customized_recommender.yaml
انتظر حتى يقوم vpa-updater بتشغيل جراب هامستر جديد، والذي يجب أن يستغرق بضع دقائق. يمكنك مراقبة pods باستخدام الأمر kubectl get .
kubectl get --watch pods -l app=hamster
عند بدء تشغيل جراب هامستر جديد، وصف الجراب الذي يقوم بتشغيل الأمر وصف kubectl وعرض وحدة المعالجة المركزية المحدثة وحجوزات الذاكرة.
kubectl describe pod hamster-<exampleID>
إخراج المثال هو مقتطف من المعلومات التي تصف pod:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
لعرض التوصيات المحدثة من VPA، قم بتشغيل الأمر kubectl describe لوصف معلومات مورد hamster-vpa.
kubectl describe vpa/hamster-vpa
إخراج المثال هو مقتطف من المعلومات حول استخدام الموارد:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none> Spec: recommenders: Name: customized-recommender
استكشاف الأخطاء وإصلاحها
لتشخيص المشكلات المتعلقة بتثبيت VPA، قم بتنفيذ الخطوات التالية.
تحقق مما إذا كانت كافة مكونات النظام قيد التشغيل باستخدام الأمر التالي:
kubectl --namespace=kube-system get pods|grep vpa
يجب أن يسرد الإخراج ثلاثة pods - التوصية والمحدث ووحدة التحكم في القبول مع الحالة التي تظهر حالة Running
.
تأكد من تسجيل مكونات النظام لأي أخطاء. لكل من pods التي تم إرجاعها بواسطة الأمر السابق، قم بتشغيل الأمر التالي:
kubectl --namespace=kube-system logs [pod name] | grep -e '^E[0-9]\{4\}'
تأكد من إنشاء تعريف المورد المخصص عن طريق تشغيل الأمر التالي:
kubectl get customresourcedefinition | grep verticalpodautoscalers
الخطوات التالية
توضح لك هذه المقالة كيفية قياس استخدام الموارد تلقائيا، مثل وحدة المعالجة المركزية والذاكرة، لعقد نظام المجموعة لمطابقة متطلبات التطبيق.
يمكنك أيضًا استخدام مقياس تلقائي للقرن الأفقي لضبط عدد القرون التي تقوم بتشغيل التطبيق تلقائيًّا. للحصول على خطوات حول استخدام مقياس تلقائي للقرن الأفقي، راجع تطبيقات المقياس في AKS.
راجع التحجيم التلقائي للجراب العمودي [مرجع واجهة برمجة التطبيقات] لمعرفة المزيد حول تعريفات كائنات VPA ذات الصلة.