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

مكتمل

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

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

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

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

تحتاج إلى إنشاء تجمع عقدة منفصل يدعم خدمة معالجة الدفعات. تجمع العقدة هذا هو تجمع عقدة موضعية يستخدم نهج حذف الإخلاء وسعر أقصى موضعي من -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.

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

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

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

    kubectl create namespace costsavings
    

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

    namespace/costsavings created
    

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

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

يتم تعيين لون للعقد في تجمع عقدة موضعية يساوي kubernetes.azure.com/scalesetpriority=spot:NoSchedule وتسمية تساوي kubernetes.azure.com/scalesetpriority=spot. استخدم المعلومات الموجودة في زوج قيم المفاتيح هذا في قسم tolerationsaffinity من ملف بيان 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. يمكنك إحضار مزيد من المعلومات حول الجراب قيد التشغيل باستخدام علامة -o wide عند تشغيل الأمر kubectl get pods. في هذه الحالة، تريد معرفة العقدة التي تم جدولة الجراب عليها. تأكد من الاستعلام عن 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 الذي قمت بإنشائه سابقا.