تمرين - تكوين تجمعات العقد الموضعية باستخدام أداة التحجيم التلقائي لنظام المجموعة في مجموعة AKS
تسمح لك تجمعات عقد المستخدم الموضعية بالوصول إلى سعة حساب Azure غير المستخدمة بأسعار أقل مع دعم سيناريوهات الحوسبة عالية الأداء.
في التمرين السابق، قمت بإنشاء تجمع عقدة مستخدم قياسي، واستخدمت مقياس المجموعة التلقائي لإدارة إنشاء العقدة، وقمت بتحجيم عدد العقد يدويا.
الخطوة التالية هي إضافة تجمع عقدة مستخدم موضعي مع التحجيم التلقائي لتقليل التكاليف التشغيلية لنظام المجموعة. يختلف استخدام نظام المجموعة استنادا إلى الموارد المطلوبة ولا يمكن التنبؤ بها، لذلك يمكنك إعداد القواعد لالتقاط الارتفاعات والانخفاضات. يتم نشر حمل العمل مع تمكين ترابط العقدة بحيث تتم جدولة الجراب على العقد في تجمع العقدة الموضعية.
إنشاء تجمع عقدة موضعية
تحتاج إلى إنشاء تجمع عقدة منفصل يدعم خدمة معالجة الدفعات. تجمع العقدة هذا عبارة عن تجمع عقدة موضعية يستخدم سياسة حذف «Delete» الإخلاء وسعر أقصى موضعي قدره -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
ضع في اعتبارك أن هذا الطلب قد يفشل بسبب قيود السعة في الموقع الذي حددته.
- الاسم:
قم بتشغيل الأمر
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
على تجمع العقدة هذا. يمكنك استخدام هذه القيم لجدولة أحمال العمل على العقد في تجمع العقد.
تكوين مساحة اسم
شغل الأمر
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 لديك. بوجود تجمع معالجة الدُفعات الثاني الذي تم تكوينه على أنه تجمع عقدة موضعية، يمكنك الآن إنشاء ملف نشر لجدولة أحمال العمل للتشغيل عليه.
قم بإنشاء ملف بيان التطبيق لنشر Kubernetes المسمى
spot-node-deployment.yaml
باستخدام المحرر المتكامل:code spot-node-deployment.yaml
تلميح
يتضمن Cloud Shell محرر ملفات متكامل. يدعم محرر Cloud Shell ميزات، مثل تمييز اللغة ولوحة الأوامر ومستكشف الملفات. لإنشاء ملف بسيط وتحريره، ابدأ تشغيل المحرر من خلال تشغيل
code .
في محطة Cloud Shell. يؤدي هذا الإجراء إلى فتح المحرر مع تعيين دليل العمل النشط في الجهاز. لفتح ملف البيان مباشرة للتحرير السريع، قم بتشغيلcode spot-node-deployment.yaml
. يفتح هذا الأمر المحرر دون مستكشف الملفات.لصق النص التالي في الملف:
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"
اضغط على Ctrl+S لحفظ الملف، ثم اضغط على Ctrl+Q لإغلاق المحرر.
شغل الأمر
kubectl apply
لتنفيذ التكوين ونشر التطبيق في مساحة اسمcostsavings
:kubectl apply \ --namespace costsavings \ -f spot-node-deployment.yaml
فيما يلي الإخراج من الأمر السابق:
pod/nginx created
يمكنك إحضار مزيد من المعلومات حول الـ 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
التي قمت بإنشائها سابقًا.