تمرين - تكوين تجمعات العقد الموضعية باستخدام مقياس المجموعة التلقائي على نظام مجموعة AKS
تسمح لك تجمعات عقد المستخدم الموضعية بالوصول إلى سعة حساب Azure غير المستخدمة بأسعار أقل مع دعم سيناريوهات الحوسبة عالية الأداء.
في التمرين السابق، قمت بإنشاء تجمع عقدة مستخدم قياسي، واستخدمت مقياس المجموعة التلقائي لإدارة إنشاء العقدة، وقمت بتحجيم عدد العقد يدويا.
الخطوة التالية هي إضافة تجمع عقدة مستخدم موضعي مع التحجيم التلقائي لتقليل التكاليف التشغيلية لنظام المجموعة. يختلف استخدام نظام المجموعة استنادا إلى الموارد المطلوبة ولا يمكن التنبؤ بها، لذلك يمكنك إعداد القواعد لالتقاط الارتفاعات والانخفاضات. يتم نشر حمل العمل مع تمكين ترابط العقدة بحيث تتم جدولة الجراب على العقد في تجمع العقدة الموضعية.
إنشاء تجمع عقدة موضعية
تحتاج إلى إنشاء تجمع عقدة منفصل يدعم خدمة معالجة الدفعات. تجمع العقدة هذا هو تجمع عقدة موضعية يستخدم نهج حذف الإخلاء وسعر أقصى موضعي من -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
جدولة جراب مع ترابط العقدة الموضعية
يمكنك جدولة جراب للتشغيل على عقدة موضعية عن طريق إضافة تفاوت وتقارب إلى ملف بيان نشر pod. عندما يتوافق التفاوت وترابط العقدة مع الصبغة والتسمية المطبقة على العقد الموضعية، تتم جدولة الجراب على هذه العقد.
يتم تعيين لون للعقد في تجمع عقدة موضعية يساوي 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
يمكنك إحضار مزيد من المعلومات حول الجراب قيد التشغيل باستخدام علامة
-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
الذي قمت بإنشائه سابقا.