التزويد التلقائي للعقدة (معاينة)

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

يقرر التزويد التلقائي للعقدة (NAP) (معاينة) استنادا إلى متطلبات موارد الجراب المعلقة تكوين الجهاز الظاهري الأمثل لتشغيل أحمال العمل هذه بطريقة أكثر كفاءة وفعالية من حيث التكلفة.

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

هام

التزويد التلقائي للعقدة (NAP) ل AKS قيد المعاينة حاليا. للحصول على الشروط القانونية التي تنطبق على ميزات Azure الموجودة في الإصدار التجريبي، أو المعاينة، أو التي لم يتم إصدارها بعد في التوفر العام، راجع شروط الاستخدام التكميلية لمعاينات Microsoft Azure.

قبل البدء

aks-preview تثبيت ملحق CLI

  1. aks-preview تثبيت ملحق CLI باستخدام az extension add الأمر .

    az extension add --name aks-preview
    
  2. قم بتحديث الملحق للتأكد من تثبيت أحدث إصدار باستخدام az extension update الأمر .

    az extension update --name aks-preview
    

تسجيل NodeAutoProvisioningPreview العلامات المميزة

  1. تسجيل علامة الميزة NodeAutoProvisioningPreview باستخدام az feature register الأمر .

    az feature register --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
    

    يستغرق الأمر بضع دقائق حتى تظهر الحالة مُسجل.

  2. تحقق من حالة التسجيل باستخدام az feature show الأمر .

    az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
    
  3. عندما تعكس الحالة Registered، قم بتحديث تسجيل موفر موارد Microsoft.ContainerService باستخدام az provider register الأمر .

    az provider register --namespace Microsoft.ContainerService
    

القيود

  • تكوين الشبكة الوحيد المسموح به هو Cilium + Overlay + Azure
  • لا يمكنك التمكين في نظام مجموعة حيث تم تمكين مقياس المجموعة التلقائي لتجمعات العقد

الميزات غير المدعومة:

  • تجمعات عقدة Windows
  • تطبيق التكوين المخصص على عقدة kubelet
  • مجموعات IPv6
  • كيانات الخدمة

    إشعار

    يمكنك استخدام هوية مدارة معينة من قبل النظام أو معينة من قبل المستخدم.

  • مجموعات تشفير القرص
  • CustomCATrustCertificates
  • بدء وضع الإيقاف
  • وكيل HTTP
  • طفرة OutboundType . يتم دعم جميع OutboundTypes، ولكن لا يمكنك تغييرها بعد الإنشاء.

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

لتمكين التوفير التلقائي للعقدة، قم بإنشاء مجموعة جديدة باستخدام الأمر az aks create وتعيين --node-provisioning-mode إلى "Auto". ستحتاج أيضا إلى استخدام شبكة التراكب ونهج شبكة cilium.

az aks create --name karpuktest --resource-group karpuk --node-provisioning-mode Auto --network-plugin azure --network-plugin-mode overlay --network-dataplane cilium

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

يستخدم التوفير التلقائي للعقدة قائمة وحدات SKU للجهاز الظاهري كنقطة بداية لتحديد الأنسب لأحمال العمل الموجودة في حالة معلقة. يسمح لك التحكم في ما تريده من SKU في التجمع الأولي بتحديد مجموعات SKU معينة أو أنواع الأجهزة الظاهرية والحد الأقصى لمقدار الموارد التي يستخدمها الموفر.

إذا كان لديك وحدات SKU معينة للجهاز الظاهري وهي مثيلات محجوزة، على سبيل المثال، قد ترغب في استخدام هذه الأجهزة الظاهرية فقط كتجمع بدء.

يمكن أن يكون لديك تعريفات تجمع عقدة متعددة في نظام مجموعة، ولكن AKS ينشر تعريف تجمع عقدة افتراضية يمكنك تعديلها:

apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
  name: default
spec:
  disruption:
    consolidationPolicy: WhenUnderutilized
    expireAfter: Never
  template:
    spec:
      nodeClassRef:
        name: default

      # 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

متطلبات توفير العقدة المدعومة

محددات SKU مع تسميات معروفة

المحدد ‏‏الوصف مثال
karpenter.azure.com/sku-family VM SKU Family D وF وL وما إلى ذلك.
karpenter.azure.com/sku-name اسم SKU صريح Standard_A1_v2
karpenter.azure.com/sku-version يمكن أن يستخدم إصدار SKU (بدون "v"، 1) 1 , 2
karpenter.sh/capacity-type نوع تخصيص الجهاز الظاهري (Spot / عند الطلب) موضعي أو عند الطلب
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 ما إذا كان الجهاز الظاهري يدعم تخزين Premium IO [صحيح، خطأ]
karpenter.azure.com/sku-storage-ephemeralos-maxsize حد الحجم لقرص نظام التشغيل المؤقت بالجيجابايت 92
topology.kubernetes.io/zone منطقة (مناطق) التوفر [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os نظام التشغيل (Linux فقط أثناء المعاينة) ينكس
kubernetes.io/arch بنية وحدة المعالجة المركزية (AMD64 أو ARM64) [amd64, arm64]

لسرد قدرات VM SKU والقيم المسموح بها، استخدم vm list-skus الأمر من Azure CLI.

az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table

حدود تجمع العقدة

بشكل افتراضي، تحاول NAP جدولة أحمال العمل الخاصة بك ضمن الحصة النسبية ل Azure المتوفرة لديك. يمكنك أيضا تحديد الحد الأعلى للموارد التي يستخدمها تجمع عقدة، مع تحديد حدود داخل مواصفات تجمع العقدة.

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

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

عندما يكون لديك تجمعات عقد متعددة معرفة، فمن الممكن تعيين تفضيل مكان جدولة حمل العمل. حدد الوزن النسبي في تعريفات تجمع العقدة.

  # 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

Kubernetes وتحديثات صورة العقدة

تدير AKS مع NAP ترقيات إصدار Kubernetes وتحديثات قرص نظام تشغيل الجهاز الظاهري لك بشكل افتراضي.

ترقيات Kubernetes

تتبع ترقيات Kubernetes لتجمعات عقدة NAP إصدار وحدة التحكم Kubernetes. إذا قمت بإجراء ترقية نظام المجموعة، يتم تحديث عقد NAP تلقائيا لاتباع نفس الإصدار.

تحديثات صورة العقدة

بشكل افتراضي، يتم تحديث الأجهزة الظاهرية لتجمع عقدة NAP تلقائيا عند توفر صورة جديدة. إذا كنت ترغب في تثبيت تجمع عقدة في إصدار صورة عقدة معينة، يمكنك تعيين imageVersion على فئة العقدة:

kubectl edit aksnodeclass default

ضمن تعريف فئة العقدة، قم بتعيين imageVersion إلى أحد الإصدارات المنشورة المدرجة في ملاحظات إصدار AKS. يمكنك أيضا رؤية توفر الصور في المناطق عن طريق الإشارة إلى متعقب إصدار AKS

imageVersion هو جزء التاريخ على صورة العقدة حيث يتم دعم Ubuntu 22.04 فقط، على سبيل المثال، "AKSUbuntu-2204-202311.07.0" سيكون "202311.07.0"

apiVersion: karpenter.azure.com/v1alpha2
kind: AKSNodeClass
metadata:
  annotations:
    kubernetes.io/description: General purpose AKSNodeClass for running Ubuntu2204
      nodes
    meta.helm.sh/release-name: aks-managed-karpenter-overlay
    meta.helm.sh/release-namespace: kube-system
  creationTimestamp: "2023-11-16T23:59:06Z"
  generation: 1
  labels:
    app.kubernetes.io/managed-by: Helm
    helm.toolkit.fluxcd.io/name: karpenter-overlay-main-adapter-helmrelease
    helm.toolkit.fluxcd.io/namespace: 6556abcb92c4ce0001202e78
  name: default
  resourceVersion: "1792"
  uid: 929a5b07-558f-4649-b78b-eb25e9b97076
spec:
  imageFamily: Ubuntu2204
  imageVersion: 202311.07.0
  osDiskSizeGB: 128

ستؤدي إزالة مواصفات imageVersion إلى إرجاع تجمع العقدة ليتم تحديثه إلى أحدث إصدار صورة للعقدة.

تعطيل العقدة

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

يمكنك إزالة عقدة يدويا باستخدام kubectl delete node، ولكن يمكن ل NAP أيضا التحكم في متى يجب تحسين العقد الخاصة بك.

  disruption:
    # Describes which types of Nodes NAP should consider for consolidation
    consolidationPolicy: WhenUnderutilized | WhenEmpty
    # 'WhenUnderutilized', NAP will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is underutilized and could be changed to reduce cost

    #  `WhenEmpty`, NAP will only consider nodes for consolidation that contain no workload pods
    
    # The amount of time NAP should wait after discovering a consolidation decision
    # This value can currently only be set when the consolidationPolicy is 'WhenEmpty'
    # You can choose to disable consolidation entirely by setting the string value 'Never'
    consolidateAfter: 30s

مراقبة أحداث التحديد

ينتج عن التوفير التلقائي للعقدة أحداث نظام المجموعة التي يمكن استخدامها لمراقبة قرارات النشر والجدولة التي يتم اتخاذها. يمكنك عرض الأحداث من خلال دفق أحداث Kubernetes.

kubectl get events -A --field-selector source=karpenter -w