إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
تعد تصلب العقدة ميزة اشتراك لتجمعات عقد 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-previewAzure CLI وعلامة الميزةCustomNodeConfigPreview، كما هو موضح في الأقسام التالية.
تثبيت aks-preview امتداد Azure CLI
تثبيت الملحق
aks-previewباستخدامaz extension addالأمر .az extension add --name aks-previewقم بالتحديث إلى أحدث إصدار من الملحق باستخدام
az extension updateالأمر .az extension update --name aks-preview
تسجيل CustomNodeConfigPreview العلامات المميزة
سجل
CustomNodeConfigPreviewعلم الميزة باستخدامaz feature registerالأمر.az feature register --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"يستغرق الأمر بضع دقائق حتى تظهر الحالة مُسجل.
تحقق من حالة التسجيل باستخدام
az feature showالأمر.az feature show --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"عندما تظهر الحالة مسجلة، قم بتحديث تسجيل 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
لتأكيد التغيير، راجع التحقق من إعدادات تصلب العقدة.
التحقق من إعدادات تصلب العقدة
احصل على بيانات الاعتماد لنظام المجموعة باستخدام
az aks get-credentialsالأمر .az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>راجع إعدادات حجز 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.قارن سعة العقدة بمواردها القابلة للتخصيص.
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.
- لكل إشارة إخلاء، قم بتعيين حد الإخلاء المبدئي وفترة السماح المطابقة لها، وتأكد من أن كل حد إخلاء بسيط أكبر من حد الإخلاء الثابت لنفس الإشارة.
قم بإنشاء ملف تكوين 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 }إنشاء تجمع عقدة 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 مخصص فقط عند إنشاء مجموعة أو تجمع عقدة، لذلك لا يمكنك إزالة إعدادات الإخلاء المبدئي المحتفظ بها من تجمع عقدة موجود. لإزالتها، قم بإنشاء تجمع عقدة جديد يقوم بإلغاء تعيينها بشكل صريح، ونقل أحمال العمل الخاصة بك إلى تجمع العقدة الجديد، ثم حذف تجمع العقدة القديمة.
إنشاء ملف تكوين kubelet، مثل
remove-soft-eviction.json. يعين المثال التالي كل حد إخلاء مبدئي وفترة سماح إلى سلسلة فارغة، ما يؤدي إلى إيقاف تشغيل الإخلاء الناعم لتلك الإشارة. كما أنه يعين الحد الأقصى لفترة السماح لإنهاء الجراب إلى0، وهو الإعداد الافتراضي القياسي ل AKS.{ "softEvictionThreshold": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "softEvictionGracePeriod": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "evictionMaxPodGracePeriodInSeconds": 0 }إنشاء تجمع عقدة 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انقل أحمال العمل إلى تجمع العقدة الجديد، ثم احذف تجمع العقدة القديمة. لمزيد من المعلومات، راجع تغيير حجم تجمعات العقد في AKS.
لتأكيد الإعدادات على عقدة، راجع التحقق من إعدادات تصلب العقدة. على العقد في تجمع العقدة الجديد، evictionSoft فارغ.