مشاركة عبر


تغيير حجم تجمعات العقد في خدمةAzure Kubernetes (AKS)

قد ترغب في تغيير حجم الأجهزة الظاهرية (VMs) لاستيعاب عدد متزايد من عمليات التوزيع أو لتشغيل حمل عمل أكبر. تغيير حجم مثيلات AKS مباشرة غير مدعوم عند استخدام مجموعات مقياس الجهاز الظاهري في AKS، كما هو موضح في نهج الدعم ل AKS:

تظهر عُقد وكيل AKS في مدخل Azure كموارد Azure IaaS عادية. ولكن يتم توزيع هذه الأجهزة الظاهرية في مجموعة موارد Azure المخصصة (عادةً ما تكون مسبوقة بـ MC_*). لا يمكنك إجراء تخصيصات مباشرة لهذه العقد باستخدام واجهات برمجة تطبيقات IaaS أو مواردها. لن تستمر أي تغييرات مخصصة لم يتم إجراؤها عبر واجهة برمجة تطبيقات AKS من خلال الترقية أو التوسع أو التحديث أو إعادة التشغيل.

في هذه المقالة، ستتعرف على الطريقة الموصى بها لتغيير حجم تجمع العقد عن طريق إنشاء تجمع عقد جديد بحجم SKU المطلوب، وتطويق العقد الموجودة واستنزافها، ثم إزالة تجمع العقد الموجودة.

هام

هذه الطريقة خاصة بمجموعات AKS المستندة إلى مجموعات مقياس الجهاز الظاهري. عند استخدام تجمعات العقد المستندة إلى الأجهزة الظاهرية، يمكنك بسهولة تحديث أحجام الأجهزة الظاهرية في تجمع عقد موجود باستخدام أمر Azure CLI واحد والحصول على أحجام متعددة للأجهزة الظاهرية في نفس تجمع العقد. لمزيد من المعلومات، راجع وثائق تجمعات عقدة الأجهزة الظاهرية.

إنشاء تجمع عقدة جديد مع SKU المطلوب

إشعار

كل كتلة من AKS يجب أن تحتوي على الأقل على مجموعة عقدة نظام مع على الأقل عقدة واحدة. في هذا المثال، نستخدم a --mode of System لإضافة تجمع عقدة النظام لاستبدال تجمع عقدة النظام الذي نريد تغيير حجمه. يمكنك تحديث وضع تجمع العقد في أي وقت. يمكنك أيضا إضافة تجمع عقدة مستخدم عن طريق التعيين --mode على.User

عند تغيير الحجم، تأكد من مراعاة جميع متطلبات حمل العمل، مثل مناطق التوفر، وتكوين تجمع عقدة VMSS وفقا لذلك. قد تحتاج إلى تعديل الأمر التالي ليناسب احتياجاتك على أفضل نحو. للحصول على قائمة كاملة بخيارات التكوين، راجع az aks nodepool add الصفحة المرجعية.

  1. قم بإنشاء تجمع عقد جديد باستخدام الأمر az aks nodepool add . في هذا المثال، نقوم بإنشاء تجمع عقد جديد، mynodepoolمع ثلاث عقد ووحدة SKU للجهاز Standard_DS3_v2 الظاهري لتحل محل تجمع عقد موجود، nodepool1يحتوي على وحدة SKU للجهاز Standard_DS2_v2 الظاهري.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3 \
        --node-vm-size Standard_DS3_v2 \
        --mode System \
        --no-wait
    

    يستغرق إنشاء تجمع العقدة الجديد بضع دقائق.

  2. احصل على حالة تجمع العقد الجديد باستخدام الأمر kubectl get nodes .

    kubectl get nodes
    

    يجب أن يشبه الإخراج المثال التالي ، حيث يعرض كلا من تجمع mynodepool العقد الجديد وتجمع nodepool1العقد الحالي:

    NAME                                 STATUS   ROLES   AGE   VERSION
    aks-mynodepool-98765432-vmss000000   Ready    agent   23m   v1.21.9
    aks-mynodepool-98765432-vmss000001   Ready    agent   23m   v1.21.9
    aks-mynodepool-98765432-vmss000002   Ready    agent   23m   v1.21.9
    aks-nodepool1-12345678-vmss000000    Ready    agent   10d   v1.21.9
    aks-nodepool1-12345678-vmss000001    Ready    agent   10d   v1.21.9
    aks-nodepool1-12345678-vmss000002    Ready    agent   10d   v1.21.9
    

تطويق العقد الموجودة

علامات التطويق على العقد المحددة على أنها غير قابلة للتحجيم وتمنع إضافة المزيد من الجرابات إلى العقد.

  1. احصل على أسماء العقد التي تريد تطويقها باستخدام الأمر kubectl get nodes .

    kubectl get nodes
    

    يجب أن يشبه الإخراج المثال التالي ، والذي يعرض العقد في تجمع nodepool1 العقد الحالي الذي تريد تطويقه:

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-12345678-vmss000000   Ready    agent   7d21h   v1.21.9
    aks-nodepool1-12345678-vmss000001   Ready    agent   7d21h   v1.21.9
    aks-nodepool1-12345678-vmss000002   Ready    agent   7d21h   v1.21.9
    
  2. قم بتطويق العقد الموجودة باستخدام kubectl cordon الأمر ، وتحديد العقد المطلوبة في قائمة مفصولة بمسافات. على سبيل المثال:

    kubectl cordon aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002
    

    يجب أن يشبه الإخراج الخاص بك إخراج المثال التالي ، مما يوضح أن العقد مطوقة:

    node/aks-nodepool1-12345678-vmss000000 cordoned
    node/aks-nodepool1-12345678-vmss000001 cordoned
    node/aks-nodepool1-12345678-vmss000002 cordoned
    

استنزاف العقد الموجودة

هام

لتصريف العقد بنجاح وإخلاء القرون قيد التشغيل، تأكد من أن أي PodDisruptionBudgets (PDBs) تسمح بنقل نسخة متماثلة واحدة على الأقل من pod في كل مرة. خلاف ذلك ، تفشل عملية التصريف / الإخلاء. للتحقق من ذلك، يمكنك التشغيل kubectl get pdb -A والتحقق من ALLOWED DISRUPTIONS أنه على الأقل 1 أو أعلى.

عند استنزاف العقد ، يتم إخلاء القرون التي تعمل عليها وإعادة إنشائها على العقد الأخرى القابلة للجدولة.

  1. قم بتصريف العقد الموجودة باستخدام kubectl drain الأمر مع --ignore-daemonsets العلامات وتحديد --delete-emptydir-data العقد المطلوبة في قائمة مفصولة بمسافة. على سبيل المثال:

    هام

    مطلوب استخدام --delete-emptydir-data لإخلاء AKS التي تم إنشاؤها coredns والجرابات metrics-server. إذا لم تستخدم هذه العلامة، فستظهر لك خطأ. لمزيد من المعلومات، راجع الوثائق على emptydir.

    kubectl drain aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002 --ignore-daemonsets --delete-emptydir-data
    
  2. بعد انتهاء عملية التصريف ، يجب تشغيل جميع الكبسولات (باستثناء الكبسولات التي تتحكم فيها مجموعات الديمون) على تجمع العقدة الجديد. يمكنك التحقق من ذلك باستخدام kubectl get pods الأمر .

    kubectl get pods -o wide -A
    

استكشاف مشكلات إخلاء الجراب وإصلاحها

قد تواجه الخطأ التالي عند استنزاف العقد:

Error when evicting pods/[podname] -n [namespace] (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.

بشكل افتراضي، تحتوي نظام المجموعة الخاص بك على ميزانيات تعطيل الجراب المدارة بواسطة AKS (مثل coredns-pdb أو ) مع ملف konnectivity-agentMinAvailable.1 على سبيل المثال ، إذا كان هناك جراب coredns قيد التشغيل ، فيمكن تعطيل واحد فقط في كل مرة. بينما يتم إعادة إنشاء أحدهم وغير متوفر ، لا يمكن إخلاء الكبسولة الأخرى coredns بسبب ميزانية تعطيل الكبسولة. يتم حل هذه المشكلة من تلقاء نفسها بعد جدولة الجراب الأولي coredns وتشغيله ، مما يسمح بإخلاء الجراب الثاني وإعادة إنشائه بشكل صحيح.

تلميح

ضع في اعتبارك تصريف العقد واحدة تلو الأخرى للحصول على تجربة إخلاء أكثر سلاسة ولتجنب الاختناق. لمزيد من المعلومات، راجع:

إزالة تجمع العقدة الموجود

هام

عند حذف تجمع عقدة، لا يقوم AKS بإجراء التطويق والاستنفاذ. لتقليل تعطيل إعادة جدولة الجرابات التي تعمل حاليا على تجمع العقدة التي تخطط لحذفها، قم بإجراء طوق وتصريف جميع العقد في تجمع العقدة قبل الحذف.

  1. احذف تجمع العقدة الأصلي باستخدام الأمر az aks nodepool delete .

    az aks nodepool delete \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name nodepool1
    
  2. تحقق من أن نظام مجموعة AKS الخاص بك يحتوي فقط على تجمع العقدة الجديد مع التطبيقات والجراب التي تعمل بشكل صحيح باستخدام الأمر kubectl get nodes .

    kubectl get nodes
    

    يجب أن يشبه الإخراج الخاص بك مثال الإخراج التالي ، حيث يعرض فقط تجمع mynodepoolالعقدة الجديد:

    NAME                                 STATUS   ROLES   AGE   VERSION
    aks-mynodepool-98765432-vmss000000   Ready    agent   63m   v1.21.9
    aks-mynodepool-98765432-vmss000001   Ready    agent   63m   v1.21.9
    aks-mynodepool-98765432-vmss000002   Ready    agent   63m   v1.21.9
    

الخطوات التالية

بعد تغيير حجم تجمع عقدة عن طريق التطويق والاستنفاذ تعرف على المزيد بشأن استخدام تجمعات عقد متعددة.