تمرين - تكوين تجمعات العقد الموضعية باستخدام أداة التحجيم التلقائي لنظام المجموعة في مجموعة AKS

مكتمل

تسمح لك تجمعات عقد المستخدم الموضعية بالوصول إلى سعة حساب Azure غير المستخدمة بأسعار أقل مع دعم سيناريوهات الحوسبة عالية الأداء.

في التمرين السابق، قمت بإنشاء تجمع عقدة مستخدم قياسي، واستخدمت مقياس المجموعة التلقائي لإدارة إنشاء العقدة، وقمت بتحجيم عدد العقد يدويا.

الخطوة التالية هي إضافة تجمع عقدة مستخدم موضعي مع التحجيم التلقائي لتقليل التكاليف التشغيلية لنظام المجموعة. يختلف استخدام نظام المجموعة استنادا إلى الموارد المطلوبة ولا يمكن التنبؤ بها، لذلك يمكنك إعداد القواعد لالتقاط الارتفاعات والانخفاضات. يتم نشر حمل العمل مع تمكين ترابط العقدة بحيث تتم جدولة الجراب على العقد في تجمع العقدة الموضعية.

إنشاء تجمع عقدة موضعية

تحتاج إلى إنشاء تجمع عقدة منفصل يدعم خدمة معالجة الدفعات. تجمع العقدة هذا عبارة عن تجمع عقدة موضعية يستخدم سياسة حذف «Delete» الإخلاء وسعر أقصى موضعي قدره -1.

  1. قم بتشغيل نفس الأمر az aks nodepool add كما في التمرين السابق لإضافة تجمع عقدة موضعية جديد إلى المجموعة. تحتاج إلى تغيير اسم تجمع العقدة وإضافة عدد قليل من المعلمات لتحديد تجمع العقدة هذا كتجمع عقدة موضعية.

    استخدم القيم التالية لتعيين معلمات تجمع العقد:

    • الاسم: batchprocpl2
    • الأولوية: Spot
    • نهج الإخلاء: Delete
    • السعر الأقصى الموضعي:-1

    قم بتشغيل الأمر التالي لإنشاء تجمع العقدة الموضعية:

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl2 \
        --enable-cluster-autoscaler \
        --max-count 3 \
        --min-count 1 \
        --priority Spot \
        --eviction-policy Delete \
        --spot-max-price -1 \
        --node-vm-size Standard_DS2_v2 \
        --no-wait
    

    ضع في اعتبارك أن هذا الطلب قد يفشل بسبب قيود السعة في الموقع الذي حددته.

  2. قم بتشغيل الأمر az aks nodepool show لإظهار تفاصيل تجمع العقدة الموضعية الجديدة لخدمة معالجة الدُفعات:

    az aks nodepool show \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl2
    

    فيما يلي مثال على الإخراج من الأمر.

    {
    "agentPoolType": "VirtualMachineScaleSets",
    "availabilityZones": null,
    "count": 3,
    "enableAutoScaling": true,
    "enableNodePublicIp": false,
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl2",
    "maxCount": 3,
    "maxPods": 110,
    "minCount": 1,
    "mode": "User",
    "name": "batchprocpl2",
    "nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
    "nodeLabels": {
        "kubernetes.azure.com/scalesetpriority": "spot"
    },
    "nodeTaints": [
        "kubernetes.azure.com/scalesetpriority=spot:NoSchedule"
    ],
    "orchestratorVersion": "1.17.9",
    "osDiskSizeGb": 128,
    "osType": "Linux",
    "provisioningState": "Creating",
    "proximityPlacementGroupId": null,
    "resourceGroup": "akscostsavinggrp",
    "scaleSetEvictionPolicy": "Delete",
    "scaleSetPriority": "Spot",
    "spotMaxPrice": -1.0,
    "tags": null,
    "type": "Microsoft.ContainerService/managedClusters/agentPools",
    "upgradeSettings": {
        "maxSurge": null
    },
    "vmSize": "Standard_DS2_v2",
    "vnetSubnetId": null
    }
    

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

    • يتم تعيين قيمة الخاصية enableAutoScaling إلى true.

    • يتم تعيين القيمتين maxCount وminCount.

    • تم تعيين الخاصية scaleSetEvictionPolicy على Delete.

    • تم تعيين الخاصية scaleSetPriority على Spot.

    • تم تعيين الخاصية spotMaxPrice على -1.

    • يتم تطبيق nodeLabels وnodeTaints على تجمع العقدة هذا. يمكنك استخدام هذه القيم لجدولة أحمال العمل على العقد في تجمع العقد.

تكوين مساحة اسم

  1. شغل الأمر kubectl create namespace لإنشاء مساحة اسم تسمى costsavings للتطبيق. ستستخدم مساحة الاسم هذه لتسهيل تحديد أحمال العمل.

    kubectl create namespace costsavings
    

    فيما يلي الإخراج من الأمر السابق:

    namespace/costsavings created
    

قم بجدولة قرن بترابط العقدة الموضعية

يمكنك جدولة وحدة للتشغيل على عقدة موضعية عن طريق إضافة الاختلاف والتقارب إلى ملف بيان توزيع الوحدة. عندما يتوافق الاختلاف وتقارب العقدة مع التسمية ومشكلة الإدخال المطبقة على العقد الموضعية الخاصة بك، تتم جدولة الوحدة على هذه العُقد.

يتم تعيين مشكلة إدخال إلى العُقد الموجودة في تجمع عقد موضعية، ويساوي ذلك kubernetes.azure.com/scalesetpriority=spot:NoSchedule وتسمية تساوي kubernetes.azure.com/scalesetpriority=spot. استخدم المعلومات الموجودة في زوج قيم المفاتيح هذا في قسم tolerations وaffinity من ملف بيان أحمال عمل YAML لديك. بوجود تجمع معالجة الدُفعات الثاني الذي تم تكوينه على أنه تجمع عقدة موضعية، يمكنك الآن إنشاء ملف نشر لجدولة أحمال العمل للتشغيل عليه.

  1. قم بإنشاء ملف بيان التطبيق لنشر Kubernetes المسمى spot-node-deployment.yaml باستخدام المحرر المتكامل:

    code spot-node-deployment.yaml
    

    تلميح

    يتضمن Cloud Shell محرر ملفات متكامل. يدعم محرر Cloud Shell ميزات، مثل تمييز اللغة ولوحة الأوامر ومستكشف الملفات. لإنشاء ملف بسيط وتحريره، ابدأ تشغيل المحرر من خلال تشغيل code . في محطة Cloud Shell. يؤدي هذا الإجراء إلى فتح المحرر مع تعيين دليل العمل النشط في الجهاز. لفتح ملف البيان مباشرة للتحرير السريع، قم بتشغيل code spot-node-deployment.yaml. يفتح هذا الأمر المحرر دون مستكشف الملفات.

  2. لصق النص التالي في الملف:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
      tolerations:
      - key: "kubernetes.azure.com/scalesetpriority"
        operator: "Equal"
        value: "spot"
        effect: "NoSchedule"
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: "kubernetes.azure.com/scalesetpriority"
                operator: In
                values:
                - "spot"
    
  3. اضغط على Ctrl+S لحفظ الملف، ثم اضغط على Ctrl+Q لإغلاق المحرر.

  4. شغل الأمر kubectl apply لتنفيذ التكوين ونشر التطبيق في مساحة اسم costsavings:

    kubectl apply \
    --namespace costsavings \
    -f spot-node-deployment.yaml
    

    فيما يلي الإخراج من الأمر السابق:

    pod/nginx created
    
  5. يمكنك إحضار مزيد من المعلومات حول الـ pod قيد التشغيل باستخدام العلامة -o wide عند تشغيل الأمر kubectl get pods. في هذه الحالة، تريد معرفة العقدة التي تمت جدولة القرن عليها. تأكد من الاستعلام عن الحاويات في costsavings مساحة الاسم.

    kubectl get pods --namespace costsavings -o wide
    

    يجب أن يكون الإخراج مشابهًا لما يلي:

    NAME    READY   STATUS    RESTARTS   AGE   IP           NODE                                   NOMINATED NODE   READINESS GATES
    nginx   1/1     Running   0          43s   10.244.3.3   aks-batchprocpl2-25254417-vmss000000   <none>           <none>
    

    لاحظ اسم العقدة، aks-batchprocpl2-25254417-vmss000000. هذه العقدة جزء من تجمع العقدة الموضعية batchprocpl2 التي قمت بإنشائها سابقًا.