Azure Kubernetes Service Spot node pool

By | October 28, 2021

Spot nodepool, sport vm lerden oluşan node’ların oluşturduğu vm pool’udur. Sport VM’lerin oluşturduğu bu pool’u belli iş yükleriniz için kullanarak belirgin ölçüde bir maliyet tasarrufu yapmış olursunuz. Spot VM kullanımını belirli faktörler etkiler. Bunlar kullanılan region, kullanılan vm size’ı, kullanılacak gün gibi faktörlerdir.
Burada önemli olan kısım şu dur. Azure bu VM’ler için herhangi bir SLA vermemektedir. O anda o region içerisindeki kapasitede sizin belirttiğiniz size’da bir availability varsa bu VM’leri düşük fiyatta kullanmanıza izin verir.  AYrıca Spot kullanılan nodepool’lar arka planda aynı fault domain içerisinde tutulur. Bu da fiziksel olarak yaşanacak bir sorunda tüm node’ların etkileneceği anlamına gelir. Ayrıca herhangi bir high availability garantisi de verilmez.
Peki hangi tipte iş yükleri için bu sport nodepool’lar uygun?
Genelde bu tipte iş yükleri kesinti olması durumunda (Azure’un spot makineleri ihtiyaç duyduğunda geri alması durumunda) herhangi bir sorun yaşamazlar. Bunlar;

  • Batch processing
  • Dev/test environments
  • Large compute workloads

Limitations

  • Eğer spot nodepool kullanma niyetiniz varsa, bunu default nodepool olarak kullanamazsınız. Sport nodepool sadece secondary nodepool olarak kullanılabilir.
  • Spot nodepool’lar upgrade edilemezler. Eğer güncel versiyon ihtiyacınız varsa varolan nodepool ile yenisi replace etmeniz gerekir.
  • Spot nodepool’a sahip cluster’larda control plane ile  aynı anda upgrade işlemi yapılmaz.
  • Spot nodepool’un vm scaleset içerisinde olması gerekir.
  • Workload’u spot nodepool üzerinde schedule edebilmek için gerekli toleration ve affinity configurasyonlarının yapılması gerekir.
  • ScaleSetPriority ve SpotMaxPrice nodepool oluşturulduktan sonra değiştirilemez.

AKS cluster üzerine spot nodepool eklemek için aşağıdaki şekilde nodepool oluşturma komutunun çalıştırılması gerekir.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name spotnodepool \
    --priority Spot \
    --eviction-policy Delete \
    --spot-max-price -1 \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3 \
    --no-wait

Default olarak AKS cluster’a yeni nodepool eklediğinizde priority değeri regular olarak ayarlanır. Bu nodepool’un regular vm’lerden oluşacağı anlamına gelir. Eğer nodepool’Un spot VM’lerden oluşmasını isterseniz bu değeri “Spot” olarak ayarlamanız gerekir.

Spot node’lara sahip nodepool’lar üzerinde aşağıdaki taint konfigürasyonu otomatik olarak gelir.

kubernetes.azure.com/scalesetpriority=spot:NoSchedule

Bunun sebebi bu node’lar üzerinde business critical iş yüklerinizi çalıştırmayı engellemektir.Bu node’lar üzerinde schedule olacak olan belirli iş yüklerinin gereken toleration  tanımlarına sahip olmaları gerekir.

spec:
  containers:
  - name: spot-example
  tolerations:
  - key: "kubernetes.azure.com/scalesetpriority"
    operator: "Equal"
    value: "spot"
    effect: "NoSchedule"

Belirli iş yükleriniz için spot nodepool’ları cluster’ınıza ekleyerek maliyet avantajları elde edebilirsiniz.

Kaynak: https://docs.microsoft.com/en-us/azure/aks/spot-node-pool

Leave a Reply

Your email address will not be published. Required fields are marked *