التمرين - تكوين عقد متعددة وتمكين مقياس إلى صفر على نظام مجموعة AKS
تتيح لك خدمة Azure Kubernetes إنشاء مجموعات عقد مختلفة لمطابقة أحمال عمل محددة بالعقد التي تعمل في كل مجموعة عقد.
تذكر من مثال تتبع الطائرات بدون طيار أن فريقك طور خدمة نمذجة تنبؤية جديدة تعالج معلومات مسار الطيران في الظروف الجوية القاسية وتنشئ مسارات طيران مثالية. تتطلب هذه الخدمة دعم الجهاز الظاهري (VM) المستند إلى وحدة معالجة الرسومات وتعمل فقط في أيام محددة خلال الأسبوع. يريد الفريق التأكد من عدم استخدام أجهزة VM عندما لا تعمل الخدمة.
ستقوم هنا بإنشاء مجموعة Kubernetes التي تديرها خدمة Azure Kubernetes (AKS). بعد ذلك، ستقوم بتكوين نظام المجموعة لدعم تجمعات عقد متعددة ويسمح للمجموعات بتحجيم العقد في تجمعات العقد. بعد ذلك، ستضيف تجمع عقدة ثان لدعم أحمال عمل المستخدم مع عدد العقد الديناميكية. وأخيرا، ستقوم بتحجيم عدد العقد إلى صفر لتقليل تكلفة العقد المستخدمة في نظام مجموعة AKS.
إنشاء مجموعة موارد جديدة
تسجيل الدخول إلى Azure Cloud Shell باستخدام حسابك في Azure. حدد الإصدار Bash من Cloud Shell.
ستقوم بإعادة استخدام القيم التي تقوم بإنشائها هنا خلال جميع التدريبات في هذه الوحدة النمطية. احفظ الإخراج للاستخدام في المستقبل.
اختر منطقة لاستضافة مجموعة الموارد الخاصة بك. لا تتوفر الميزات من التدريبات اللاحقة في جميع المناطق. لهذا السبب، نوصي باستخدام eastus كمنطقتك. إذا اخترت استخدام قيمة مختلفة، فقم بتغيير قيمة
REGION_NAME
.قم بتشغيل الأوامر التالية لتسجيل المتغيرات:
REGION_NAME=eastus RESOURCE_GROUP=rg-akscostsaving AKS_CLUSTER_NAME=akscostsaving-$RANDOM
تلميح
يمكنك استخدام الزر نسخ لنسخ الأوامر إلى الحافظة. للصق، انقر بزر الماوس الأيمن على سطر جديد في محطة Cloud Shell وحدد Paste، أو استخدم اختصار لوحة المفاتيح Shift + Insert (⌘+V في macOS).
يمكنك التحقق من كل قيمة عن طريق تشغيل
echo
الأمر؛ على سبيل المثال،echo $REGION_NAME
.دون ملاحظة عن .
AKS_CLUSTER_NAME
خلال التدريبات، ستستخدم هذه القيمة لاحقا لإعدادات التنظيف والتكوين لنظام المجموعة.echo $AKS_CLUSTER_NAME
إنشاء مجموعة موارد جديدة تسمى rg-akscostsaving. ستقوم بنشر جميع الموارد التي تقوم بإنشائها في هذه التدريبات في مجموعة الموارد هذه. تعمل مجموعة الموارد الفردية على تسهيل تنظيف الموارد بعد الانتهاء من الوحدة النمطية.
az group create \ --name $RESOURCE_GROUP \ --location $REGION_NAME
قم بإنشاء مجموعة AKS
مع إنشاء مجموعة الموارد، يمكنك إنشاء مجموعات AKS داخل المجموعة. خطوتك الأولى هي الحصول على إصدار Kubernetes في منطقتك المحددة. تم تعيين هذا الإصدار لتكوين نظام المجموعة الخاص بك.
للحصول على إصدار Kubernetes، قم بتشغيل
az aks get-versions
الأمر . يقوم الاستعلام التالي بإرجاع إصدار Kubernetes غير معاينة. قم بتخزين هذه القيمة في متغير Bash المسمىVERSION
. لاسترداد رقم الإصدار وتخزينه، قم بتشغيل الأمر التالي:VERSION=$(az aks get-versions \ --location $REGION_NAME \ --query "values[?isPreview==null].version | [-1]" \ --output tsv) echo $VERSION
az aks create
قم بتشغيل الأمر لإنشاء نظام مجموعة AKS. يعمل نظام المجموعة مع عقدتين في تجمع عقدة النظام. قد يستغرق هذا الأمر بضع دقائق حتى يكتمل.az aks create \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --location $REGION_NAME \ --kubernetes-version $VERSION \ --node-count 2 \ --load-balancer-sku standard \ --vm-set-type VirtualMachineScaleSets \ --generate-ssh-keys
يحتوي الأمر
az aks create
على العديد من المعلمات التي تتيح التكوين الدقيق لمجموعة Kubernetes. هناك معلمتان مهمتان في تكوين الدعم الصحيح في مجموعتك للتحجيم وتجمعات العقد المتعددة:المعلمة والقيمة الوصف --load-balancer-sku standard
دعم موازن التحميل الافتراضي في AKS هو basic
. لا يتم دعم موازن التحميلbasic
عند استخدام مجموعات عقدة متعددة. تعيين القيمة إلىstandard
.--vm-set-type VirtualMachineScaleSets
لاستخدام ميزات التحجيم في AKS، يلزم وجود مجموعات قياس جهاز ظاهري. تتيح هذه المعلمة دعم مجموعات القياس. لاحظ أنه تم تكوين عقدتين في تجمع العقدة الافتراضي باستخدام المعلمة
--node-count 2
. تذكر من الوصف السابق أن خدمات النظام الأساسية تعمل عبر تجمع عقد هذا النظام هذا. من المهم أن تستخدم مجموعات الإنتاج--node-count 3
على الأقل لضمان الموثوقية في تشغيل نظام المجموعة. نحن نقوم باستخدام عقدتين فقط هنا وذلك لاعتبارات التكلفة في هذا التمرين.قم بتشغيل الأمر
az aks nodepool list
لسرد تجمعات العقد في المجموعة الجديدة:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
فيما يلي مثال على الإخراج من الأمر:
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
لاحظ أنه تم تعيين تجمع
mode
العقدة إلىSystem
وأنname
يتم تعيين تلقائيا.
إضافة تجمع عقدة
تحتوي المجموعة على تجمع عقدة واحد. أضف تجمع عقد ثانٍ باستخدام الأمر
az aks nodepool add
. شغل الأمر في هذه الخطوة لإنشاء تجمع عقد مستخدم مع ثلاث عقد والاسمbatchprocpl
. ضع في اعتبارك أن أسماء تجمعات العقد يجب أن تبدأ بحرف صغير وأن تحتوي فقط على أحرف أبجدية رقمية. تقتصر أسماء تجمعات العقد على 12 حرفًا لمجموعات عقد Linux وستة أحرف لمجمعات عقد Windows.شغّل الأمر التالي:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl \ --node-count 2
قم بتشغيل الأمر
az aks nodepool list
لسرد تجمع العقدة الجديد في المجموعة الجديدة:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
فيما يلي مثال على الإخراج من الأمر:
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl", "mode": "User", "name": "batchprocpl", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": { "maxSurge": null }, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null }, { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
لاحظ أنه تم تعيين
mode
من تجمع العقدة الجديد علىUser
وأنname
معين علىbatchprocpl
.
تغيير عدد عقدة تجمع العقدة إلى الصفر
az aks nodepool scale
قم بتشغيل الأمر لتوسيع نطاق العقد في تجمع عقدة يدويا.
قم بتشغيل الأمر az aks nodepool scale
واستخدم المعلمة --node-count
لتعيين قيمة عدد العقد إلى 0.
فيما يلي مثال على الأمر:
az aks nodepool scale \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name batchprocpl \
--node-count 0
فيما يلي مثال على الإخراج من الأمر:
{
"agentPoolType": "VirtualMachineScaleSets",
"availabilityZones": null,
"count": 0,
"enableAutoScaling": null,
"enableNodePublicIp": false,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl",
"maxCount": null,
"maxPods": 110,
"minCount": null,
"mode": "User",
"name": "batchprocpl",
"nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
"nodeLabels": null,
"nodeTaints": null,
"orchestratorVersion": "1.17.9",
"osDiskSizeGb": 128,
"osType": "Linux",
"provisioningState": "Succeeded",
"proximityPlacementGroupId": null,
"resourceGroup": "rg-akscostsaving",
"scaleSetEvictionPolicy": null,
"scaleSetPriority": null,
"spotMaxPrice": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"upgradeSettings": {
"maxSurge": null
},
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null
}
لاحظ أن قيمة معلمة تجمع count
العقدة معينة إلى 0، وأن enableAutoScaling
القيمة معينة إلى null
. لجدولة أحمال العمل، يجب عليك زيادة عدد العقد لتجمع العقدة هذا يدويا، لأن إنشاء العقدة لا يحدث تلقائيا بشكل افتراضي.
تكوين سياق Kubernetes
في الإخراج من الأمر السابق، تم تعيين عدد تجمع العقدة على 0. يمكنك تأكيد العقد المتاحة في نظام المجموعة عن طريق تشغيل الأمر kubectl get nodes
.
قم بتشغيل
kubectl
للتفاعل مع خادم واجهة برمجة تطبيقات نظام المجموعة الخاص بك. يجب عليك تكوين سياق نظام مجموعة Kubernetes للسماح لـkubectl
بالاتصال. يحتوي السياق على عنوان نظام المجموعة ومستخدم ومساحة اسم. شغل الأمرaz aks get-credentials
لتكوين سياق Kubernetes في Cloud Shell.استرجع بيانات اعتماد المجموعة عن طريق تشغيل هذا الأمر:
az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME
فيما يلي مثال على الإخراج من الأمر.
Merged "akscostsaving-17835" as current context in /home/user/.kube/config
سرد العقد في تجمعات العقد.
kubectl get nodes
فيما يلي مثال على إخراج الأمر:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37990379-vmss000000 Ready agent 32m v1.17.9 aks-nodepool1-37990379-vmss000001 Ready agent 32m v1.17.9
لاحظ أنه على الرغم من أن الأمر
az aks nodepool list
يسرد مجموعتين من تجمعات العقد، فإنه لا يوجد سوى عقدتين متاحتين في نظام المجموعة، وكلتيهما منnodepool1
.
لتحسين التكاليف على AKS عند إدارة متطلبات حمل العمل مباشرةً، تتمثل الاستراتيجية الجيدة في:
- مقياس عدد العقد في تجمعات العقد يدويًا.
- تغيير تجمعات عقدة المستخدم القائمة على NV إلى الصفر.
لنلقِ نظرة على استراتيجية تحتاج فيها إلى تغيير حجم العقد، دون التحكم في الطلب بشكل مباشر.