تكوين تجمعات العقدة للتوفير التلقائي للعقدة (NAP) في خدمة Azure Kubernetes ‏(AKS)

تشرح هذه المقالة كيفية تكوين مجموعات العقد لتوفير العقد التلقائي (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.
  • يتخطى NodePools NAP مع التلوث التي لا تتسامح معها الكبسولة.
  • تطبق 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، راجع المقالات التالية: