تخصيص تكوين العقدة لمجموعات عقد خدمة 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"
 }
}

إنشاء نظام مجموعة جديد باستخدام ملفات التكوين المخصصة

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

إشعار

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

إنشاء نظام مجموعة جديد باستخدام ملفات التكوين المخصصة باستخدام az aks create الأمر وتحديد ملفات التكوين الخاصة بك. ينشئ الأمر المثال التالي مجموعة جديدة مع الملفات المخصصة ./linuxkubeletconfig.json والملفات ./linuxosconfig.json :

az aks create --name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json

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

عند إضافة تجمع عقدة إلى نظام مجموعة، يمكنك استخدام ملف التكوين المخصص الذي تم إنشاؤه في الخطوة السابقة لتحديد تكوين kubelet. CustomKubeletConfig مدعوم لتجمعات عقد Linux وWindows.

إشعار

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

az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json

تكوينات أخرى

يمكن استخدام الإعدادات التالية لتعديل إعدادات نظام التشغيل الأخرى:

رسالة اليوم

مرر --message-of-the-day العلامة بموقع الملف لاستبدال رسالة اليوم على عقد Linux عند إنشاء نظام المجموعة أو إنشاء تجمع العقدة.

az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
إنشاء Nodepool
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt

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

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

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

التكوين المخصص لـ Kubelet

يتم دعم تكوين Kubelet المخصص لتجمعات عقد Linux وWindows. تختلف المعلمات المدعومة ويتم توثيقها أدناه.

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

المعلمة‬ القيم/الفاصل الزمني المسموح به Default ‏‏الوصف
cpuManagerPolicy بلا، ثابت لا شيء يسمح النهج الثابت للحاويات الموجودة في وحدات بود مضمونة مع طلبات وحدة المعالجة المركزية المدمجة بالوصول إلى وحدات المعالجة المركزية الحصرية على العقدة.
cpuCfsQuota true, false صحيح تمكين/تعطيل فرض حصة CPU CFS للحاويات التي تحدد حدود CPU.
cpuCfsQuotaPeriod الفاصل الزمني بالمللي ثانية (مللي ثانية) 100ms تعيين قيمة فترة الحصة النسبية لـ CPU CFS.
imageGcHighThreshold 0-100 85 النسبة المئوية لاستخدام القرص التي يتم بعدها تشغيل مجموعة الصور المهملة دائمًا. الحد الأدنى لاستخدام القرص الذي سيؤدي إلى تجميع البيانات المهملة. لتعطيل تجميع البيانات المهملة للصورة، قم بالتعيين إلى 100.
imageGcLowThreshold من 0 إلى 100، وليس أعلى من imageGcHighThreshold 80 النسبة المئوية لاستخدام القرص التي لم يتم قبلها تشغيل مجموعة الصور المهملة أبدًا. الحد الأدنى لاستخدام القرص الذي يمكن أن يؤدي إلى تجميع البيانات المهملة.
topologyManagerPolicy none, best-effort, restricted, single-numa-node لا شيء تحسين محاذاة عقدة 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 (∞) الحد الأقصى لمعرفات العمليات التي يمكن تشغيلها في بود

تكوين Windows Kubelet المخصص

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

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

هام

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

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

حدود معالجة الملف

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

الإعدادات القيم/الفاصل الزمني المسموح به Default ‏‏الوصف
fs.file-max 8192 - 12000500 709620 الحد الأقصى لعدد معالجات الملفات التي ستخصصها نواة Linux، ومن خلال زيادة هذه القيمة يمكنك زيادة الحد الأقصى لعدد الملفات المفتوحة المسموح بها.
fs.inotify.max_user_watches 781250 - 2097152 1048576 الحد الأقصى لعدد مرات مشاهدة الملفات التي يسمح بها النظام. تبلغ مساحة كل مشاهدة 90 بايت تقريبًا على نواة 32 بت، وتقريبًا 160 بايت على نواة 64 بت.
fs.aio-max-nr 65536 - 6553500 65536 يعرض aio-nr العدد الحالي لطلبات io غير المتزامنة على مستوى النظام. يسمح لك aio-max-nr بتغيير القيمة القصوى التي يمكن أن تصل aio-nr إليها.
fs.nr_open 8192 - 20000500 1048576 الحد الأقصى لعدد مؤشرات الملفات التي يمكن للعملية تخصيصها.

مأخذ التوصيل وضبط الشبكة

بالنسبة لعقد العامل، والتي من المتوقع أن تتعامل مع عدد كبير جدًا من الجلسات المتزامنة، يمكنك استخدام المجموعة الفرعية من TCP وخيارات الشبكة أدناه والتي يمكنك تعديلها لكل مجموعة عقدة.

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

الحدود الخاصة بالعامل

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

الإعدادات القيم/الفاصل الزمني المسموح به Default ‏‏الوصف
kernel.threads-max 20 - 513785 55601 يمكن للعمليات أن تبدل مؤشرات ترابط العامل. يتم تعيين الحد الأقصى لعدد كل مؤشرات الترابط التي يمكن إنشاؤها باستخدام إعداد kernel.threads-max في kernel.

الذاكرة الظاهرية

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

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

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