Latihan - Mengonfigurasi kumpulan simpul spot dengan penskala otomatis kluster di kluster AKS

Selesai

Kumpulan simpul pengguna spot memungkinkan Anda mengakses kapasitas komputasi Azure yang tidak digunakan dengan harga yang lebih rendah dengan dukungan untuk skenario komputasi berkinerja tinggi.

Dalam latihan sebelumnya, Anda membuat kumpulan simpul pengguna standar, menggunakan autoscaler kluster untuk mengelola pembuatan simpul, dan menskalakan jumlah simpul secara manual.

Langkah selanjutnya adalah menambahkan kumpulan simpul pengguna spot dengan penskalaan otomatis untuk mengurangi biaya operasional kluster Anda. Penggunaan kluster bervariasi berdasarkan sumber daya yang diperlukan dan tidak dapat diprediksi, sehingga Anda menyiapkan aturan untuk menangkap lonjakan dan turunan. Beban kerja disebarkan dengan afinitas simpul diaktifkan sehingga pod dijadwalkan pada simpul di kumpulan simpul spot.

Membuat kumpulan simpul spot

Anda perlu membuat kumpulan simpul terpisah yang mendukung layanan pemrosesan batch. Kumpulan simpul ini adalah kumpulan simpul spot yang menggunakan kebijakan Hapus pengeluaran dan harga maksimum spot -1.

  1. Jalankan perintah az aks nodepool add yang sama seperti pada latihan sebelumnya untuk menambahkan kumpulan simpul spot baru ke kluster Anda. Anda perlu mengubah nama kumpulan simpul dan menambahkan beberapa parameter lagi untuk mengidentifikasi kumpulan simpul ini sebagai kumpulan simpul spot.

    Masukkan nilai berikut untuk menyetel parameter kumpulan node:

    • Nama: batchprocpl2
    • Prioritas: Spot
    • Kebijakan pengeluaran: Delete
    • Harga maksimum spot: -1

    Jalankan perintah berikut untuk membuat kumpulan simpul spot:

    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
    

    Perlu diingat bahwa permintaan ini mungkin gagal karena batasan kapasitas di lokasi yang Anda pilih.

  2. Jalankan perintah az aks nodepool show untuk menampilkan detail kumpulan simpul spot baru untuk layanan pemrosesan batch:

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

    Berikut contoh output dari perintah tersebut.

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

    Beberapa nilai dalam hasil ini sangat berbeda dari apa yang telah Anda lihat di kumpulan simpul sebelumnya. Mari kita tinjau item-item ini:

    • Nilai properti enableAutoScaling diatur ke true.

    • Baik nilai maxCount dan minCount ditetapkan.

    • Properti scaleSetEvictionPolicy diatur ke Delete.

    • Properti scaleSetPriority diatur ke Spot.

    • Properti spotMaxPrice diatur ke -1.

    • nodeLabels dan nodeTaints diterapkan ke kumpulan simpul ini. Anda menggunakan nilai ini untuk menjadwalkan beban kerja pada simpul di kumpulan simpul.

Mengonfigurasi namespace

  1. Jalankan perintah kubectl create namespace untuk membuat namespace bernama costsavings untuk aplikasi. Anda akan menggunakan namespace ini untuk mempermudah memilih beban kerja Anda.

    kubectl create namespace costsavings
    

    Berikut adalah output dari perintah sebelumnya:

    namespace/costsavings created
    

Menjadwalkan pod dengan afinitas simpul spot

Anda dapat menjadwalkan pod untuk dijalankan pada node spot dengan menambahkan toleransi dan afinitas ke file manifes penyebaran pod. Saat toleransi dan afinitas node sesuai dengan taint dan label yang diterapkan ke node spot Anda, pod dijadwalkan pada node ini.

Node dalam kumpulan node spot diberi taint yang sama dengan kubernetes.azure.com/scalesetpriority=spot:NoSchedule dan label yang sama dengan kubernetes.azure.com/scalesetpriority=spot. Gunakan informasi dalam pasangan kunci-nilai ini di bagian tolerations dan affinity dari file manifes YAML beban kerja Anda. Dengan kumpulan pemrosesan batch kedua yang dikonfigurasi sebagai kumpulan simpul spot, Anda sekarang dapat membuat file penyebaran untuk menjadwalkan beban kerja untuk berjalan di atasnya.

  1. Buat file manifes untuk penyebaran Kubernetes yang disebut spot-node-deployment.yaml dengan menggunakan editor terintegrasi:

    code spot-node-deployment.yaml
    

    Tip

    Cloud Shell menyertakan editor file terintegrasi. Editor Cloud Shell mendukung fitur seperti penyorotan bahasa, palet perintah, dan penjelajah file. Untuk pembuatan dan pengeditan file sederhana, mulai editor dengan menjalankan code . di terminal Cloud Shell. Tindakan ini membuka editor dengan direktori kerja aktif Anda yang ditetapkan di terminal. Untuk membuka file manifes Anda secara langsung untuk pengeditan cepat, jalankan code spot-node-deployment.yaml. Perintah ini akan membuka editor tanpa penjelajah file.

  2. Tempel teks berikut dalam file:

    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. Tekan Ctrl+S untuk menyimpan file, lalu tekan Ctrl+Q untuk menutup editor.

  4. Jalankan perintah kubectl apply untuk menerapkan konfigurasi dan menyebarkan aplikasi di costsavings namespace:

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

    Berikut adalah output dari perintah sebelumnya:

    pod/nginx created
    
  5. Anda dapat mengambil informasi lebih lanjut tentang pod yang sedang berjalan dengan menggunakan bendera -o wide saat menjalankan perintah kubectl get pods. Dalam hal ini, Anda ingin melihat di simpul mana pod tersebut dijadwalkan. Pastikan untuk membuat kueri pod di namespace costsavings.

    kubectl get pods --namespace costsavings -o wide
    

    Outputnya harus menyerupai berikut ini:

    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>
    

    Perhatikan nama simpul, aks-batchprocpl2-25254417-vmss000000. Simpul ini adalah bagian dari kumpulan simpul spot batchprocpl2 yang Anda buat sebelumnya.