Configure node pools for node auto-provisioning (NAP) in خدمة Azure Kubernetes ‏(AKS)

تشرح هذه المقالة كيفية تكوين مجموعات العقد لتوفير العقد التلقائي (NAP) في خدمة Azure Kubernetes ‏(AKS)، بما في ذلك محددات SKU، وحدود الموارد، وأوزان الأولوية. كما يوفر أمثلة لمساعدتك على البدء.

نظرة عامة على تجمعات العقد في NAP

تستخدم NAP متطلبات SKU للجهاز الظاهري (VM) لتحديد أفضل الأجهزة الظاهرية لأحمال العمل المعلقة. يمكنك تكوين:

  • عائلات SKU وأنواع مثيلات محددة.
  • حدود الموارد والأولويات.
  • مثيلات فورية أو عند الطلب.
  • متطلبات الهندسة المعمارية والقدرات.

NodePool يقوم المورد بتعيين قيود على العقد التي ينشئها NAP والقرون التي تعمل على تلك العقد. عند تثبيت NAP لأول مرة ، فإنه يقوم بإنشاء ملف .NodePool يمكنك تعديل تجمع العقد هذا أو إنشاء تجمعات عقد إضافية لتناسب متطلبات حمل العمل الخاصة بك.

السلوكيات NodePools الرئيسية في NAP

عند تكوين NodePools NAP، ضع السلوكيات التالية في الاعتبار:

  • يتطلب NAP واحدا NodePool على الأقل لتعمل.
  • تقوم NAP بتقييم كل تكوين NodePool.
  • يتخطى NodePools NAP مع التلوث التي لا تتسامح معها الكبسولة.
  • تطبق NAP تلوثات بدء التشغيل على العقد المتوفرة ولكنها لا تتطلب تحمل الجراب.
  • يعمل NAP بشكل أفضل مع حصري NodePoolsمتبادل. عند التطابق المتعدد NodePools ، فإنه يستخدم الشخص ذو الوزن.

مراجعة تكوين تجمع العقدة الافتراضي

تكوين Karpenter NodePool الافتراضي المسمى default الذي تم إنشاؤه بواسطة NAP هو كما يلي:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
  template:
    spec:
      nodeClassRef:
        name: default
      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

كما أنه ينشئ تجمع عقدة system-surge ، مما يساعد على التحجيم التلقائي لعقد تجمع النظام.

التحكم في تكوين تجمع العقد الافتراضي أثناء إنشاء نظام المجموعة

عندما تنشئ عنقود AKS جديد تفعيل مع NAP باستخدام Azure CLI، يمكنك تضمين علم --node-provisioning-default-pools للتحكم في تكوين NAP الافتراضي NodePool.

تتحكم العلامة --node-provisioning-default-pools في تكوين NAP NodePool الافتراضي وتقبل القيم التالية:

  • Auto (افتراضي): ينشئ معيارين NodePools للاستخدام الفوري.
  • Noneلا ينشئ أي NodePools. يجب أن تحدد بنفسك.

تحذير

التغيير من Auto إلى None: إذا قمت بتغيير الإعداد من Auto إلى None على نظام مجموعة موجود، فلن يتم حذف الإعداد الافتراضي 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]

أمثلة على عائلة 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

أمثلة على اسم 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 account list-locations --output table Azure CLI.

مثال على الهندسة المعمارية

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 المتاحة لديك. يمكنك أيضا تحديد الحد الأعلى للموارد التي يستخدمها تجمع العقدة عن طريق تحديد حدود ضمن مواصفات تجمع العقدة. على سبيل المثال:

spec:
  # Resource limits constrain the total size of the cluster.
  # Limits prevent Node Auto Provisioning from creating new instances once the limit is exceeded.
  limits:
    cpu: "1000"
    memory: 1000Gi

أوزان تجمع العقدة

عندما يكون لديك تجمعات عقد متعددة محددة، يمكنك تعيين تفضيل للمكان الذي يجب جدولة حمل العمل فيه عن طريق تحديد الوزن النسبي في تعريفات تجمع العقد. على سبيل المثال:

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

تجمعات العقد الثابتة

تسمح لك مجموعات العقد الثابتة بإنشاء عدد ثابت من العقد باستخدام الحقل replicas . مع مجموعات العقد الثابتة، سيكون عدد العقد دائما على الأقل عند القيمة في replicas الحقل، بغض النظر عن ضغط الكبسولات المعلق. يمكنك أيضا تحديد الحد الأقصى لعدد العقد التي يمكن لمجموعة العقد التوسع إليها عن طريق التعيين 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  # Maximum number of nodes this node pool can scale up to

Note

عند استخدام limits الحقل مع تجمعات العقد الثابتة، يمكن تعديل الحقل فقط nodes: . لا يمكن تحديد الموارد.

الخطوات التالية

لمزيد من المعلومات حول التوفير التلقائي للعقدة في AKS، راجع المقالات التالية: