إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
تشرح هذه المقالة كيفية تكوين موارد AKSNodeClass لتعريف إعدادات Azure خاصة بالتوفير التلقائي للعقد (NAP) في خدمة Azure Kubernetes (AKS) باستخدام Karpenter.
AKSNodeClass يسمح لك بتخصيص جوانب مختلفة من العقد التي يوفرها Karpenter، مثل صورة الجهاز الظاهري (VM) وحجم قرص نظام التشغيل (OS) والحد الأقصى للجراب لكل عقدة وتكوينات kubelet.
Important
ابتداء من 30 نوفمبر 2025، لم يعد خدمة Azure Kubernetes (AKS) يدعم أو يوفر تحديثات الأمان ل Azure Linux 2.0. صورة عقدة لينكس 2.0 Azure متجمدة عند إصدار 202512.06.0. ابتداء من 31 مارس 2026، سيتم إزالة صور العقد، ولن تتمكن من توسيع مجموعات العقد الخاصة بك. انتقل إلى نسخة مدعومة Azure لينكس عن طريق ترقية مجموعات العقد إلى نسخة Kubernetes مدعومة أو الانتقال إلى osSku AzureLinux3. لمزيد من المعلومات، راجع Retirement GitHub issue وتحديث Azure إعلان التقاعد. للبقاء على اطلاع بالإعلانات والتحديثات، تابع ملاحظات الإصدار AKS.
نظرة عامة على موارد AKSNodeClass
موارد AKSNodeClass تتيح لك تكوين إعدادات Azure الخاصة ب NAP. يجب أن يشير كل NodePool مورد إلى AKSNodeClass استخدام spec.template.spec.nodeClassRef. يمكنك أن يكون لديك عدة NodePools تشير إلى نفس AKSNodeClass، مما يسمح لك بمشاركة تكوينات Azure مشتركة عبر مجموعات عقد مختلفة.
تكوين عائلة الصور
imageFamily يملي الحقل صورة الجهاز الظاهري الافتراضية ومنطق التمهيد للعقد التي تم توفيرها من خلال .AKSNodeClass إذا لم تحدد عائلة صور، فإن الإعداد الافتراضي هو Ubuntu2204. يتم دعم وحدات معالجة الرسومات مع كلتا عائلات الصور على أحجام الأجهزة الظاهرية المتوافقة.
عائلات الصور المدعومة
-
Ubuntuدعم Ubuntu 22.04 طويل الأجل (LTS) هو توزيع Linux الافتراضي لعقد AKS.: -
AzureLinux: Azure Linux هو التوزيع البديل للينكس Microsoft لأحمال عمل AKS. لمزيد من المعلومات، راجع وثائق Azure لينكس
مثال على تكوين عائلة الصور
يقوم المثال التالي بتكوين مجموعة AKSNodeClass الصور لاستخدامها AzureLinux :
spec:
imageFamily: AzureLinux
تكوين صورة العقدة المتوافق مع FIPS
يمكنك أيضا تفعيل صور العقد المتوافقة مع معايير معالجة المعلومات الفيدرالية (FIPS). لمزيد من المعلومات حول FIPS في AKS، راجع توثيق FIPS.
يتم تعيين الحقل fipsMode افتراضيا على "معطل"، ويمكن تعيينه على الخيارات التالية:
- FIPS - اختيار صور العقد المتوافقة مع FIPS
- معطلة - لا تستخدم صور العقد المتوافقة مع FIPS
المثال التالي يضبط 'AKSNodeClass' لاختيار صور العقد المتوافقة مع FIPS عن طريق التعيين fipsMode إلى FIPS:
spec:
fipsMode: FIPS
تكوين الشبكة الفرعية للشبكة الظاهرية (VNet)
يحدد حقل vnetSubnetID أي شبكة فرعية Azure VNet يجب استخدامها لتوفير واجهات شبكة العقد. هذا الحقل اختياري. إذا لم تحدد شبكة فرعية، تستخدم NAP الشبكة الفرعية الافتراضية التي تم تكوينها أثناء تثبيت Karpenter. لمزيد من المعلومات، راجع تكوينات الشبكة الفرعية ل NAP.
مثال على تكوين الشبكة الفرعية
يجب أن يكون معرف الشبكة الفرعية بصيغة Azure Resource Manager (ARM) الكاملة، كما هو موضح في المثال التالي:
spec:
vnetSubnetID: "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/{subnet-name}"
تكوين حجم قرص نظام التشغيل
يحدد الحقل osDiskSizeGB حجم قرص نظام التشغيل بالجيجابايت. القيمة الافتراضية هي 128 جيجابايت، والحد الأدنى للقيمة هو 30 غيغابايت.
ضع في اعتبارك أحجام أقراص نظام التشغيل الأكبر لأحمال العمل التي:
- تخزين البيانات المهمة محليا.
- تتطلب مساحة إضافية لصور الحاوية.
- لديك متطلبات إدخال / إخراج عالية للقرص.
مثال على تكوين حجم قرص نظام التشغيل
spec:
osDiskSizeGB: 256 # 256 GB OS disk
تكوين قرص نظام التشغيل سريع الزوال
تستخدم NAP تلقائيا أقراص نظام التشغيل سريعة الزوال عندما تكون متوفرة ومناسبة لحجم القرص المطلوب. توفر أقراص نظام التشغيل سريعة الزوال أداء أفضل وتكلفة أقل مقارنة بالأقراص المدارة.
معايير اختيار القرص سريع الزوال
يختار النظام تلقائيا الأقراص سريعة الزوال في السيناريوهات التالية:
- يدعم نوع مثيل الجهاز الظاهري أقراص نظام التشغيل سريع الزوال.
- سعة القرص سريع الزوال أكبر من أو تساوي المطلوب
osDiskSizeGB. - يتمتع الجهاز الظاهري بسعة تخزين سريعة الزوال كافية.
إذا لم يتم استيفاء هذه الشروط، فسيعود النظام إلى استخدام الأقراص المدارة.
أنواع الأقراص سريعة الزوال وتحديد الأولويات
يمكن أن تحتوي أجهزة Azure الافتراضية على أنواع مختلفة من التخزين المؤقت. يستخدم النظام ترتيب الأولوية التالي:
- أقراص NVMe (أعلى أداء)
- أقراص ذاكرة التخزين المؤقت (أداء متوازن)
- أقراص الموارد (الأداء الأساسي)
مثال على تكوين القرص سريع الزوال
يمكنك استخدام متطلبات تجمع العقد للتأكد من أن العقد لديها سعة قرص سريعة الزوال كافية، كما هو موضح في المثال التالي:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: ephemeral-disk-pool
spec:
template:
spec:
requirements:
- key: karpenter.azure.com/sku-storage-ephemeralos-maxsize
operator: Gt
values: ["128"] # Require ephemeral disk larger than 128 GB
nodeClassRef:
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
name: my-node-class
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
name: my-node-class
spec:
osDiskSizeGB: 128 # This will use ephemeral disk if available and large enough
يضمن هذا التكوين تحديد أنواع مثيلات الجهاز الظاهري فقط ذات الأقراص سريعة الزوال التي يزيد حجمها عن 128 غيغابايت، مما يضمن استخدام القرص سريع الزوال لحجم قرص نظام التشغيل المحدد.
الحد الأقصى لتكوين الجرابونات
يحدد الحقل maxPods الحد الأقصى لعدد الجرابات التي يمكن جدولتها على عقدة. يؤثر هذا الإعداد على كل من كثافة نظام المجموعة وتكوين الشبكة.
الحد الأدنى لقيمة ل maxPods هو 10، والحد الأقصى للقيمة هو 250.
السلوك الافتراضي ل maxPods
يعتمد السلوك الافتراضي ل maxPods على تكوين المكون الإضافي للشبكة. يلخص الجدول التالي الإعدادات الافتراضية:
| تكوين المكون الإضافي للشبكة | الافتراضي maxPods لكل عقدة |
|---|---|
| Azure CNI مع الشبكات القياسية (v1 أو NodeSubnet) | 30 |
| Azure CNI مع شبكات التراكيب | 250 |
| لا شيء (لا يوجد مكون إضافي للشبكة) | 250 |
| تكوينات أخرى | 110 (الإعداد الافتراضي القياسي ل Kubernetes) |
مثال على تكوين الحد الأقصى للجراب
spec:
maxPods: 50 # Allow up to 50 pods per node
تكوين LocalDNS
يقوم LocalDNS بنشر وكيل DNS على مستوى العقدة الذي يحل استعلامات DNS بالقرب من أعباء العمل، مما يقلل من زمن استجابة الاستعلام ويحسن المرونة أثناء الاضطرابات المؤقتة في DNS. لمزيد من المعلومات، راجع وثائق LocalDNS. افتراضيا، يتم تعيين LocalDNS على معطل ويمكن تكوينه على الخيارات التالية:
-
Disabled(الافتراضي) - يعطل ميزة LocalDNS. استفسارات DNS لا تحل محليا على العقدة. -
Preferred- تدير AKS تمكين LocalDNS بناء على نسخة Kubernetes من تجمع العقد. يتم التحقق من صحة التكوين وتضمينه دائما، ولكن لا يتم تمكين LocalDNS ما لم يتم استخدام إصدار Kubernetes الصحيح. -
Required- يتم تطبيق LocalDNS على تجمع العقد إذا تم استيفاء جميع المتطلبات المسبقة. إذا لم يتم استيفاء المتطلبات، يفشل النشر.
مثال على تكوين LocalDNS
يمكنك تخصيص تكوينات LocalDNS مثل vnetDNSOverrides و kubeDNSOverrides. لمزيد من التفاصيل حول الإضافات المدعومة، راجع تخصيص LocalDNS.
spec:
LocalDNS:
mode: Required
vnetDNSOverrides:
- zone: "."
cacheDuration: "3600s"
forwardDestination: VnetDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: PreferUDP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
- zone: "cluster.local"
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: ForceTCP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
kubeDNSOverrides:
- zone: "."
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: PreferUDP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
- zone: "cluster.local"
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: ForceTCP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
تكوين Kubelet
يسمح لك القسم kubelet بتكوين معلمات kubelet المختلفة التي تؤثر على سلوك العقدة. هذه المعاملات هي حجج kubelet نموذجية، لذا يقوم مزود Azure ببساطة بتمريرها إلى kubelet على العقدة.
Important
قم بتكوين إعدادات kubelet بعناية، واختبر أي تغييرات في البيئات غير الإنتاجية أولا.
إدارة وحدة المعالجة المركزية
تتحكم الإعدادات التالية في سلوك إدارة وحدة المعالجة المركزية ل kubelet:
spec:
kubelet:
cpuManagerPolicy: "static" # or "none"
cpuCFSQuota: true
cpuCFSQuotaPeriod: "100ms"
-
cpuManagerPolicyيتحكم في كيفية تخصيص kubelet لموارد وحدة المعالجة المركزية.: قم بالتعيين إلى"static"تثبيت وحدة المعالجة المركزية في أحمال العمل الحساسة لزمن الانتقال. -
cpuCFSQuotaتمكين فرض الحصة النسبية للجدولة العادلة تماما لوحدة المعالجة المركزية (CFS) للحاويات التي تحدد حدود وحدة المعالجة المركزية.: -
cpuCFSQuotaPeriodلتعيين فترة الحصة النسبية لوحدة المعالجة المركزية CFS.:
مجموعة البيانات المهملة للصور
تتحكم الإعدادات التالية في سلوك جمع البيانات المهملة للصور ل kubelet:
spec:
kubelet:
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
تتحكم هذه الإعدادات عندما يقوم kubelet بتجميع البيانات المهملة لصور الحاوية:
-
imageGCHighThresholdPercentالنسبة المئوية لاستخدام القرص التي تؤدي إلى تجميع البيانات المهملة للصور.: -
imageGCLowThresholdPercentالنسبة المئوية المستهدفة لاستخدام القرص بعد جمع البيانات المهملة.:
إدارة المخطط
يتحكم الإعداد التالي في نهج مدير المخطط ل kubelet:
spec:
kubelet:
topologyManagerPolicy: "best-effort" # none, restricted, best-effort, single-numa-node
يساعد مدير المخطط في تنسيق تخصيص الموارد لأحمال العمل الحساسة لزمن الانتقال عبر موارد وحدة المعالجة المركزية والجهاز (مثل وحدة معالجة الرسومات).
تكوين النظام
تسمح لك الإعدادات التالية بتكوين معلمات نظام إضافية ل kubelet:
spec:
kubelet:
allowedUnsafeSysctls:
- "kernel.msg*"
- "net.ipv4.route.min_pmtu"
containerLogMaxSize: "50Mi"
containerLogMaxFiles: 5
podPidsLimit: 4096
-
allowedUnsafeSysctlsقائمة بأجهزة sysctls غير الآمنة المسموح بها التي يمكن أن تستخدمها الكبسولات .: -
containerLogMaxSizeالحد الأقصى لحجم ملفات سجل الحاوية قبل التدوير.: -
containerLogMaxFilesالحد الأقصى لعدد ملفات سجل الحاوية المطلوب الاحتفاظ بها.: -
podPidsLimitالحد الأقصى لعدد العمليات المسموح بها في أي جراب.:
Azure resource tags configuration
يمكنك تحديد Azure علامات الموارد التي تنطبق على جميع حالات الآلات الافتراضية التي تم إنشاؤها باستخدام مورد معين AKSNodeClass. العلامات مفيدة لتتبع التكلفة وتنظيم الموارد ومتطلبات الامتثال.
قيود العلامات
- علامات الموارد في Azure لها حد أقصى يبلغ 50 علامة لكل مورد.
- أسماء العلامات غير حساسة لحالة الأحرف ولكن قيم العلامات حساسة لحالة الأحرف.
- Azure يحتفظ ببعض أسماء الوسوم التي لا يمكن استخدامها. لمزيد من المعلومات، راجع إرشادات العلامة والحدود.
مثال على تكوين العلامات
spec:
tags:
Environment: "production"
Team: "platform"
Application: "web-service"
CostCenter: "engineering"
مثال التكوين الشامل AKSNodeClass
يوضح المثال التالي تكوينا شاملا AKSNodeClass يتضمن جميع الإعدادات التي تمت مناقشتها في هذه المقالة:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
template:
spec:
nodeClassRef:
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
name: comprehensive-example
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
name: comprehensive-example
spec:
# Image family configuration
# Default: Ubuntu
# Valid values: Ubuntu, AzureLinux
imageFamily: Ubuntu
# FIPS compliant mode - allows support for FIPS-compliant node images
# Default: Disabled
# Valid values: FIPS, Disabled
fipsMode: Disabled
# LocalDNS mode - allows use of LocalDNS feature
# Default: Disabled
# Valid values: Preferred, Required, Disabled
LocalDNS:
mode: Disabled
# additional details on vnetDNSOverrides and kubeDNSOverrides can be added here
# Virtual network subnet configuration (optional)
# If not specified, uses the default --vnet-subnet-id from Karpenter installation
vnetSubnetID: "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet"
# OS disk size configuration
# Default: 128 GB
# Minimum: 30 GB
osDiskSizeGB: 128
# Maximum pods per node configuration
# Default behavior depends on network plugin:
# - Azure CNI with standard networking: 30 pods
# - Azure CNI with overlay networking: 250 pods
# - Other configurations: 110 pods
# Range: 10-250
maxPods: 30
# Azure resource tags (optional)
# Applied to all VM instances created with this AKSNodeClass
tags:
Environment: "production"
Team: "platform-team"
Application: "web-service"
CostCenter: "engineering"
# Kubelet configuration (optional)
# All fields are optional with sensible defaults
kubelet:
# CPU management policy
# Default: "none"
# Valid values: none, static
cpuManagerPolicy: "static"
# CPU CFS quota enforcement
# Default: true
cpuCFSQuota: true
# CPU CFS quota period
# Default: "100ms"
cpuCFSQuotaPeriod: "100ms"
# Image garbage collection thresholds
# imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent
# Range: 0-100
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
# Topology manager policy
# Default: "none"
# Valid values: none, restricted, best-effort, single-numa-node
topologyManagerPolicy: "best-effort"
# Allowed unsafe sysctls (optional)
# Comma-separated list of unsafe sysctls or patterns
allowedUnsafeSysctls:
- "kernel.msg*"
- "net.ipv4.route.min_pmtu"
# Container log configuration
# containerLogMaxSize default: "50Mi"
containerLogMaxSize: "50Mi"
# containerLogMaxFiles default: 5, minimum: 2
containerLogMaxFiles: 5
# Pod process limits
# Default: -1 (unlimited)
podPidsLimit: 4096
الخطوات التالية
لمزيد من المعلومات حول التوفير التلقائي للعقدة في AKS، راجع المقالات التالية: