إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
تشرح هذه المقالة كيفية تفعيل أو تعطيل التوفير التلقائي للعقد (NAP) في خدمة Azure Kubernetes (AKS) باستخدام قوالب Azure CLI أو Azure Resource Manager (ARM).
إذا كنت ترغب في إنشاء مجموعة AKS ممكنة ل NAP باستخدام شبكة ظاهرية مخصصة (VNet) وشبكات فرعية، فراجع إنشاء مجموعة توفير تلقائي للعقدة (NAP) في شبكة ظاهرية مخصصة.
قبل البدء
قبل البدء، راجع مقالة نظرة عامة على التوفير التلقائي للعقدة (NAP) في AKS ، والتي توضح بالتفصيل كيفية عمل NAPوالمتطلبات الأساسيةوالقيود.
تمكين التوفير التلقائي للعقدة (NAP) على نظام مجموعة AKS
توضح الأقسام التالية كيفية تمكين NAP على مجموعة AKS جديدة أو موجودة:
Note
يمكنك تفعيل control plane metrics لرؤية السجلات والعمليات من node auto-provisioning باستخدام الخدمة المدارة Azure Monitor ل Prometheus add-on.
تمكين NAP على نظام مجموعة جديد
قم بتمكين التوفير التلقائي للعقدة على نظام مجموعة جديد باستخدام
az aks createالأمر مع--node-provisioning-modeتعيين العلامة علىAuto. يقوم الأمر التالي أيضا بتعيين إلى--network-plugin، إلى ، وإلىazure--network-plugin-mode.overlay--network-dataplaneciliumaz aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --node-provisioning-mode Auto \ --network-plugin azure \ --network-plugin-mode overlay \ --network-dataplane cilium \ --generate-ssh-keys
قم بإنشاء ملف باسم
nap.jsonوإضافة تكوين قالب ARM التالي معproperties.nodeProvisioningProfile.modeتعيين الحقل إلىAuto، مما يتيح NAP. (الإعداد الافتراضي هوManual.){ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "metadata": {}, "parameters": {}, "resources": [ { "type": "Microsoft.ContainerService/managedClusters", "apiVersion": "2025-05-01", "sku": { "name": "Base", "tier": "Standard" }, "name": "napcluster", "location": "uksouth", "identity": { "type": "SystemAssigned" }, "properties": { "networkProfile": { "networkPlugin": "azure", "networkPluginMode": "overlay", "networkPolicy": "cilium", "networkDataplane":"cilium", "loadBalancerSku": "Standard" }, "dnsPrefix": "napcluster", "agentPoolProfiles": [ { "name": "agentpool", "count": 3, "vmSize": "standard_d2s_v3", "osType": "Linux", "mode": "System" } ], "nodeProvisioningProfile": { "mode": "Auto" } } } ] }قم بتمكين التوفير التلقائي للعقدة على نظام مجموعة جديد باستخدام
az deployment group createالأمر مع--template-fileتعيين العلامة على مسار ملف قالب ARM.az deployment group create --resource-group $RESOURCE_GROUP --template-file ./nap.json
تمكين NAP على نظام مجموعة موجود
قم بتمكين التوفير التلقائي للعقدة على نظام مجموعة موجود باستخدام
az aks updateالأمر مع--node-provisioning-modeتعيين العلامة علىAuto.az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --node-provisioning-mode Auto
تعطيل التوفير التلقائي للعقدة (NAP) على نظام مجموعة AKS
هام
يمكنك فقط تعطيل NAP على نظام مجموعة إذا تم استيفاء الشروط التالية:
- لا توجد عقد NAP موجودة. يمكنك استخدام الأمر
kubectl get nodes -l karpenter.sh/nodepoolللتحقق من العقد المدارة بواسطة NAP الموجودة. - تم تعيين حقل كل Karpenter
NodePoolsالحالي إلىspec.limits.cpu0. يمنع هذا الإجراء إنشاء عقد جديدة، ولكنه لا يعطل العقد قيد التشغيل حاليا.
قم بتعيين
spec.limits.cpuالحقل إلى0كل كاربنترNodePoolموجود . على سبيل المثال:apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: default spec: limits: cpu: 0هام
إذا كنت لا ترغب في التأكد من أن كل جراب يعمل مسبقا على عقدة NAP يتم ترحيله بأمان إلى عقدة غير NAP قبل تعطيل NAP، فيمكنك تخطي الخطوتين 2 و 3 وبدلا من ذلك استخدام
kubectl delete nodeالأمر لكل عقدة مدارة بواسطة NAP. ومع ذلك، لا نوصي بتخطي هذه الخطوات، لأنها قد تترك بعض الكبسولات معلقة ولا تحترم ميزانيات تعطيل الجراب (PDBs).عند استخدام الأمر
kubectl delete node، احرص على حذف العقد المدارة بواسطة NAP فقط. يمكنك تحديد العقد المدارة بواسطة NAP باستخدام الأمرkubectl get nodes -l karpenter.sh/nodepool.أضف الوصمة
karpenter.azure.com/disable:NoScheduleإلى كل كاربنترNodePool. على سبيل المثال:apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: default spec: template: spec: ... taints: - key: karpenter.azure.com/disable effect: NoScheduleيبدأ هذا الإجراء عملية ترحيل أحمال العمل على العقد المدارة بواسطة NAP إلى عقد غير تابعة ل NAP، مع احترام PDBs وحدود التعطيل. تنتقل القرون إلى العقد غير NAP إذا كان من الممكن أن تناسبها. إذا لم تكن هناك سعة كافية ثابتة الحجم، تبقى بعض العقد المدارة بواسطة NAP للعقدة.
قم بتوسيع نطاق الحجم
ManagedClusterAgentPoolsالثابت الحالي أو إنشاء حجمAgentPoolsثابت جديد لأخذ الحمل من العقد المدارة بواسطة NAP للعقدة. عند إضافة هذه العقد إلى نظام المجموعة، يتم استنزاف العقد المدارة بواسطة NAP للعقدة، ويتم ترحيل العمل إلى العقد ذات الحجم الثابت.احذف جميع العقد المدارة بواسطة NAP باستخدام الأمر
kubectl get nodes -l karpenter.sh/nodepool. إذا كانت العقد المدارة بواسطة NAP لا تزال موجودة، فمن المحتمل أن تفتقر المجموعة إلى سعة ثابتة الحجم. في هذه الحالة، يجب عليك إضافة المزيد من العقد حتى يمكن ترحيل أحمال العمل المتبقية.
قم بتحديث وضع NAP إلى
Manualباستخدام أمرaz aks updateAzure CLI مع تعيين علم--node-provisioning-modeعلىManual.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --node-provisioning-mode Manual
قم بتحديث
properties.nodeProvisioningProfile.modeالحقل إلىManualقالب ARM الخاص بك وأعد توزيعه.{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "metadata": {}, "parameters": {}, "resources": [ { "type": "Microsoft.ContainerService/managedClusters", "apiVersion": "2025-05-01", "sku": { "name": "Base", "tier": "Standard" }, "name": "napcluster", "location": "uksouth", "identity": { "type": "SystemAssigned" }, "properties": { "networkProfile": { "networkPlugin": "azure", "networkPluginMode": "overlay", "networkPolicy": "cilium", "networkDataplane":"cilium", "loadBalancerSku": "Standard" }, "dnsPrefix": "napcluster", "agentPoolProfiles": [ { "name": "agentpool", "count": 3, "vmSize": "standard_d2s_v3", "osType": "Linux", "mode": "System" } ], "nodeProvisioningProfile": { "mode": "Manual" } } } ] }
الانتقال من Karpenter مفتوح المصدر المستضاف ذاتيا إلى التوفير التلقائي للعقد المدارة (NAP)
إذا تم تثبيت Karpenter من مخطط Helm مصدر مفتوح ، لا يزال بإمكانك تفعيل NAP على العنقود. تفترض هذه الخطوات أن خريطة خوذة كاربنتر قد تم تركيبها.
هام
تأكد من أنك تستخدم أحدث إصدار من Karpenter قبل بدء الترحيل. NAP دائما ما يدعم أحدث إصدار.
هام
كن حذرا من إزالة CRDs الخاصة ب Karpenter عند تنفيذ هذه العملية الترحيلية. إذا تم حذف CRDs، فإنه يحذف المطالبات الأساسية من NodeClaims، مما قد يعطل أعباء عملك.
لضمان عدم إزالة CRDs الخاصة بكاربنتر في الخطوة 2، قم بإزالة التسميات
managed-by=Helmوالتعليقات التوضيحية.:kubectl get crds -l app.kubernetes.io/managed-by=Helm -o name | grep karpenter.azure.com | xargs -I{} kubectl patch {} --type=json -p ' [ {"op":"remove","path":"/metadata/annotations/meta.helm.sh~1release-name"}, {"op":"remove","path":"/metadata/annotations/meta.helm.sh~1release-namespace"}, {"op":"remove","path":"/metadata/labels/app.kubernetes.io~1managed-by"} ]'قم بإلغاء تثبيت مخطط Helm لإزالة النشر، والخدمة، والأدوار، والموارد الأخرى التي يستخدمها Karpenter مصدر مفتوح. في هذه المرحلة، لم يعد كاربنتر يتفاعل مع أحداث التكبير، لكن العقد الحالية لا تزال تعمل.
helm uninstall karpenter -n kube-system # If you installed Karpenter into a different namespace than kube-system, specify that here instead of kube-systemتفعيل NAP على مجموعة العناصر:
az aks update --name ${CLUSTER_NAME} --resource-group ${RESOURCE_GROUP} --node-provisioning-mode Auto --node-provisioning-default-pools Noneهذا الأمر يعطل مجموعات العقد الافتراضية لأن لديك مجموعات NodePools موجودة وترغب في الاستمرار في استخدامها. إذا كنت ترغب في تفعيل مجموعات الإعداد التلقائي للعقد، يمكنك حذف ذلك
--node-provisioning-default-pools Noneمن الأمرaz aks update.تحقق من اكتمال الترحيل: عندما
az aks updateيكتمل من الخطوة 3 بنجاح، يتم الترحيل. يمكنك أيضا تأكيد أن الترحيل يتم من خلال التحقق من التعليقات على CRDs الخاص ب Karpenter. يجب أن ترى:meta.helm.sh/release-name: aks-managed-karpenter-overlay-base meta.helm.sh/release-namespace: kube-systemفي هذه المرحلة، يتم تفعيل NAP ويجب أن يستأنف التوسع التلقائي.
مراقبة التوفير التلقائي للعقد
استرجاع سجلات كاربنتر والحالة
يمكنك استرجاع السجلات وتحديثات الحالة من كاربنتر للمساعدة في تشخيص وتصحيح الأحداث المتعلقة ب NAP. AKS يدير التخصيص التلقائي للعقد نيابة عنك ويشغلها في مستوى التحكم المدار. يمكنك تفعيل سجلات مستوى التحكم لرؤية سجلات وعمليات كاربنتر من خلال الإعداد التلقائي للعقدة. لمزيد من المعلومات حول سجلات مستويات التحكم، راجع وثائق سجلات مستويات التحكم الخاصة ب AKS
قم بإعداد قاعدة لسجلات الموارد لدفع سجلات العقد التلقائية إلى Log Analytics باستخدام <تعليمات c0>هنا. تأكد من تحديد المربع عند
node-auto-provisioningتحديد خيارات السجلات.حدد قسم Log على نظام المجموعة الخاص بك.
أدخل المثال التالي في Log Analytics:
AKSControlPlane | where Category == "karpenter-events"عرض أحداث التوفير التلقائي للعقد على CLI:
kubectl get events --field-selector source=karpenter-events
مقاييس التوفير التلقائي للعقد
يمكنك تفعيل control plane metrics (معاينة) لرؤية مقاييس وعمليات Karpenter المحددة من node auto-provisioning مع الخدمة المدارة Azure Monitor ل Prometheus add-on.
الخطوات التالية
لمزيد من المعلومات حول التوفير التلقائي للعقدة في AKS، راجع المقالات التالية: