Alıştırma - Bir AKS kümesindeki spot düğüm havuzlarını küme otomatik ölçeklendiricisiyle yapılandırma

Tamamlandı

Spot kullanıcı düğümü havuzları, yüksek performanslı bilgi işlem senaryolarına yönelik destekle kullanılmayan Azure işlem kapasitesine daha düşük fiyatlarla erişmenizi sağlar.

Önceki alıştırmada standart bir kullanıcı düğümü havuzu oluşturdunuz, düğüm oluşturmayı yönetmek için küme otomatik ölçeklendiricisini kullandınız ve düğüm sayısını el ile ölçeklendirdiniz.

Sonraki adım, kümenizin işletim maliyetlerini azaltmak için otomatik ölçeklendirmeye sahip bir spot kullanıcı düğümü havuzu eklemenizdir. Küme kullanımı gereken kaynaklara göre değişir ve tahmin edilebilir değildir, bu nedenle ani artışları ve düşüşleri yakalamak için kurallar ayarlarsınız. İş yükü düğüm benzimliği etkin olarak dağıtılır, böylece pod spot düğüm havuzundaki düğümlerde zamanlanır.

Spot düğüm havuzu oluşturma

Toplu işlem hizmetini destekleyen ayrı bir düğüm havuzu oluşturmanız gerekir. Bu düğüm havuzu, Silme çıkarma ilkesini ve -1 spot maksimum fiyatını kullanan bir spot düğüm havuzudur.

  1. Önceki alıştırmada çalıştırdığınız az aks nodepool add komutunu çalıştırarak kümenize yeni bir spot düğüm havuzu ekleyin. Düğüm havuzu adını değiştirmeniz ve bu düğüm havuzunu spot düğüm havuzu olarak tanımlamak için birkaç parametre daha eklemeniz gerekir.

    Düğüm havuzunun parametrelerini ayarlamak için aşağıdaki değerleri girin:

    • Ad: batchprocpl2
    • Öncelik: Spot
    • Çıkarma ilkesi: Delete
    • Spot maksimum fiyatı: -1

    Spot düğüm havuzunu oluşturmak için aşağıdaki komutu çalıştırın:

    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
    

    Seçtiğiniz konumdaki kapasite kısıtlamaları nedeniyle bu isteğin başarısız olabileceğini unutmayın.

  2. Yeni toplu işlem hizmeti spot düğüm havuzunun ayrıntılarını göstermek için az aks nodepool show komutunu çalıştırın:

    az aks nodepool show \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl2
    

    Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz.

    {
    "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
    }
    

    Bu sonuçta önceki düğüm havuzlarında gördüklerinizden farklı olan birkaç değer vardır. Şimdi bu öğeleri gözden geçirelim:

    • enableAutoScaling özelliğinin değeri true olarak ayarlanmıştır.

    • Hem maxCount hem de minCount değerleri ayarlanmıştır.

    • scaleSetEvictionPolicy özelliği Delete olarak ayarlanmıştır.

    • scaleSetPriority özelliği Spot olarak ayarlanmıştır.

    • spotMaxPrice özelliği -1 olarak ayarlanmıştır.

    • Bu düğüm havuzuna nodeLabels ve nodeTaints uygulanmıştır. Bu değerleri kullanarak bu düğüm havuzundaki düğümlerde iş yükü zamanlayabilirsiniz.

Ad alanı yapılandırma

  1. kubectl create namespace Komutunu çalıştırarak uygulama için adlı costsavings bir ad alanı oluşturun. Bu ad alanını, iş yüklerinizi seçme konusunda kolaylık sağlayacak.

    kubectl create namespace costsavings
    

    Yukarıdaki komutun çıktısı aşağıdadır:

    namespace/costsavings created
    

Spot düğümü benzeşimine sahip bir pod zamanlama

Pod dağıtım bildirim dosyasına tolerans ve bencelik ekleyerek bir podu spot düğümde çalışacak şekilde zamanlayabilirsiniz. Tolerans ve düğüm benzimliği spot düğümlerinize uygulanan renk tonu ve etikete karşılık geldiğinde, pod bu düğümlerde zamanlanır.

Spot düğüm havuzundaki düğümlere eşit olan bir renk tonu ve değerine eşit kubernetes.azure.com/scalesetpriority=spot:NoSchedulekubernetes.azure.com/scalesetpriority=spotbir etiket atanır. İş yüklerinizin YAML bildirim dosyasının tolerations ve affinity bölümündeki bu anahtar-değer çiftindeki bilgileri kullanın. İkinci toplu işlem havuzunu spot düğüm havuzu olarak yapılandırdığınız için üzerinde çalıştırılacak iş yüklerini zamanlama amacıyla bir dağıtım dosyası oluşturabilirsiniz.

  1. Tümleşik düzenleyiciyi kullanarak Kubernetes dağıtımı için spot-node-deployment.yaml adlı bir bildirim dosyası oluşturun:

    code spot-node-deployment.yaml
    

    Bahşiş

    Cloud Shell, tümleşik dosya düzenleyicisine sahiptir. Cloud Shell düzenleyicisi dil vurgulama, komut paleti ve dosya gezgini gibi özellikleri destekler. Basit dosya oluşturma ve düzenleme işlemleri için Cloud Shell terminalinde code . komutunu çalıştırarak düzenleyiciyi başlatabilirsiniz. Bu eylem, terminalde etkin çalışma dizininiz ayarlanmış bir şekilde eylem düzenleyiciyi açar. Hızlı düzenleme yapmak için bildirim dosyanızı doğrudan açmak isterseniz code spot-node-deployment.yaml komutunu çalıştırın. Bu komut, düzenleyiciyi dosya gezgini olmadan açar.

  2. Aşağıdaki metni dosyaya yapıştırın:

    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. Dosyayı kaydetmek için Ctrl+S tuşlarına basın, ardından düzenleyiciyi kapatmak için Ctrl+Q tuşlarına basın.

  4. Yapılandırmayı kubectl apply uygulamak ve uygulamayı costsavings ad alanına dağıtmak için komutunu çalıştırın:

    kubectl apply \
    --namespace costsavings \
    -f spot-node-deployment.yaml
    

    Yukarıdaki komutun çıktısı aşağıdadır:

    pod/nginx created
    
  5. Komutunu çalıştırırken kubectl get pods bayrağını -o wide kullanarak çalışan pod hakkında daha fazla bilgi getirebilirsiniz. Bu durumda podun hangi düğüm üzerinde zamanlandığını görmek istiyorsunuz. costsavings ad alanındaki podları sorguladığınızdan emin olun.

    kubectl get pods --namespace costsavings -o wide
    

    Çıkış aşağıdakine benzemelidir:

    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>
    

    Düğümün adına (aks-batchprocpl2-25254417-vmss000000) dikkat edin. Bu düğüm, daha önce oluşturduğunuz batchprocpl2 spot düğüm havuzunun bir parçasıdır.