إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
تشرح هذه المقالة كيفية تكوين مجموعات العقد لتوفير العقد التلقائي (NAP) في خدمة Azure Kubernetes (AKS)، بما في ذلك محددات SKU، وحدود الموارد، وأوزان الأولوية. كما يوفر أمثلة لمساعدتك على البدء.
يتضمن AKS Automatic NAP بشكل افتراضي. بالنسبة لمجموعات AKS Standard، يجب تمكين NAP قبل تكوين تجمعات العقد الخاصة بها.
كيف تحدد NAP الأجهزة الظاهرية لتجمعات العقد
تستخدم NAP متطلبات SKU للجهاز الظاهري (VM) لتحديد أفضل الأجهزة الظاهرية لأحمال العمل المعلقة. يمكنك تكوين:
- عائلات SKU وأنواع مثيلات محددة.
- حدود الموارد والأولويات.
- مثيلات فورية أو عند الطلب.
- متطلبات البنية وGPU والقدرات الأخرى.
NodePool يقوم المورد بتعيين قيود على العقد التي ينشئها NAP والقرون التي تعمل على تلك العقد. عند تمكين NAP مع تعيين تكوين تجمع العقدة الافتراضي إلى Auto، فإنه ينشئ موارد افتراضيةNodePool. يمكنك تعديل تجمعات العقد هذه أو إنشاء تجمعات عقد إضافية لتناسب متطلبات حمل العمل الخاص بك.
كيفية تقييم NAP وتحديد تجمعات العقد
عند تكوين NodePools NAP، ضع السلوكيات التالية في الاعتبار:
- يتطلب NAP واحدا
NodePoolعلى الأقل لتعمل. - تقوم NAP بتقييم كل تكوين
NodePool. - يتخطى
NodePoolsNAP مع التلوث التي لا تتسامح معها الكبسولة. - تطبق NAP تلوثات بدء التشغيل على العقد المتوفرة ولكنها لا تتطلب تحمل الجراب.
- تعمل NAP بشكل أفضل مع حصرية
NodePoolsمتبادلة ، والتي لا تتداخل متطلباتها بحيث يتطابق كل جراب مع تجمع واحد فقط. عندما تتطابق متعددةNodePools، يستخدم NAP واحد مع أعلى وزن.
مراجعة تكوين تجمع العقدة الافتراضي
يوضح المثال التالي تكوين Karpenter NodePool الافتراضي المسمى default الذي تم إنشاؤه بواسطة NAP على نظام مجموعة يستخدم Azure CNI المشغل بواسطة Cilium:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
annotations:
kubernetes.io/description: "General purpose NodePool for generic workloads"
spec:
disruption:
consolidateAfter: 0s
budgets:
- nodes: "30%"
template:
metadata:
labels:
kubernetes.azure.com/mode: "user"
# Required for Karpenter to predict overhead from the Cilium DaemonSet.
kubernetes.azure.com/ebpf-dataplane: cilium
spec:
expireAfter: Never
# Requirements that constrain the parameters of provisioned nodes.
# These requirements are combined with pod.spec.affinity.nodeAffinity rules.
# Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.
# https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators
requirements:
- key: kubernetes.io/arch
operator: In
values: ["amd64"]
- key: kubernetes.io/os
operator: In
values: ["linux"]
- key: karpenter.sh/capacity-type
operator: In
values: ["on-demand"]
- key: karpenter.azure.com/sku-family
operator: In
values: [D]
startupTaints:
# https://karpenter.sh/docs/concepts/nodepools/#cilium-startup-taint
- key: node.cilium.io/agent-not-ready
effect: NoExecute
value: "true"
nodeClassRef:
group: karpenter.azure.com
kind: AKSNodeClass
name: default
ينشئ system-surge NAP أيضا تجمع عقدة يوفر سعة Linux AMD64 عند الطلب للوظائف الإضافية للنظام الهامة. عندما يتسامح جراب معلق مع CriticalAddonsOnly=true:NoSchedule التلوث ويطابق متطلبات التجمع، يمكن أن توفر NAP عقدة من هذا التجمع. العقد التي تم إنشاؤها بواسطة التجمع لها التسمية kubernetes.azure.com/mode: system .
التحكم في تجمعات العقد الافتراضية
عند إنشاء مجموعة AKS جديدة ممكنة مع NAP باستخدام Azure CLI، قم بتضمين العلامة --node-provisioning-default-pools للتحكم في ما إذا كان AKS ينشئ NAP NodePoolsالافتراضي . يمكنك أيضا استخدام هذه العلامة مع az aks update عند تمكين NAP على نظام مجموعة موجود.
--node-provisioning-default-pools تقبل العلامة القيم التالية:
-
Auto(افتراضي): ينشئ معيارينNodePoolsللاستخدام الفوري. -
Noneلا ينشئ أيNodePools. يجب أن تحدد بنفسك.
تحذير
التغيير من Auto إلى None: إذا قمت بتغيير الإعداد من Auto إلى None على نظام مجموعة موجود، فلن يتم حذف الإعداد الافتراضي NodePools تلقائيا. قبل حذفها، حدد سعة الاستبدال المناسبة للوظائف الإضافية للنظام الهامة. يجب حذف الإعداد الافتراضي NodePools يدويا إذا لم تعد بحاجة إليها.
خيارات تكوين تجمع العقدة
توضح الأقسام التالية خيارات التكوين المختلفة في NodePools NAP، بما في ذلك التسميات المعروفة ومحددات SKUوحدود تجمع العقدوأوزان تجمع العقد.
الملصقات المعروفة ومحددات SKU
يعرف Kubernetes well-known labels التي ينفذها Azure. يمكنك تحديد هذه التسميات في spec.requirements قسم واجهة NodePool برمجة التطبيقات. تدعم NAP أيضا تسميات Azure الخاصة بجدولة أكثر تقدما.
الجدول التالي يسرد التسميات التي يمكنك استخدامها في spec.requirements قسم واجهة برمجة التطبيقات لتعريف NodePool خصائص الآلات الافتراضية لعقدك:
| Selector | الوصف | مثال |
|---|---|---|
karpenter.sh/capacity-type |
نوع تخصيص الجهاز الظاهري (فوري / عند الطلب) | بقعه |
karpenter.azure.com/sku-family |
عائلة VM SKU | د ، و و ، ل ، إلخ. |
karpenter.azure.com/sku-series |
سلسلة VM SKU | Dpls_v6 |
karpenter.azure.com/sku-name |
اسم SKU الصريح | Standard_A1_v2 |
karpenter.azure.com/sku-version |
إصدار SKU (بدون "v" ، يمكن استخدام 1) | 1، 2 |
karpenter.azure.com/sku-cpu |
عدد وحدات المعالجة المركزية في الجهاز الظاهري | 16 |
karpenter.azure.com/sku-memory |
الذاكرة في الجهاز الظاهري في MiB | 131072 |
karpenter.azure.com/sku-gpu-name |
اسم وحدة معالجة الرسومات | A100 |
karpenter.azure.com/sku-gpu-manufacturer |
الشركة المصنعة لوحدة معالجة الرسومات | نفيديا |
karpenter.azure.com/sku-gpu-count |
عدد وحدات معالجة الرسومات لكل جهاز ظاهري | 2 |
karpenter.azure.com/sku-networking-accelerated |
ما إذا كان الجهاز الظاهري قد سرع الشبكات | [صحيح ، خطأ] |
karpenter.azure.com/sku-storage-premium-capable |
ما إذا كان الجهاز الظاهري يدعم تخزين الإدخال والإخراج المتميز | [صحيح ، خطأ] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize |
حد الحجم لقرص نظام التشغيل المؤقت (OS) بالجيجابايت | 92 |
kubernetes.azure.com/sku-cpu |
عدد وحدات المعالجة المركزية في الجهاز الظاهري | 16 |
kubernetes.azure.com/sku-memory |
الذاكرة في الجهاز الظاهري في MiB | 131072 |
kubernetes.azure.com/cluster |
اسم نظام مجموعة AKS | عنقودي الخاص |
kubernetes.azure.com/mode |
وضع تجمع العقدة | [النظام، المستخدم] |
kubernetes.azure.com/priority |
الأولوية | [سبوت، عادي] |
kubernetes.azure.com/os-sku |
وحدة تشغيل SKU | [أوبونتو، AzureLinux] |
kubernetes.azure.com/fips_enabled |
ما إذا كان FIPS مفعلا | صحيح |
topology.kubernetes.io/zone |
مناطق التوافر | [uksouth-1، uksouth-2، uksouth-3] |
kubernetes.io/os |
نظام التشغيل | لينكس |
kubernetes.io/arch |
بنية وحدة المعالجة المركزية (AMD64 أو ARM64) | [amd64, arm64] |
قيم محدد الذاكرة في هذا الجدول هي قيم MiB التي تم الإبلاغ عنها على العقد التي تم إنشاؤها بواسطة NAP. قبل إضافة محدد، افحص التسميات على العقد لتأكيد القيمة المستخدمة من قبل نظام المجموعة.
أمثلة على عائلة SKU
karpenter.azure.com/sku-family يسمح لك المحدد باستهداف عائلات VM محددة.
| العائلة | الوصف |
|---|---|
| D-series | الأجهزة الظاهرية للأغراض العامة مع نسبة متوازنة من وحدة المعالجة المركزية إلى الذاكرة |
| F-series | أجهزة افتراضية محسنة للحوسبة مع نسبة عالية من وحدة المعالجة المركزية إلى الذاكرة |
| السلسلة الإلكترونية | أجهزة ظاهرية محسنة للذاكرة للتطبيقات كثيفة الذاكرة |
| السلسلة L | أجهزة ظاهرية محسنة للتخزين مع معدل نقل قرص مرتفع |
| سلسلة N | الأجهزة الظاهرية التي تدعم وحدة معالجة الرسومات لأحمال العمل كثيفة الحوسبة |
مثال على التكوين باستخدام عائلة SKU:
requirements:
- key: karpenter.azure.com/sku-family
operator: In
values:
- D
- F
مثال GPU SKU
لتوفير عقد NVIDIA GPU مع NAP، قم بإنشاء NodePool الذي يحدد أحجام الأجهزة الظاهرية التي تدعم GPU. يسمح المثال التالي ل NAP بتحديد N-series NVIDIA GPU SKUs:
requirements:
- key: karpenter.azure.com/sku-family
operator: In
values:
- N
- key: karpenter.azure.com/sku-gpu-manufacturer
operator: In
values:
- nvidia
إذا كنت تريد أن تقوم AKS بتثبيت وإدارة برنامج تشغيل NVIDIA GPU والمكون الإضافي للجهاز ومصدر مقاييس Data Center GPU Manager (DCGM) وإشارات صحة GPU على عقد GPU التي توفرها NAP، فقم بتكوين وحدة معالجة الرسومات المدارة في المشار إليها AKSNodeClass. لمزيد من المعلومات، راجع إنشاء تجمع عقدة GPU مدار بواسطة AKS.
أمثلة على اسم SKU
karpenter.azure.com/sku-name يسمح لك المحدد بتحديد نوع مثيل الجهاز الظاهري بالضبط.
requirements:
- key: karpenter.azure.com/sku-name
operator: In
values:
- Standard_D4s_v3
- Standard_F8s_v2
أمثلة على إصدار SKU
karpenter.azure.com/sku-version يستهدف المحدد أجيالا محددة من وحدات SKU للجهاز الظاهري.
requirements:
- key: karpenter.azure.com/sku-version
operator: In
values:
- "3" # v3 generation
- "5" # v5 generation
مثال على منطقة التوفر
topology.kubernetes.io/zone يسمح لك المحدد بتحديد مناطق التوفر للعقد الخاصة بك.
requirements:
- key: topology.kubernetes.io/zone
operator: In
values:
- eastus-1
- eastus-2
Note
لسرد أحجام الأجهزة الظاهرية التي تدعم مناطق التوفر في منطقة ما، استخدم az vm list-skus الأمر مع --location <region> --zone --output table المعلمات. تأكد من أن حجم الجهاز الظاهري المحدد يدعم المناطق في NodePool المتطلب.
مثال على الهندسة المعمارية
kubernetes.io/arch يسمح لك المحدد بتحديد بنية وحدة المعالجة المركزية للعقد الخاصة بك. يدعم NAP كلا من amd64 العقد arm64 .
requirements:
- key: kubernetes.io/arch
operator: In
values:
- amd64
- arm64
مثال على نظام التشغيل
يسمح لك kubernetes.io/os المحدد بتحديد نظام التشغيل للعقد الخاصة بك.
requirements:
- key: kubernetes.io/os
operator: In
values:
- linux
مثال على نوع السعة
يسمح لك karpenter.sh/capacity-type المحدد بتحديد ما إذا كنت تريد استخدام مثيلات Spot أو عند الطلب.
Note
تعطي NAP الأولوية لمثيلات Spot عند تحديد كل من Spot وعند الطلب.
requirements:
- key: karpenter.sh/capacity-type
operator: In
values:
- spot
- on-demand
حدود تجمع العقدة
بشكل افتراضي، يحاول NAP جدولة أعباء عملك ضمن حصة Azure المتاحة لديك. بالنسبة إلى تجمع عقدة ديناميكي، يمكنك تحديد حدود الموارد المجمعة عبر جميع العقد التي تم توفيرها بواسطة هذا التجمع. في المثال التالي، cpu: "1000" يقصر التجمع على 1000 ذاكرة أساسية لوحدة المعالجة المركزية الظاهرية، ويحدها memory: 1000Gi إلى 1000 جيبي بايت من الذاكرة:
spec:
# Resource limits constrain the total size of the node pool.
# Limits prevent Node Auto Provisioning from creating new instances once the limit is exceeded.
limits:
cpu: "1000"
memory: 1000Gi
أوزان تجمع العقدة
عندما يكون لديك تجمعات عقد متعددة معرفة، يمكنك تعيين تفضيل لمكان جدولة حمل العمل عن طريق تحديد الوزن النسبي في تعريفات تجمع العقدة.
weight يقبل الحقل عددا صحيحا من 1 إلى 100، وتعطي القيم الأعلى أولوية أعلى لتجمع العقدة. إذا حذفت weight، فإن قيمته هي 0 بشكل فعال. على سبيل المثال:
spec:
# Priority given to the node pool when the scheduler considers which to select.
# Higher weights indicate higher priority when comparing node pools.
# Specifying no weight is equivalent to specifying a weight of 0.
weight: 10
تجمعات العقد الثابتة
تحتفظ تجمعات العقد الثابتة بالعدد الثابت للعقد التي توفرها NAP المحددة في replicas الحقل، بغض النظر عن طلب الجراب. لتغيير عدد العقد، قم بتحجيم NodePoolبشكل صريح ، على سبيل المثال باستخدام kubectl scale مع nodepool static-node-pool --replicas=7. تقيد القيمة الاختيارية limits.nodes التحجيم الصريح والسعة المؤقتة التي تم إنشاؤها أثناء استبدال العقدة. بالنسبة لتجمعات العقد الثابتة، nodes هو الحقل الوحيد المدعوم ضمن limits؛ لا يمكنك تعيين حدود وحدة المعالجة المركزية أو الذاكرة.
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: static-node-pool
spec:
replicas: 5
template:
spec:
requirements:
- key: karpenter.azure.com/sku-name
operator: In
values:
- Standard_D4s_v3
- Standard_F8s_v2
- key: topology.kubernetes.io/zone
operator: In
values:
- eastus-1
- eastus-2
- eastus-3
limits:
nodes: 10
Note
بالنسبة إلى تجمعات العقد الثابتة، يمكنك تعيين فقط nodes في limits الحقل. لا يمكنك تعيين حدود الموارد أو weight، ولا ينطبق دمج التعطيل. بعد إنشاء NodePool، لا يمكنك تبديله بين الأوضاع الثابتة والديناميكية عن طريق إضافة الحقل أو إزالته replicas .
الخطوات التالية
لمزيد من المعلومات حول التوفير التلقائي للعقدة في AKS، راجع المقالات التالية: