Otomatik ölçeklendirici ile AKS spot düğüm havuzlarını kullanarak birden fazla düğüm havuzu yapılandırma

Tamamlandı

Azure, hem ölçeklenebilirlik hem de maliyet tasarrufu sağlayan ve kesintiye uğratılabilecek iş yükleri için ideal olan Azure Sanal Makine örnekleri sağlar. Ancak bu sanal makineler (VM’ler), kullanılmayan Azure işlem kapasitesine daha düşük fiyatlarla erişir, ancak diğer yandan yüksek performanslı işlem senaryolarını da destekler.

Şirketinizin insansız hava aracı izleme çözümü, Azure Kubernetes Service (AKS) üzerine birden çok kapsayıcılı uygulama ve hizmet olarak dağıtılmış durumda. Bu hizmetlerden biri, insansız hava aracı uçuş rotalarını zamanlayan bir toplu işlem hizmeti. Müşteri tabanınız birden genişlediği için toplu işlem hizmetinin isteklere yetişemediğini ve teslim edilmesi gereken verilerin biriktiğini görüyorsunuz. Bu durum gecikmelere ve müşteri sıkıntısına neden oluyor.

Toplu işlem hizmeti çoğaltmalarının sayısını otomatik olarak ölçeklendirmek, zamanında sipariş işlemeyi sağlar. Ancak bunun için işlem kaynak gereksinimlerini karşılayacak ek düğümler dağıtmanız gerekir. Azure İzleyici'de kullanım eğilimlerini inceledikten sonra bu düğümlerin yalnızca belirli saatlerde kullanıldığını ve maliyeti gereksiz yere artırdığını fark ediyorsunuz. Toplu işlem hizmeti, durum bilgisi olmayan bir hizmet ve istemci oturumu verilerini kaydetmiyor. Şu adımları izleyerek maliyet tasarrufu yapabileceğinizi fark ediyorsunuz:

  • Düşük maliyetli düğüm örnekleri kullanma.
  • Toplu işlem için yapılandırılmış olan düğüm havuzundaki düğüm sayısını otomatik olarak ölçeklendirme.

Şimdi AKS'de sunulan bu maliyet tasarrufu çözümünü mümkün kılan altyapıya göz atalım.

Azure'da spot sanal makine (spot VM) nedir?

Spot sanal makine, kullanılmayan Azure işlem kapasitesine yüksek indirim oranlarıyla erişmenizi sağlayan bir VM'dir. Spot VM'ler, Azure'daki mevcut düşük öncelikli VM'lerin yerini alır. Spot VM'leri şu görevleri yürüten iş yüklerini çalıştırmak için kullanabilirsiniz:

  • Yüksek performanslı hesaplama senaryoları, toplu işlem veya görüntü işleme uygulamaları.

  • Büyük ölçekli ve durum bilgisi olmayan uygulamalar.

  • Sürekli tümleştirme (CI) ve sürekli teslim (CD) iş yükleri dahil olmak üzere geliştirme/test ortamları.

Spot VM kullanılabilirlik seçenekleri

Spot VM'lerin kullanılabilirlik seçenekleri kapasite boyutu, bölge ve günün saati gibi faktörlere göre değişir. Azure, VM'leri yalnızca kullanılabilir kapasite olduğunda ayırır. Sonuç olarak, bu tür VM'ler için hizmet düzeyi sözleşmesi (SLA) yoktur ve yüksek kullanılabilirlik garantisi sunmaz.

Spot VM çıkarma ilkesi

Spot VM'ler için varsayılan çıkarma ilkesi, Serbest bırakma ilkesidir. Azure, bir bölgedeki kapasite sınırlandığında 30 saniyelik bir bildirimle spot VM'leri çıkartır. Serbest bırakma ilkesine sahip olan VM kümesi, çıkarma işleminin ardından durduruldu-serbest bırakıldı durumuna geçer. Spot kapasitesi yeniden sunulduğunda çıkarılan VM'leri tekrar dağıtabilirsiniz. Serbest bırakılmış bir VM, spot sanal CPU (vCPU) kotanızı kullanmaya devam eder ve temel alınan ayrılan disklerin ücretleri yine uygulanır.

Spot sanal makine ölçek kümesi nedir?

Spot sanal makine ölçek kümesi, Azure spot VM'lerini destekleyen sanal makine ölçek kümeleridir. Bu VM'ler, spot VM'ler ile aynı davranışlara sahiptir ancak aralarında tek bir fark vardır. Azure'da spot VM'ler için sanal makine ölçek kümesi desteğini kullandığınızda iki çıkarma ilkesinden birini seçmeniz gerekir:

  • Serbest bırakma: Serbest bırakma ilkesi tam olarak daha önce açıklandığı gibi çalışır.

  • Sil: Silme ilkesi disklerin maliyetinden kaçınmanıza ve kota sınırlarına girmemenize olanak tanır. Silme çıkarma ilkesini kullandığınızda çıkarılan VM'ler temel alınan diskleriyle birlikte silinir. Ölçek kümesinin otomatik ölçeklendirme özelliği artık yeni VM'ler oluşturarak VM çıkarma işlemini otomatik olarak dengelemeyi deneyebilir. VM'lerin oluşturulması garanti edilmez ancak çıkarılan VM'ler, vCPU kotanıza yansıtılmaz veya temel alınan diskler maliyet oluşturmaz.

    Burada en iyi yöntem, otomatik ölçeklendirme özelliğini yalnızca ölçek kümesi çıkarma ilkesini Silme olarak ayarladığınızda kullanmaktır.

Azure Kubernetes Service (AKS) üzerinde spot düğüm havuzu nedir?

Spot düğüm havuzu, spot sanal makine ölçek kümesi kullanan bir kullanıcı düğümü havuzudur. AKS şu durumlarda spot VM'leri destekler:

  • Kullanıcı düğümü havuzu oluşturmanız gerektiğinde.
  • Azure Spot VM'ler için sunulan sanal makine ölçek kümesi desteği teklifi ile sağlanan maliyet avantajlarından faydalanmak istediğinizde.

Spot düğüm havuzlarını şu amaçlar için kullanabilirsiniz:

  • Azure'daki kullanılmayan kapasiteden faydalanma.
  • Silme çıkarma ilkesiyle ölçek kümesi özelliklerini kullanma.
  • Saat başına ödemek istediğiniz maksimum fiyatı belirleme.
  • Spot düğüm havuzlarını kullanırken önerilen AKS Kubernetes kümesi otomatik ölçeklendiriciyi etkinleştirme.

Örneğin, insansız hava aracı izleme uygulamasının toplu işlem hizmetini desteklemek için bir spot kullanıcı düğümü havuzu oluşturabilir ve küme otomatik ölçeklendiricisini etkinleştirebilirsiniz. Daha sonra yatay pod ölçeklendiricisini yapılandırarak kaynak taleplerini karşılayacak daha fazla toplu işlem hizmeti dağıtabilirsiniz.

Düğüm talebi arttıkça küme otomatik ölçeklendiricisi, spot düğüm havuzundaki düğüm sayısını artırıp azaltabilir. Düğüm çıkarma işlemleri gerçekleşirse, ek düğümler hala gerekliyse küme otomatik ölçeklendiricisi düğüm sayısının ölçeğini artırmaya çalışır.

Spot düğüm havuzu sınırlamaları

AKS kümenize spot kullanıcı düğümü havuzu eklemeye karar vermeden önce aşağıdaki sınırlamaları göz önünde bulundurun:

  • Temel alınan spot ölçek kümesi yalnızca tek bir hata etki alanına dağıtılır ve yüksek kullanılabilirlik garantisi sunulmaz.
  • AKS kümesinde çoklu düğüm havuzu desteğinin etkinleştirilmiş olması gerekir.
  • Spot düğüm havuzlarını yalnızca kullanıcı düğümü havuzları olarak kullanabilirsiniz.
  • Spot düğüm havuzlarını yükseltemezsiniz.
  • Spot VM'lerin oluşturulması garanti edilmez. Spot düğümlerin oluşturulması, kümenin dağıtılmış olduğu Azure bölgesindeki kapasiteye ve kullanılabilir kotaya bağlıdır.

Spot düğüm havuzlarının yalnızca kesintiye uğratılabilecek iş yükleri için kullanılması gerektiğini unutmayın.

Önemli

Sponsorluk abonelikleri gibi bazı aboneliklerde spot VM ve spot düğüm havuzu oluşturma olanakları sınırlıdır. Kümeniz için spot düğüm havuzu oluşturma imkanına sahip olmayabilirsiniz.

AKS kümesine spot düğüm havuzu ekleme

Spot düğüm havuzu, AKS kümesinin sistem düğümü havuzu olamaz. İlk olarak, kümenizi oluşturmanız ve ardından komutunu kullanarak az aks nodepool add yeni bir kullanıcı düğümü havuzu eklemeniz gerekir.

Yeni düğüm havuzunu spot düğüm havuzu olarak yapılandırmak için ayarlamanız gereken birkaç parametre vardır.

Öncelik

--priority parametresi yeni düğüm havuzu için varsayılan olarak Regular şeklinde ayarlanır. Oluşturmakta olduğunuz yeni havuzun bir spot düğüm havuzu olduğunu belirtmek için değeri Spot olarak ayarlayın. Bu değeri oluşturma işlemi tamamlandıktan sonra değiştiremezsiniz.

Çıkarma ilkesi

Spot düğüm havuzunun sanal makine ölçek kümesi kullanması gerekir. Daha önce spot düğüm havuzunun bir spot ölçek kümesi kullandığını hatırlayın. Delete Ölçek kümesinin hem düğümü hem de düğümün kullandığı ayrılmış diski kaldırmasına izin vermek için olarak ayarlayın--eviction-policy. Oluşturma işleminden sonra bu değeri değiştiremezsiniz.

Çıkarma ilkesini olarak Deallocateayarlayabilirsiniz, ancak bu düğümler çıkarıldığında, kümeyi ölçeklendirmek veya yükseltmek için işlem kotanıza göre sayılır.

Spot düğüm için maksimum fiyat

Spot düğüm havuzları, spot düğüm başına saat başına ödemek istediğiniz maksimum miktara dokunarak maliyetleri iyileştirir. Güvenli miktarınızı ayarlamak için --spot-max-price parametresini kullanın. Bu değere ulaşıldığında yeni oluşturulan spot düğümler çıkarılır.

Bu değeri beş ondalık basam aya kadar herhangi bir pozitif tutara ayarlayabilir veya olarak -1ayarlayabilirsiniz. Değerini aşağıdaki --spot-max-price yollarla düğüm havuzunuzu etkileyecek şekilde -1 ayarlamak:

  • Düğümler, düğümün fiyatına göre çıkarılamaz.
  • Yeni düğümlerin maliyeti, spot düğümlerin geçerli fiyatına veya standart bir düğümün fiyatına (hangisi daha düşükse) bağlıdır.

Örneğin, değeri 0,98765 olarak ayarlarsanız, USD cinsinden bir düğümün maksimum fiyatı saatte 0,98765'tir. Tüketimi bu tutarı aşan düğümler çıkarılır.

Küme otomatik ölçeklendiricisini etkinleştirme

--enable-cluster-autoscaler parametresini kullanarak küme otomatik ölçeklendiricisini etkinleştirmeniz önerilir. Küme otomatik ölçeklendiricisini kullanmazsanız Azure kapasite kısıtlamaları nedeniyle düğümlerin çıkarılması sonucunda düğüm havuzundaki düğüm sayısının sıfıra düşmesi riskiyle karşı karşıya kalırsınız.

Minimum düğüm sayısı

--min-count parametresini kullanarak minimum düğüm sayısını 1 ile 100 arasında bir değer olarak ayarlayın. Küme otomatik ölçeklendiricisini etkinleştirirken minimum düğüm sayısını belirtmeniz gerekir.

Maksimum düğüm sayısı

--max-count parametresini kullanarak maksimum düğüm sayısını 1 ile 100 arasında bir değer olarak ayarlayın. Küme otomatik ölçeklendiricisini etkinleştirirken maksimum düğüm sayısını belirtmeniz gerekir.

Örnek Yapılandırma

Burada, en fazla 3 ve en az 1 sayısı olan bir spot düğüm havuzu ekleyen örnek az aks nodepool add bir komut verilmiş. Spot düğüm özelliklerini etkinleştirmek için kullanımına --enable-cluster-autoscaler dikkat edin.

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

Spot düğüm havuzlarına pod dağıtma

Kubernetes'te iş yükü dağıtırken iş yüklerinin çalıştırılabileceği ve çalıştırılamayacağı düğümleri belirtmek için zamanlayıcıya bilgi iletebilirsiniz. İş yükü zamanlamasını denetlemek için kısıtları, toleransı veya düğüm benzeşimini yapılandırmanız gerekir. Spot düğümleri belirli bir etiket ve kısıtla yapılandırılır.

Kısıt nedir?

Yalnızca belirli podların zamanlanabileceğini belirtmek için düğümlere bir kısıt uygulanır. Spot düğümleri kubernetes.azure.com/scalesetpriority:spot olarak ayarlanmış bir etiketle yapılandırılır.

Tolerans nedir?

Tolerans, bir pod'a, karşılık gelen renk tonuyla bir düğümde zamanlanacak bir poda izin vermek için uygulanan ancak gerekmeyen bir belirtimdir. Spot düğümleri kubernetes.azure.com/scalesetpriority=spot:NoSchedule olarak ayarlanmış bir düğüm kısıtıyla yapılandırılır.

Dekont

Renk tonları ve toleranslar, podların belirli bir düğüme yerleştirileceğini garanti etmez. Örneğin, bir düğümde renk tonu yoksa, toleransı olan pod boyanmamış düğümde zamanlanmış olabilir. Renk tonları ve toleranslarla bencelik belirtmek bu sorunu giderebilir.

Düğüm benzeşimi nedir?

Düğüm üzerinde zamanlanan podları açıklamak için düğüm benzeşimini kullanırsınız. Benzeşim, düğüm üzerinde tanımlanan etiketler kullanılarak belirtilir. Örneğin AKS'de sistem podları, spot düğümlerine karşı anti-benzeşimle yapılandırılır. Bu işlem podların bu düğümlerde zamanlanmasını engeller.

Pod bildirim dosyasında toleransı tanımlama

İş yükü bildirim dosyanızda bir tolerations sözlük girişi oluşturarak node-taint toleration belirtirsiniz. Bu sözlükte iş yükünün bu bölümde tolerans göstermesi gereken her bir düğüm kısıtı için aşağıdaki özellikleri ayarlayabilirsiniz:

Özellik Açıklama
key Düğümde belirtilen bir düğüm kısıtı anahtar-değer çifti tanımlar. Örneğin spot düğüm havuzunda anahtar-değer çifti kubernetes.azure.com/scalesetpriority:spot olur. Anahtar ise kubernetes.azure.com/scalesetpriority olur.
operator Toleransın bir kısıtla eşleşmesini sağlar. Varsayılan işleç Equal olur. Ayrıca tolerans eşleşmesi için Exists ifadesini belirtebilirsiniz. Ancak Exists ifadesi kullanıldığında arkasından gelen özellik (value) belirtilmez.
value Düğümde belirtilen node-taint anahtar-değer çiftinin değer bölümünü temsil eder. Örneğin anahtar-değer çifti kubernetes.azure.com/scalesetpriority:spot olan spot düğüm havuzunda değer spot olur.
effect Podun zamanlamasının sistemde nasıl işlendiğini gösterir. Üç seçenek vardır: NoSchedule, PreferNoSchedule ve NoExecute. NoSchedule , sistemin podu zamanlayamamasını sağlar. PreferNoSchedule sistemin podu zamanlamamaya çalışmasını sağlar. NoExecute ise kısıtlı düğümde çalışan podları çıkarır veya hiç pod zamanlaması yapmaz.

Pod bildirim dosyasında düğüm benzini tanımlama

İş yükü bildirim dosyanızda bir affinity giriş oluşturarak benzini belirtirsiniz. Bu girdide, bir iş yükünün eşleşmesi gereken her düğüm etiketi için aşağıdaki özellikleri ayarlarsınız:

Özellik Açıklama
nodeAffinity Pod için düğüm benzimliği zamanlama kurallarını açıklar.
requiredDuringSchedulingIgnoredDuringExecution Bu alan tarafından belirtilen benşim gereksinimleri zamanlama zamanında karşılanmazsa, pod düğüme zamanlanamaz. Pod yürütme sırasında (örneğin, bir güncelleştirme nedeniyle) bu alan tarafından belirtilen benşim gereksinimleri karşılanmazsa, sistem podu düğümünden çıkarma girişiminde bulunabilir.
nodeSelectorTerms Düğüm seçici terimlerinin listesi. Döndürülen terimler, tüm filtreler yerine filtrelerden herhangi biriyle eşleşer.
matchExpressions Düğümün etiketlerine göre düğüm seçici gereksinimlerinin listesi.
key Seçicinin uygulandığı etiket anahtarı. Anahtar şudur: kubernetes.azure.com/scalesetpriority
operator Bir anahtarın bir değer kümesiyle ilişkisini temsil eder. Geçerli işleçler : In, NotIn, Exists, DoesNotExistGtve Lt
values Düğüm etiketi anahtar-değer çiftinin düğümde belirtilen değer bölümünü temsil eder. anahtar-değer çifti kubernetes.azure.com/scalesetpriority:spotolan bir spot düğüm havuzunda değeri şeklindedir spot.

Aşağıda spot düğüm havuzları için tolerans ve benşim eklenmiş bir iş yükü örneği verilmiştir.

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"

Bilgilerinizi kontrol edin

1.

Çevrimiçi siparişleri işleyen ve Azure Kubernetes Service (AKS) kümesi üzerinde çalışan bir durum bilgisi olmayan hizmete sahip olduğunuzu düşünelim. Kümenin işlem maliyetlerini iyileştirmek için AKS kümesinde spot düğüm havuzlarını kullanmaya karar veriyorsunuz. AKS kümesine spot düğüm havuzu eklemek için ne yapmanız gerekir?

2.

Yukarıdaki soruda bahsedilen hizmet için spot düğüm havuzunu yapılandırma aşamasında en uygun maliyetli çıkarma ilkesi seçeneği hangisi olacaktır?

3.

Yukarıdaki sorularda bahsedilen hizmet için iş yüklerinin spot kullanıcı düğümü havuzunun düğümlerinde zamanlanmasını nasıl sağlayabilirsiniz?