التمرين - تكوين عقد متعددة وتمكين مقياس إلى صفر على نظام مجموعة AKS

مكتمل

تتيح لك خدمة Azure Kubernetes إنشاء مجموعات عقد مختلفة لمطابقة أحمال عمل محددة بالعقد التي تعمل في كل مجموعة عقد.

تذكر من مثال تتبع الطائرات بدون طيار أن فريقك طور خدمة نمذجة تنبؤية جديدة تعالج معلومات مسار الطيران في الظروف الجوية القاسية وتنشئ مسارات طيران مثالية. تتطلب هذه الخدمة دعم الجهاز الظاهري (VM) المستند إلى وحدة معالجة الرسومات وتعمل فقط في أيام محددة خلال الأسبوع. يريد الفريق التأكد من عدم استخدام أجهزة VM عندما لا تعمل الخدمة.

ستقوم هنا بإنشاء مجموعة Kubernetes التي تديرها خدمة Azure Kubernetes (AKS). بعد ذلك، ستقوم بتكوين نظام المجموعة لدعم تجمعات عقد متعددة ويسمح للمجموعات بتحجيم العقد في تجمعات العقد. بعد ذلك، ستضيف تجمع عقدة ثان لدعم أحمال عمل المستخدم مع عدد العقد الديناميكية. وأخيرا، ستقوم بتحجيم عدد العقد إلى صفر لتقليل تكلفة العقد المستخدمة في نظام مجموعة AKS.

إنشاء مجموعة موارد جديدة

  1. تسجيل الدخول إلى Azure Cloud Shell باستخدام حسابك في Azure. حدد الإصدار Bash من Cloud Shell.

  2. ستقوم بإعادة استخدام القيم التي تقوم بإنشائها هنا خلال جميع التدريبات في هذه الوحدة النمطية. احفظ الإخراج للاستخدام في المستقبل.

  3. اختر منطقة لاستضافة مجموعة الموارد الخاصة بك. لا تتوفر الميزات من التدريبات اللاحقة في جميع المناطق. لهذا السبب، نوصي باستخدام 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.

  4. دون ملاحظة عن .AKS_CLUSTER_NAME خلال التدريبات، ستستخدم هذه القيمة لاحقا لإعدادات التنظيف والتكوين لنظام المجموعة.

    echo $AKS_CLUSTER_NAME
    
  5. إنشاء مجموعة موارد جديدة تسمى rg-akscostsaving. ستقوم بنشر جميع الموارد التي تقوم بإنشائها في هذه التدريبات في مجموعة الموارد هذه. تعمل مجموعة الموارد الفردية على تسهيل تنظيف الموارد بعد الانتهاء من الوحدة النمطية.

    az group create \
        --name $RESOURCE_GROUP \
        --location $REGION_NAME
    

قم بإنشاء مجموعة AKS

مع إنشاء مجموعة الموارد، يمكنك إنشاء مجموعات AKS داخل المجموعة. خطوتك الأولى هي الحصول على إصدار Kubernetes في منطقتك المحددة. تم تعيين هذا الإصدار لتكوين نظام المجموعة الخاص بك.

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

  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 يتم تعيين تلقائيا.

إضافة تجمع عقدة

  1. تحتوي المجموعة على تجمع عقدة واحد. أضف تجمع عقد ثانٍ باستخدام الأمر 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
    
  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.

  1. قم بتشغيل 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
    
  2. سرد العقد في تجمعات العقد.

    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 إلى الصفر.

لنلقِ نظرة على استراتيجية تحتاج فيها إلى تغيير حجم العقد، دون التحكم في الطلب بشكل مباشر.