مشاركة عبر


تخصيص تكوين العقدة لمجموعات عقد خدمة Azure Kubernetes (AKS)

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

إنشاء ملفات تكوين عقدة مخصصة لتجمع عقد AKS

تتطلب تغييرات تكوين نظام التشغيل وkubelet إنشاء ملف تكوين جديد مع المعلمات والإعدادات المطلوبة. إذا لم يتم تحديد قيمة لمعلمة، فيتم تعيين القيمة على الافتراضية.

إشعار

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

تكوين Kubelet

أنشئ linuxkubeletconfig.jsonملف بالمحتويات التالية:

{
 "cpuManagerPolicy": "static",
 "cpuCfsQuota": true,
 "cpuCfsQuotaPeriod": "200ms",
 "imageGcHighThreshold": 90,
 "imageGcLowThreshold": 70,
 "topologyManagerPolicy": "best-effort",
 "allowedUnsafeSysctls": [
  "kernel.msg*",
  "net.*"
],
 "failSwapOn": false
}

تكوين نظام التشغيل

أنشئ linuxosconfig.jsonملف بالمحتويات التالية:

{
 "transparentHugePageEnabled": "madvise",
 "transparentHugePageDefrag": "defer+madvise",
 "swapFileSizeMB": 1500,
 "sysctls": {
  "netCoreSomaxconn": 163849,
  "netIpv4TcpTwReuse": true,
  "netIpv4IpLocalPortRange": "32000 60000"
 }
}

أنشئ عنقود AKS باستخدام ملفات تكوين مخصصة

إشعار

ضع المعلومات التالية في اعتبارك عند استخدام ملفات التكوين المخصصة عند إنشاء عنقود AKS جديد:

  • إذا حددت إعدادا عند إنشاء عنقود، فإن التكوين ينطبق فقط على العقد في مجموعة العقد الأولية. أي إعدادات لم تكتمل في ملف JSON تحتفظ بقيمها الافتراضية.
  • CustomLinuxOsConfig غير مدعوم لنوع نظام ويندوز.

أنشئ عنقودا جديدا باستخدام ملفات تكوين مخصصة باستخدام az aks create الأمر وتحديد ملفات التكوين الخاصة بك ل و --kubelet-config--linux-os-config parameters. ينشئ الأمر المثال التالي مجموعة جديدة مع الملفات المخصصة ./linuxkubeletconfig.json والملفات ./linuxosconfig.json :

az aks create --name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json

إضافة تجمع عقدة باستخدام ملفات التكوين المخصصة

إشعار

ضع المعلومات التالية في اعتبارك عند استخدام ملفات التكوين المخصصة عند إضافة مجموعة عقد جديدة إلى مجموعة AKS موجودة:

  • عند إضافة تجمع عقدة Linux إلى مجموعة موجودة، يمكنك تحديد تكوين kubelet أو تكوين نظام التشغيل أو كليهما. عند إضافة تجمع عقدة Windows إلى مجموعة موجودة، يمكنك فقط تحديد تكوين kubelet. إذا حددت تكوينا عند إضافة مجموعة عقد، فإن التكوين ينطبق فقط على العقد في مجموعة العقد الجديدة. أي إعدادات لم تكتمل في ملف JSON تحتفظ بقيمها الافتراضية.
  • CustomKubeletConfig مدعوم لتجمعات عقد Linux وWindows.

أنشئ مجموعة عقد لينكس جديدة باستخدام az aks nodepool add الأمر وتحديد ملفات التكوين الخاصة بك ل و --kubelet-config--linux-os-config Parameters. الأمر المثال التالي ينشئ مجموعة عقد لينكس جديدة باستخدام ملف مخصص ./linuxkubeletconfig.json :

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

تأكد من تطبيق الإعدادات

بعد تطبيق تكوين العقد المخصص، يمكنك التأكد من تطبيق الإعدادات على العقد عن طريق الاتصال بالمضيف والتحقق sysctl من إجراء تغييرات في التكوين على نظام الملفات.

معلمات تكوين مخصصة مدعومة

تكوين Linux kubelet المخصص

المعلمة‬ القيم/الفاصل الزمني المسموح به Default ‏‏الوصف
cpuManagerPolicy بلا، ثابت لا شيء تسمح السياسة الثابتة للحاويات في كبسولات مضمونة مع طلب معالج صحيح الوصول إلى وحدات معالجة مركزية حصرية على العقدة.
cpuCfsQuota صواب ، خطأ صحيح تفعيل/تعطيل تطبيق حصص CFS للمعالج للحاويات التي تحدد حدود وحدة المعالجة المركزية.
cpuCfsQuotaPeriod الفاصل الزمني بالمللي ثانية (مللي ثانية) 100ms تعيين قيمة فترة الحصة النسبية لـ CPU CFS.
imageGcHighThreshold 0-100 85 النسبة المئوية لاستخدام القرص التي يتم بعدها تشغيل مجموعة الصور المهملة دائمًا. الحد الأدنى لاستخدام القرص الذي يؤدي إلى جمع القمامة. لتعطيل تجميع البيانات المهملة للصورة، قم بالتعيين إلى 100.
imageGcLowThreshold من 0 إلى 100، وليس أعلى من imageGcHighThreshold 80 النسبة المئوية لاستخدام القرص التي لم يتم قبلها تشغيل مجموعة الصور المهملة أبدًا. الحد الأدنى لاستخدام القرص الذي يمكن أن يؤدي إلى تجميع البيانات المهملة.
topologyManagerPolicy لا شيء ، أفضل جهد ، مقيد ، عقدة أحادية لا شيء تحسين محاذاة عقد NUMA. لمزيد من المعلومات، راجع سياسات إدارة طوبولوجيا التحكم على عقدة.
allowedUnsafeSysctls kernel.shm*، kernel.msg*، kernel.sem، ، fs.mqueue.*net.* بلا قائمة مسموح بها لأنماط sysctls غير الآمنة أو أنماط sysctl غير الآمنة.
containerLogMaxSizeMB الحجم بالميغابايت (MB) 50 الحد الأقصى للحجم (على سبيل المثال، 10 ميجابايت) لملف سجل الحاوية قبل أن يتم تدويره.
containerLogMaxFiles ≥ 2 5 الحد الأقصى لعدد ملفات سجل الحاوية التي يمكن أن تكون موجودة للحاوية.
podMaxPids -1 إلى حد Kernel PID -1 (∞) الحد الأقصى لعدد معرفات العمليات التي يمكن تشغيلها في البود.
seccompDefault Unconfined، RuntimeDefault Unconfined تعيين ملف تعريف seccomp الافتراضي لجميع أحمال العمل. RuntimeDefault يستخدم ملف تعريف seccomp الافتراضي لحاوية، ما يقيد استدعاءات نظام معينة لتحسين الأمان. استدعاءات النظام المقيدة تفشل. Unconfined لا تفرض أي قيود على مكالمات النظام (syscalls)، مما يسمح بجميع مكالمات النظام ويقلل من الأمان. لمزيد من المعلومات، راجع ملف ملف ملف الحماية الافتراضي في الحاويات. هذه المعلمة قيد المعاينة. سجل علامة ميزة "KubeletDefaultSeccompProfilePreview" باستخدام az feature register الأمر مع --namespace "Microsoft.ContainerService".

Windows kubelet custom configuration

المعلمة‬ القيم/الفاصل الزمني المسموح به Default ‏‏الوصف
imageGcHighThreshold 0-100 85 النسبة المئوية لاستخدام القرص التي يتم بعدها تشغيل مجموعة الصور المهملة دائمًا. الحد الأدنى لاستخدام القرص الذي يؤدي إلى جمع القمامة. لتعطيل تجميع البيانات المهملة للصورة، قم بالتعيين إلى 100.
imageGcLowThreshold من 0 إلى 100، وليس أعلى من imageGcHighThreshold 80 النسبة المئوية لاستخدام القرص التي لم يتم قبلها تشغيل مجموعة الصور المهملة أبدًا. الحد الأدنى لاستخدام القرص الذي يمكن أن يؤدي إلى تجميع البيانات المهملة.
containerLogMaxSizeMB الحجم بالميغابايت (MB) 10 الحد الأقصى للحجم (على سبيل المثال، 10 ميجابايت) لملف سجل الحاوية قبل أن يتم تدويره.
containerLogMaxFiles ≥ 2 5 الحد الأقصى لعدد ملفات سجل الحاوية التي يمكن أن تكون موجودة للحاوية.

إعدادات تكوين نظام التشغيل المخصص لنظام التشغيل Linux

هام

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

على سبيل المثال، إذا قمت بتعديل ملف vm.max_map_count setting، يجب عليك إعادة تهيئة إلى vmMaxMapCount ملف JSON الخاص بالتكوين.

حدود متعامل ملفات لينكس

عند خدمة كميات كبيرة من الازدحام، عادة ما تأتي هذه الحركة من عدد كبير من الملفات المحلية. يمكنك تعديل إعدادات النواة التالية والحدود المدمجة لتتمكن من التعامل مع المزيد، على حساب بعض ذاكرة النظام.

الجدول التالي يسرد حدود مقبض الملفات التي يمكنك تخصيصها لكل مجموعة عقد:

الإعدادات القيم/الفاصل الزمني المسموح به الافتراضي لأوبونتو 22.04 أوبونتو 24.04 الافتراضي Azure Linux 3.0 default ‏‏الوصف
fs.file-max 8192 - 9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807 الحد الأقصى لعدد مقابض الملفات التي تخصصها نواة لينكس. يتم تعيين هذه القيمة على الحد الأقصى الممكن (2^63-1) لمنع استنفاد واصفات الملفات وضمان وجود عدد غير محدود من مقابض الملفات على مستوى النظام لأحمال العمل المحوية.
fs.inotify.max_user_watches 781250 - 2097152 1048576 1048576 1048576 الحد الأقصى لعدد مرات مشاهدة الملفات التي يسمح بها النظام. تبلغ مساحة كل مشاهدة 90 بايت تقريبًا على نواة 32 بت، وتقريبًا 160 بايت على نواة 64 بت.
fs.aio-max-nr 65536 - 6553500 65536 65536 65536 يعرض aio-nr العدد الحالي لطلبات io غير المتزامنة على مستوى النظام. يسمح لك aio-max-nr بتغيير القيمة القصوى التي يمكن أن تصل aio-nr إليها.
fs.nr_open 8192 - 20000500 1048576 1048576 1073741816 الحد الأقصى لعدد مؤشرات الملفات التي يمكن للعملية تخصيصها.

إشعار

يتم تعيين المعلمة fs.file-max إلى 9223372036854775807 (الحد الأقصى للقيمة لعدد صحيح 64 بت موقع) عبر Ubuntu وAzure Linux استنادا إلى الإعدادات الافتراضية للخادم. هذَا التَكوِين:

  • يمنع هجمات رفض الخدمة بناء على استنفاد واصف الملفات على مستوى النظام.
  • يضمن عدم وجود عبء زجاجي في أحمال عمل الحاويات بسبب حدود مقبض الملفات على مستوى النظام.
  • يحافظ على الأمان من خلال حدود كل عملية (fs.nr_open و ulimit) التي لا تزال تنطبق على العمليات الفردية.
  • يحسن لمنصات الحاويات حيث قد تعمل العديد من الحاويات في نفس الوقت، وكل منها قد يفتح العديد من الملفات والاتصال الشبكي.

ضبط مأخذ لينكس والشبكة

بالنسبة لعقد الوكلاء، التي من المتوقع أن تتعامل مع عدد كبير من الجلسات المتزامنة، يمكنك استخدام خيارات TCP والشبكة التالية وتعديلها حسب مجموعة العقد:

الإعدادات القيم/الفاصل الزمني المسموح به الافتراضي لأوبونتو 22.04 أوبونتو 24.04 الافتراضي Azure Linux 3.0 default ‏‏الوصف
net.core.somaxconn 4096 - 3240000 16384 16384 16384 الحد الأقصى لعدد طلبات الاتصال التي يمكن وضعها في قائمة الانتظار لأي مأخذ توصيل محدد مخصص للاستماع. تم تمرير الحد الأعلى لقيمة معلمة backlog إلى وظيفة listen(2). إذا كانت وسيطة backlog أكبر من somaxconn، فسيتم اقتطاعها دون تأثير إلى هذا الحد.
net.core.netdev_max_backlog 1000 - 3240000 1000 1000 1000 الحد الأقصى لعدد الحزم، الموجودة في قائمة الانتظار على جانب INPUT، عندما تتلقى الواجهة حزمًا تفوق قدرة kernel على معالجتها.
net.core.rmem_max 212992 - 134217728 1048576 1048576 212992 الحد الأقصى لحجم المخزن المؤقت لمآخذ التوصيل بالبايت.
net.core.wmem_max 212992 - 134217728 212992 212992 212992 الحد الأقصى لحجم المخزن المؤقت للإرسال بالبايت.
net.core.optmem_max 20480 - 4194304 20480 131072 20480 الحد الأقصى لحجم المخزن المؤقت الإضافي (المخزن المؤقت لذاكرة الخيار) المسموح به لكل مأخذ توصيل. يتم استخدام ذاكرة خيار مأخذ التوصيل في حالات قليلة لتخزين هياكل إضافية تتعلق باستخدام مأخذ التوصيل.
net.ipv4.tcp_max_syn_backlog 128 - 3240000 16384 16384 16384 الحد الأقصى لطلبات الاتصال التي تم انتظارها في قائمة الانتظار ولم تتلق تأكيدا من العميل المتصل. إذا تجاوز هذا الرقم، تبدأ النواة في إسقاط الطلبات.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 262144 262144 131072 الحد الأقصى لعدد مآخذ التوصيل timewait التي يحتفظ بها النظام في وقت واحد. في حالة تجاوز هذا الرقم، يتم إتلاف مأخذ الانتظار على الفور ويتم طباعة تحذير.
net.ipv4.tcp_fin_timeout 5 - 120 60 60 60 مدة بقاء الاتصال اليتيمة (التي لم تعد تشير إليها أي تطبيق) في الحالة FIN_WAIT_2 قبل أن يتم إلغاؤه في الطرف المحلي.
net.ipv4.tcp_keepalive_time 30 - 432000 7200 7200 7200 عدد المرات التي يرسل فيها TCP رسائل keepalive عند تمكين keepalive.
net.ipv4.tcp_keepalive_probes 1 - 15 9 9 9 كم عدد فحوصات keepalive التي يرسلها TCP، حتى يقرر أن الاتصال مقطوع.
net.ipv4.tcp_keepalive_intvl 10 - 90 75 75 75 عدد مرات إرسال الفحوصات. مضروبًا في tcp_keepalive_probes حيث يساوي الوقت المستغرق لإنهاء الاتصال الذي لا يستجيب، بعد بدء الفحوصات.
net.ipv4.tcp_tw_reuse 2 2 2 السماح بإعادة استخدام مآخذ TIME-WAIT للاتصالات الجديدة عندما تكون آمنة من وجهة نظر البروتوكول.
net.ipv4.ip_local_port_range أولا: 1024 - 60999 والأخير: 32768 - 65535] الأول: 32768 والأخير: 60999 الأول: 32768 والأخير: 60999 الأول: 32768 والأخير: 60999 نطاق المنفذ المحلي الذي تستخدمه نسبة استخدام الشبكة TCP وUDP لاختيار المنفذ المحلي. يتكون من رقمين: الرقم الأول هو أول منفذ محلي مسموح به لنسبة استخدام الشبكة TCP وUDP على عقدة العامل، والثاني هو رقم المنفذ المحلي الأخير.
net.ipv4.neigh.default.gc_thresh1 128 - 80000 4096 4096 4096 الحد الأدنى لعدد الإدخالات التي يمكن أن تكون في ذاكرة ARP المؤقتة. لا يتم تفعيل جمع القمامة إذا كان عدد الإدخالات أقل من هذا الإعداد.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 8192 8192 الحد الأقصى البرمجي لعدد الإدخالات التي يمكن أن تكون في ذاكرة ARP المؤقتة. هذا الإعداد ربما هو الأهم، حيث يتم تفعيل جمع قمامة ARP بعد حوالي 5 ثوان من الوصول إلى هذا الحد الأقصى.
net.ipv4.neigh.default.gc_thresh3 1024 - 100000 16384 16384 16384 الحد الأقصى الثابت لعدد الإدخالات في ذاكرة التخزين المؤقت لدى ARP.
net.netfilter.nf_conntrack_max 131072 - 2097152 محسوب ديناميكيا محسوب ديناميكيا محسوب ديناميكيا nf_conntrack هي وحدة تتعقب إدخالات الاتصال لـ NAT داخل Linux. تستخدم الوحدة nf_conntrack جدول تجزئة لتسجيل الاتصال الذي تم إنشاؤه لبروتوكول TCP. nf_conntrack_maxهو الحد الأقصى لعدد العقد في جدول التجزئة، أي الحد الأقصى لعدد الاتصالات التي تدعمها الوحدة nf_conntrack أو حجم جدول تتبع الاتصال. يتم حساب القيمة الافتراضية ديناميكيا بناء على ذاكرة النظام باستخدام الصيغة: RAM_in_bytes / 16384 (أو RAM_in_MB * 64). على سبيل المثال، جهاز افتراضي بذاكرة RAM بسعة 8 جيجابايت لديه افتراضي يقارب 524,288 اتصالا. تختلف القيم الفعلية بناء على حجم الجهاز الافتراضي والذاكرة المتاحة.
net.netfilter.nf_conntrack_buckets 65536 - 524288 محسوب ديناميكيا محسوب ديناميكيا محسوب ديناميكيا nf_conntrack هي وحدة تتعقب إدخالات الاتصال لـ NAT داخل Linux. تستخدم الوحدة nf_conntrack جدول تجزئة لتسجيل الاتصال الذي تم إنشاؤه لبروتوكول TCP. nf_conntrack_bucketsهو حجم جدول التجزئة. يتم حساب القيمة الافتراضية ديناميكيا بناء على ذاكرة النظام باستخدام الصيغة: RAM_in_bytes / 16384، مع حد أدنى 1,024 دلو وحد أقصى 262,144 دلو. عادة ما يتم تعيين الافتراضي nf_conntrack_max على nf_conntrack_buckets * 4. تختلف القيم الفعلية بناء على حجم الجهاز الافتراضي والذاكرة المتاحة.

حدود عامل لينكس

مثل حدود أداة وصف الملف، حيث إن عدد العاملين أو مؤشرات الترابط التي يمكن لعملية ما أن تنشئها مقيد بواسطة كل من إعداد kernel وحدود المستخدم. حد المستخدم في AKS غير محدود. الجدول التالي يسرد إعداد النواة الذي يمكنك تخصيصه لكل مجموعة عقد:

الإعدادات الافتراضي لأوبونتو 22.04 أوبونتو 24.04 الافتراضي Azure Linux 3.0 default ‏‏الوصف
kernel.threads-max محسوب ديناميكيا محسوب ديناميكيا محسوب ديناميكيا يمكن للعمليات أن تبدل مؤشرات ترابط العامل. يتم تعيين الحد الأقصى لعدد كل مؤشرات الترابط التي يمكن إنشاؤها باستخدام إعداد kernel.threads-max في kernel. يتم حساب القيمة الافتراضية ديناميكيا بناء على ذاكرة النظام باستخدام الصيغة: total_ram_pages / 4 (حيث يكون حجم كل صفحة عادة 4 كيلوبايت). تختلف القيم الفعلية بناء على حجم الجهاز الافتراضي والذاكرة المتاحة.

ذاكرة لينكس الافتراضية

الجدول التالي يسرد إعدادات النواة التي يمكنك تخصيصها لكل مجموعة عقد لضبط تشغيل نظام الذاكرة الافتراضية (VM) في نواة لينكس وبيانات writeout الأقراص الملوثة على القرص:

الإعدادات القيم/الفاصل الزمني المسموح به الافتراضي لأوبونتو 22.04 أوبونتو 24.04 الافتراضي Azure Linux 3.0 default ‏‏الوصف
vm.max_map_count 65530 1048576 1048576 يحتوي هذا الملف على الحد الأقصى لمناطق خريطة الذاكرة التي يمكن أن تمتلكها العملية. يتم استخدام مساحات مخطط الذاكرة كأثر جانبي لاستدعاء malloc، مباشرة من قبل mmapو mprotect وmadvise وأيضًا عند تحميل المكتبات المشتركة.
vm.vfs_cache_pressure 1 - 100 100 100 100 تتحكم هذه النسبة المئوية في قابلية النواة لاستعادة الذاكرة، والتي تُستخدم للتخزين المؤقت لكائنات الدليل وكائنات inode.
vm.swappiness 0 - 100 60 60 60 يستخدم هذا التحكم لتحديد مدى سرعة تبديل النواة لصفحات الذاكرة. القيم الأعلى تزيد من العدوانية، والقيم المنخفضة تقلل من مقدار المبادلة. القيمة 0 ترشد kernel إلى عدم بدء المبادلة حتى يصبح مقدار الصفحات المجانية والمدعومة بالملفات أقل من العلامة المائية العالية في المنطقة.
swapFileSizeMB 1 ميغابايت -- حجم القرص المؤقت (/dev/sdb) بلا بلا بلا يحدد SwapFileSizeMB حجم ملف swap بالميغابايت ليتم إنشاؤه على عقد الوكلاء من هذا التجمع العقدي.
transparentHugePageEnabled always، ، madvisenever always always madvise Transparent Hugepages هي ميزة Linux kernel تهدف إلى تحسين الأداء من خلال الاستفادة بشكل أكثر كفاءة من أجهزة تعيين ذاكرة المعالج الخاص بك. عند تفعيلها، تحاول النواة تخصيص hugepages الصفحات كلما أمكن، وتستقبل أي عملية لينكس صفحات بسعة 2 ميجابايت إذا mmap كانت المنطقة 2 ميجابايت محاذاة طبيعيا. في بعض الحالات، عند hugepages تفعيلها على مستوى النظام، قد تنتهي التطبيقات بتخصيص موارد ذاكرة أكبر. قد mmap يكون التطبيق منطقة كبيرة لكنه يلمس فقط بايت واحد، وفي هذه الحالة قد يتم تخصيص صفحة بحجم 2 ميجابايت بدلا من صفحة 4K بدون سبب وجيه. هذا السيناريو هو السبب في أنه من الممكن تعطيل hugepages على نطاق النظام أو الحصول عليها فقط في مناطق MADV_HUGEPAGE madvise.
transparentHugePageDefrag always، defer، defer+madvise، ، madvisenever madvise madvise madvise تتحكم هذه القيمة في ما إذا كان يجب على النواة الاستفادة بشكل كامل من ضغط الذاكرة لتوفير المزيد من hugepages.