تصلب العقدة (معاينة) في خدمة Azure Kubernetes ‏(AKS)

تعد تصلب العقدة ميزة اشتراك لتجمعات عقد Linux التي تحمي استقرار العقدة عندما تضع أحمال العمل العقد تحت وحدة المعالجة المركزية أو الذاكرة أو ضغط القرص. عند تمكين تصلب العقدة على نظام مجموعة، تغير AKS كيفية حجز كل عقدة وفرض الموارد لمكونات Kubernetes والخدمات المضيفة، وكيف يقوم kubelet بإخلاء القرون عند انخفاض الموارد.

توضح هذه المقالة تغييرات تصلب العقدة، وتقارن الإعدادات الافتراضية المتصلبة مع إعدادات AKS الافتراضية القياسية، وتوضح لك كيفية تمكين الميزة والتحقق منها وتخصيصها وتعطيلها.

مهم

تتوفر ميزات معاينة AKS على أساس الخدمة الذاتية والاشتراك. يتم توفير المعاينات "كما هي" و"كما هي متوفرة"، ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. تتم تغطية معاينات AKS جزئيًا بواسطة دعم العملاء على أساس بذل أفضل الجهود. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:

فوائد تصلب العقدة

في العقد المزدحمة أو الاندفاعية، يمكن أن تستهلك أحمال العمل الموارد التي يحتاجها kubelet ووقت تشغيل الحاوية وخدمات المضيف. عند حدوث ذلك، يمكن أن تصبح العقد غير مستجيبة، أو الإبلاغ عن NotReady حالة، أو إنهاء القرون فجأة. يقلل تصلب العقدة من هذه المخاطر بالطرق التالية:

  • الحجوزات المفروضة: بشكل افتراضي، تستخدم AKS قيم kube المحجوزة فقط لحساب مقدار السعة التي يمكن للمجدول تخصيصها إلى pods. باستخدام تصلب العقدة، يفرض kubelet أيضا سعة محجوزة من kube ومحجوزة من قبل النظام من خلال مجموعات التحكم في Linux (cgroups). يتم تشغيل kubelet والحاويات في مجموعة cgroup مخصصة kubereserved.slice ، بحيث يحتفظون بمشاركة وحدة المعالجة المركزية المحجوزة والذاكرة حتى عندما تشبع القرون العقدة.
  • القدرة المخصصة للخدمات المضيفة: يضيف تصلب العقدة تخصيصا محجوزا من قبل النظام لخدمات نظام التشغيل المضيف، والتي تعمل في system.slice.
  • المزيد من غرفة الذاكرة: حد الإخلاء الثابت لمقاييس الذاكرة المتوفرة مع ذاكرة العقدة، لذلك يقوم kubelet بإخلاء القرون قبل تشغيل العقدة منخفضة للغاية على الذاكرة.
  • الإخلاء بأمان: تسمح حدود الإخلاء المبدئي ل kubelet بإخلاء القرون بأمان، مع فترة سماح الإنهاء، عندما تكون الذاكرة أو مساحة القرص منخفضة. الإخلاء الثابت، الذي ينهي القرون على الفور، ثم يعمل كحل أخير.
  • الحجوزات التي تتوسع مع كثافة الجراب: يزيد حساب الذاكرة المحجوزة kube مع الحد الأقصى لعدد pods لكل عقدة، والذي يمثل kubelet والنفقات العامة في حاويات لتشغيل المزيد من الحجيرات.

ما التغييرات عند تمكين تصلب العقدة

تقارن الجداول التالية الإعدادات الافتراضية القياسية لعقد Linux التي تقوم بتشغيل Kubernetes 1.29 أو أحدث مع الإعدادات الافتراضية التي تطبقها AKS عند تمكين تصلب العقدة.

حجوزات الموارد

الإعدادات بدون تصلب العقدة مع تصلب العقدة
وحدة المعالجة المركزية المحجوزة من Kube استنادا إلى عدد الذاكرات الأساسية لوحدة المعالجة المركزية. لمزيد من المعلومات، راجع حجوزات وحدة المعالجة المركزية. بدون تغيير
الذاكرة المحجوزة على Kube min(20 × maxPods + 50, 25% of node memory) MiB min(35 × maxPods + max(250, 2% of node memory), 25% of node memory) MiB
معرفات العملية المحجوزة في Kube (PIDs) 1000 غير محجوز
وحدة المعالجة المركزية المحجوزة من قبل النظام None 100m
الذاكرة المحجوزة من قبل النظام None 200 ميجابايت، بالإضافة إلى 100 ميجابايت لكل ذاكرة عقدة كاملة تبلغ 32 جيبي بايت، بالإضافة إلى 100 ميجابايت للمجموعات التي تستخدم Azure CNI
التخزين المؤقت المحجوز من قبل النظام None 1Gi

حدود الإخلاء

الإعدادات بدون تصلب العقدة مع تصلب العقدة
الإخلاء الثابت: memory.available 100Mi 250Mi للعقد ذات الذاكرة 8 غيغابايت أو أقل، 375Mi للعقد التي يزيد حجمها عن 8 غيغابايت وأقل من 32 غيغابايت، وللعقد 512Mi ذات 32 غيغابايت أو أكثر
الإخلاء الثابت: nodefs.available و nodefs.inodesFree 10% و5% بدون تغيير
الإخلاء الثابت: pid.available 2000 غير معين
الإخلاء المبدئي: memory.available None 500Mi، 750Miأو 1Gi، باستخدام نفس مستويات ذاكرة العقدة مثل الإخلاء الثابت، مع فترة سماح مدتها 30 ثانية
الإخلاء المبدئي: nodefs.available و nodefs.inodesFree None 12% و 7%، لكل منهما فترة سماح مدتها دقيقان
الحد الأقصى لفترة السماح لإنهاء الجراب أثناء الإخلاء المبدئي غير معين 60 ثانية

فرض Cgroup

الإعدادات بدون تصلب العقدة مع تصلب العقدة
العقدة المفروضة القابلة للتخصيص pods pods وkube-reserved وsystem-reserved
Kubelet وcgroup الحاوية system.slice، بدون حدود kubereserved.slice، مع ذاكرة محدودة بالذاكرة المحجوزة kube ومشاركة وحدة المعالجة المركزية تناسب وحدة المعالجة المركزية المحجوزة kube
مجموعة خدمات المضيف system.slice، بدون حدود system.slice، مع ذاكرة محدودة بالذاكرة المحجوزة للنظام ومشاركة وحدة المعالجة المركزية متناسبة مع وحدة المعالجة المركزية المحجوزة من قبل النظام

نظرا لأن تصلب العقدة يحتفظ بمزيد من السعة، فإن العقد تبلغ عن سعة أقل قابلة للتخصيص للقرون. على سبيل المثال، على عقدة تحتوي على 4 وحدات معالجة مركزية ظاهرية و16 غيغابايت من الذاكرة التي تستخدم Azure CNI، يؤدي تمكين تصلب العقدة إلى تقليل السعة القابلة للتخصيص كما يلي:

  • مع الحد الأقصى الافتراضي البالغ 250 حاوية لكل عقدة، بحوالي 570 ميجابايت من الذاكرة، و100 مللي كورت من وحدة المعالجة المركزية، و1 جيبي بايت من التخزين المؤقت.
  • بحد أقصى 30 حاوية لكل عقدة، بحوالي 1.3 جيبي بايت من الذاكرة، و100 مللي كورت من وحدة المعالجة المركزية، و1 غيغابايت من التخزين المؤقت.

لا تقلل عتبات الإخلاء المبدئي من السعة القابلة للتخصيص. لا تتغير إلا عندما يبدأ kubelet في إخلاء القرون.

الاعتبارات

ضع الاعتبارات التالية في الاعتبار قبل تمكين تصلب العقدة:

  • يمكنك تمكين تصلب العقدة على مستوى نظام المجموعة، وينطبق على جميع تجمعات عقد Linux في نظام المجموعة. لا يمكنك تمكينه لتجمعات العقد الفردية، ولا يؤثر على تجمعات العقد Windows.
  • تبلغ العقد عن سعة أقل قابلة للتخصيص، لذلك قد لا تتناسب وحدات الجراب التي تتناسب مع عقدة قبل تمكين تصلب العقدة بعد ذلك. راجع طلبات موارد الجراب وأحجام تجمع العقدة.
  • خدمات المضيف في system.slice مشاركة حد الذاكرة الثابتة يساوي الذاكرة المحجوزة من قبل النظام. إذا قمت بتشغيل عواملك الخاصة على العقد كخدمات نظامية، مثل عوامل الأمان أو المراقبة أو إعادة توجيه السجل، فإن هؤلاء الوكلاء يحسبون مقابل هذا الحد. تحقق من صحة استخدام الذاكرة والاستقرار قبل استخدام تصلب العقدة في الإنتاج.
  • تتجاوز القيم التي قمت بتعيينها في تكوين kubelet المخصص لتجمع العقدة الإعدادات الافتراضية المقابلة لتصلب العقدة. لمزيد من المعلومات، راجع تخصيص إعدادات تصلب العقدة.
  • إذا قمت بتعطيل تصلب العقدة لاحقا، تحتفظ تجمعات العقد الموجودة بإعدادات الإخلاء الناعمة المتصلبة، حتى بعد إعادة تصور العقد الخاصة بها. لإزالة هذه الإعدادات، تحتاج إلى إنشاء تجمعات عقد جديدة. لمزيد من المعلومات، راجع تعطيل تصلب العقدة.
  • قد تتغير القيم الافتراضية أثناء معاينة الميزة. ابدأ بمجموعة غير إنتاجية، وتحقق من صحة أحمال العمل الخاصة بك في ظل ظروف ضغط العقدة التمثيلية.

المتطلبات المسبقه

  • اشتراك في Azure. إذا لم يكن لديك واحد، أنشئ حسابا مجاني.
  • نظام مجموعة AKS مع تجمعات عقدة Linux، أو أذونات لإنشاء واحدة.
  • ملحق aks-preview Azure CLI وعلامة الميزةCustomNodeConfigPreview، كما هو موضح في الأقسام التالية.

تثبيت aks-preview امتداد Azure CLI

  1. تثبيت الملحق aks-preview باستخدام az extension add الأمر .

    az extension add --name aks-preview
    
  2. قم بالتحديث إلى أحدث إصدار من الملحق باستخدام az extension update الأمر .

    az extension update --name aks-preview
    

تسجيل CustomNodeConfigPreview العلامات المميزة

  1. سجل CustomNodeConfigPreview علم الميزة باستخدام az feature register الأمر.

    az feature register --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"
    

    يستغرق الأمر بضع دقائق حتى تظهر الحالة مُسجل.

  2. تحقق من حالة التسجيل باستخدام az feature show الأمر.

    az feature show --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"
    
  3. عندما تظهر الحالة مسجلة، قم بتحديث تسجيل Microsoft. مزود موارد ContainerService باستخدام az provider register الأمر.

    az provider register --namespace "Microsoft.ContainerService"
    

تمكين تصلب العقدة

أثناء المعاينة، لا يتم تمكين تصلب العقدة بشكل افتراضي.

تمكين تصلب العقدة على نظام مجموعة جديد

إنشاء نظام مجموعة مع تمكين تصلب العقدة az aks create باستخدام الأمر مع المعلمة --enable-node-hardening .

يتطلب هذا الأمر الملحق aks-preview وعلامة الميزة CustomNodeConfigPreview . لمزيد من المعلومات، راجع المتطلبات الأساسية.

az aks create \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --enable-node-hardening \
    --generate-ssh-keys

لتأكيد التغيير، راجع التحقق من إعدادات تصلب العقدة.

تمكين تصلب العقدة على نظام مجموعة موجود

تمكين تصلب العقدة على نظام مجموعة موجود باستخدام az aks update الأمر مع المعلمة --enable-node-hardening .

يتطلب هذا الأمر الملحق aks-preview وعلامة الميزة CustomNodeConfigPreview . لمزيد من المعلومات، راجع المتطلبات الأساسية.

az aks update \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --enable-node-hardening

لتأكيد التغيير، راجع التحقق من إعدادات تصلب العقدة.

التحقق من إعدادات تصلب العقدة

  1. احصل على بيانات الاعتماد لنظام المجموعة باستخدام az aks get-credentials الأمر .

    az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>
    
  2. راجع إعدادات حجز kubelet الفعالة والإخلاء على عقدة عن طريق الاستعلام عن نقطة نهاية تكوين kubelet.

    kubectl get --raw "/api/v1/nodes/<node-name>/proxy/configz" | jq '.kubeletconfig | {kubeReserved, systemReserved, evictionHard, evictionSoft, evictionSoftGracePeriod, evictionMaxPodGracePeriod, enforceNodeAllocatable}'
    

    على عقدة متصلبة، systemReserved وتحتوي evictionSoft على قيم، وتتضمن kube-reserved و enforceNodeAllocatablesystem-reserved.

  3. قارن سعة العقدة بمواردها القابلة للتخصيص.

    kubectl get node <node-name> -o jsonpath='{.status.capacity}{"\n"}{.status.allocatable}{"\n"}'
    

    على عقدة متصلبة، تكون وحدة المعالجة المركزية القابلة للتخصيص والذاكرة والتخزين المؤقت أقل من السعة. الفرق يساوي قيم kube المحجوزة والمحفوظة من قبل النظام في حجوزات الموارد، بالإضافة إلى حدود الإخلاء الثابت في حدود الإخلاء. على سبيل المثال، على عقدة مع 4 وحدات معالجة مركزية ظاهرية و16 غيغابايت من الذاكرة التي تستخدم Azure CNI، وحدة المعالجة المركزية القابلة للتخصيص أقل من السعة ب 240 مللي ميليكور: 140 مللي ميليكور من وحدة المعالجة المركزية المحجوزة kube و100 مللي ميليكور من وحدة المعالجة المركزية المحجوزة من قبل النظام.

تخصيص إعدادات تصلب العقدة

يمكنك تجاوز الإعدادات الافتراضية المحجوزة ل kube والإخلاء لتجمع عقدة Linux باستخدام تكوين kubelet مخصص. تتطلب هذه الإعدادات علامة الميزة CustomNodeConfigPreview . يمكنك استخدامها سواء تم تمكين تصلب العقدة أم لا على نظام المجموعة. تدير AKS القيم المحجوزة للنظام وفرض cgroup، ولا يمكنك تخصيصها.

يتجاوز كل إعداد صفا في جداول حجوزات الموارد أو عتبات الإخلاء . تتوافق الصفوف المحجوزة في Kube مع kubeReserved الإعدادات. تتوافق صفوف الإخلاء الثابت مع hardEvictionThreshold الإعدادات. تتوافق صفوف الإخلاء المبدئي مع softEvictionThreshold الإعدادات و softEvictionGracePeriod . يتوافق الحد الأقصى لفترة سماح إنهاء الجراب مع evictionMaxPodGracePeriodInSeconds.

يمكنك تكوين الإعدادات التالية:

الإعدادات التجاوزات Description
kubeReserved.cpuMillicores وحدة المعالجة المركزية المحجوزة من Kube وحدة المعالجة المركزية المحجوزة لخفية نظام Kubernetes، بالملليكور.
kubeReserved.memoryMB الذاكرة المحجوزة على Kube الذاكرة المحجوزة لخفية نظام Kubernetes، في MiB.
hardEvictionThreshold.memoryAvailable الإخلاء الثابت: memory.available حد الإخلاء الثابت للذاكرة المتوفرة.
hardEvictionThreshold.nodeFsAvailable الإخلاء الثابت: nodefs.available حد الإخلاء الثابت لمساحة نظام ملفات العقدة المتوفرة.
hardEvictionThreshold.nodeFsInodesFree الإخلاء الثابت: nodefs.inodesFree حد الإخلاء الثابت ل inodes نظام ملفات العقدة المجاني.
softEvictionThreshold.memoryAvailable الإخلاء المبدئي: memory.available حد الإخلاء المبدئي للذاكرة المتوفرة.
softEvictionThreshold.nodeFsAvailable الإخلاء المبدئي: nodefs.available حد الإخلاء المبدئي لمساحة نظام ملفات العقدة المتوفرة.
softEvictionThreshold.nodeFsInodesFree الإخلاء المبدئي: nodefs.inodesFree حد الإخلاء المبدئي ل inodes نظام ملفات العقدة المجاني.
softEvictionGracePeriod.memoryAvailable الإخلاء المبدئي: memory.available فترة السماح كم من الوقت يجب أن تظل الذاكرة المتوفرة أقل من حدها الناعم قبل أن يخلي kubelet الحجيرات.
softEvictionGracePeriod.nodeFsAvailable الإخلاء المبدئي: nodefs.available فترة السماح كم من الوقت يجب أن تظل مساحة نظام ملفات العقدة المتوفرة دون حدها الناعم قبل أن يخلي kubelet القرون.
softEvictionGracePeriod.nodeFsInodesFree الإخلاء المبدئي: nodefs.inodesFree فترة السماح كم من الوقت يجب أن تظل عقد نظام ملفات العقدة الحرة دون حدها الناعم قبل أن يخلي kubelet القرون.
evictionMaxPodGracePeriodInSeconds الحد الأقصى لفترة السماح لإنهاء الجراب أثناء الإخلاء المبدئي الحد الأقصى لعدد الثوني التي يسمح kubelet للجرابات بالإنهاء أثناء الإخلاء المبدئي.
  • للحصول على القيم المسموح بها والحد الأدنى وقواعد التحقق من الصحة لكل إعداد، راجع معلمات تكوين العقدة المخصصة ل AKS.
  • لكل إشارة إخلاء، قم بتعيين حد الإخلاء المبدئي وفترة السماح المطابقة لها، وتأكد من أن كل حد إخلاء بسيط أكبر من حد الإخلاء الثابت لنفس الإشارة.
  1. قم بإنشاء ملف تكوين kubelet، مثل nodehardening-kubelet.json، مع الإعدادات التي تريد تخصيصها. يعين المثال التالي كل قيمة قابلة للتكوين. يقوم بتعيين kube المحجوزة إلى 200 مللي كورال من وحدة المعالجة المركزية و1024 ميجابايت من الذاكرة. يقوم بتعيين حدود الإخلاء الثابت للذاكرة 512Mi المتوفرة، 10% ومساحة نظام الملفات المتوفرة، والأنظمة 5% الداخلية الحرة. يقوم بتعيين حدود الإخلاء المبدئي من 1Giو 12%و و 7% مع فترات سماح من 30 ثانية و دقيقتين و دقيقتين. كما أنه يعين فترة سماح الحد الأقصى لإنهاء الجراب 60 ثانية.

    {
      "kubeReserved": {
        "cpuMillicores": 200,
        "memoryMB": 1024
      },
      "hardEvictionThreshold": {
        "memoryAvailable": "512Mi",
        "nodeFsAvailable": "10%",
        "nodeFsInodesFree": "5%"
      },
      "softEvictionThreshold": {
        "memoryAvailable": "1Gi",
        "nodeFsAvailable": "12%",
        "nodeFsInodesFree": "7%"
      },
      "softEvictionGracePeriod": {
        "memoryAvailable": "30s",
        "nodeFsAvailable": "2m",
        "nodeFsInodesFree": "2m"
      },
      "evictionMaxPodGracePeriodInSeconds": 60
    }
    
  2. إنشاء تجمع عقدة Linux يستخدم ملف التكوين باستخدام az aks nodepool add الأمر مع المعلمة --kubelet-config .

    az aks nodepool add \
        --resource-group <resource-group-name> \
        --cluster-name <cluster-name> \
        --name <node-pool-name> \
        --kubelet-config ./nodehardening-kubelet.json
    

    يمكنك أيضا استخدام المعلمة --kubelet-config مع az aks create الأمر لتطبيق التكوين على تجمع العقدة الأولي للمجموعة.

تعطيل تصلب العقدة

تعطيل تصلب العقدة باستخدام az aks update الأمر مع المعلمة --disable-node-hardening .

يتطلب هذا الأمر الملحق aks-preview وعلامة الميزة CustomNodeConfigPreview . لمزيد من المعلومات، راجع المتطلبات الأساسية.

az aks update \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --disable-node-hardening

يؤدي تعطيل تصلب العقدة إلى إيقاف تشغيل الإعداد على مستوى نظام المجموعة، ولكنه لا يغير العقد الموجودة على الفور. تحتفظ العقد الموجودة بجميع الإعدادات المتصلبة حتى يتم إعادة تصورها، على سبيل المثال، أثناء ترقية صورة العقدة. بعد إعادة تصور عقدة، تنطبق التغييرات التالية:

  • العودة إلى إعدادات AKS الافتراضية القياسية: موارد Kube المحجوزة والمحفوظة من قبل النظام، عتبات الإخلاء الثابت، وإنفاذ cgroup. تزداد سعة العقدة القابلة للتخصيص وفقا لذلك.
  • تم الاحتفاظ به: حدود الإخلاء المبدئي وفترات سماح الإخلاء المبدئي والحد الأقصى لفترة السماح لإنهاء الجراب أثناء الإخلاء المبدئي.

يمكنك تعيين تكوين kubelet مخصص فقط عند إنشاء مجموعة أو تجمع عقدة، لذلك لا يمكنك إزالة إعدادات الإخلاء المبدئي المحتفظ بها من تجمع عقدة موجود. لإزالتها، قم بإنشاء تجمع عقدة جديد يقوم بإلغاء تعيينها بشكل صريح، ونقل أحمال العمل الخاصة بك إلى تجمع العقدة الجديد، ثم حذف تجمع العقدة القديمة.

  1. إنشاء ملف تكوين kubelet، مثل remove-soft-eviction.json. يعين المثال التالي كل حد إخلاء مبدئي وفترة سماح إلى سلسلة فارغة، ما يؤدي إلى إيقاف تشغيل الإخلاء الناعم لتلك الإشارة. كما أنه يعين الحد الأقصى لفترة السماح لإنهاء الجراب إلى 0، وهو الإعداد الافتراضي القياسي ل AKS.

    {
      "softEvictionThreshold": {
        "memoryAvailable": "",
        "nodeFsAvailable": "",
        "nodeFsInodesFree": ""
      },
      "softEvictionGracePeriod": {
        "memoryAvailable": "",
        "nodeFsAvailable": "",
        "nodeFsInodesFree": ""
      },
      "evictionMaxPodGracePeriodInSeconds": 0
    }
    
  2. إنشاء تجمع عقدة Linux يستخدم ملف التكوين باستخدام az aks nodepool add الأمر مع المعلمة --kubelet-config .

    az aks nodepool add \
        --resource-group <resource-group-name> \
        --cluster-name <cluster-name> \
        --name <node-pool-name> \
        --kubelet-config ./remove-soft-eviction.json
    
  3. انقل أحمال العمل إلى تجمع العقدة الجديد، ثم احذف تجمع العقدة القديمة. لمزيد من المعلومات، راجع تغيير حجم تجمعات العقد في AKS.

لتأكيد الإعدادات على عقدة، راجع التحقق من إعدادات تصلب العقدة. على العقد في تجمع العقدة الجديد، evictionSoft فارغ.