تخصيص تكوين العقدة لمجموعات عقد خدمة 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 (∞) | الحد الأقصى لمعرفات العمليات التي يمكن تشغيلها في بود |
seccompDefault |
Unconfined , RuntimeDefault |
Unconfined |
تعيين ملف تعريف seccomp الافتراضي لجميع أحمال العمل. RuntimeDefault يستخدم ملف تعريف seccomp الافتراضي لحاوية، ما يقيد استدعاءات نظام معينة لتحسين الأمان. ستفشل syscalls المقيدة. Unconfined لا يضع أي قيود على syscalls، ويسمح بجميع استدعاءات النظام مما يقلل من الأمان. لمزيد من التفاصيل، راجع ملف تعريف seccomp الافتراضي containerD. هذه المعلمة قيد المعاينة. سجل علامة الميزة "KubeletDefaultSeccompProfilePreview" باستخدام az feature register الأمر مع --namespace "Microsoft.ContainerService". |
تكوين 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 ، ، madvise never |
always |
تُعد Transparent Hugepages إحدى ميزات Linux kernel التي تهدف إلى تحسين الأداء من خلال زيادة كفاءة استخدام أجهزة تعيين ذاكرة المعالج. عند التمكين، تحاول النواة تخصيص hugepages كلما أمكن ذلك، وستتلقى أي عملية في Linux صفحات بحجم 2 ميغابايت إذا كانت المنطقة mmap بحجم 2 ميغابايت محاذاة بشكل طبيعي. في حالات معينة عندما يتم تمكين hugepages على نطاق النظام، قد ينتهي الأمر بالتطبيقات إلى تخصيص المزيد من موارد الذاكرة. يمكن لأي تطبيق mmap منطقة كبيرة ولكن لا يصل إلا إلى 1 بايت منها، وفي هذه الحالة قد يتم تخصيص صفحة بحجم 2 ميغابايت بدلاً من صفحة 4K بدون سبب وجيه. هذا السيناريو هو السبب في أنه من الممكن تعطيل hugepages على نطاق النظام أو الحصول عليها فقط في مناطق MADV_HUGEPAGE madvise . |
transparentHugePageDefrag |
always ، defer ، defer+madvise ، ، madvise never |
madvise |
تتحكم هذه القيمة في ما إذا كان يجب على النواة الاستفادة بشكل كامل من ضغط الذاكرة لتوفير المزيد من hugepages . |
الخطوات التالية
- تعرف على كيفية تكوين مجموعة AKS.
- تعرف على كيفية ترقية صور العقدة في نظام المجموعة.
- راجع ترقية مجموعة Azure Kubernetes Service (AKS) للتعرف على كيفية ترقية مجموعتك إلى أحدث إصدار من Kubernetes.
- راجع قائمة الأسئلة المتداولة حول AKS للعثور على إجابات لبعض أسئلة AKS الشائعة.
Azure Kubernetes Service