Azure Kubernetes Service (AKS) gelişmiş zamanlayıcı özellikleri için en iyi yöntemler

Azure Kubernetes Service'de (AKS) kümeleri yönetirken genellikle ekipleri ve iş yüklerini yalıtmalısınız. Kubernetes zamanlayıcı tarafından sağlanan gelişmiş özellikler şunları denetlemenize olanak sağlar:

  • Belirli düğümlerde zamanlanabilecek podlar.
  • Çok podlu uygulamaların kümeye uygun şekilde nasıl dağıtılabildiği.

Bu en iyi yöntemler makalesi, küme işleçleri için gelişmiş Kubernetes zamanlama özelliklerine odaklanır. Bu makalede şunları öğreneceksiniz:

  • Düğümlerde zamanlanabilir podları sınırlamak için renk tonlarını ve toleransları kullanın.
  • Düğüm seçicileri veya düğüm benzitesi olan belirli düğümlerde çalıştırılacak podları tercih edin.
  • Podlar arası benzeşim veya benzeşimsizlik ile podları ayırın veya gruplayın.
  • Yalnızca zamanlanabilir GPU'ları olan düğümlerde GPU gerektiren iş yüklerinin zamanlamasını kısıtlayın.

İzleri ve toleransları kullanarak ayrılmış düğümler sağlama

En iyi yöntem kılavuzu:

Giriş denetleyicileri gibi yoğun kaynak kullanımlı uygulamalar için erişimi belirli düğümlerle sınırlayın. Düğüm kaynaklarını gerektiren iş yükleri için kullanılabilir durumda tutun ve düğümlerdeki diğer iş yüklerinin zamanlanmasına izin vermez.

AKS kümenizi oluşturduğunuzda, GPU desteğine veya çok sayıda güçlü CPU'ya sahip düğümler dağıtabilirsiniz. Daha fazla bilgi için bkz . AKS'de GPU'ları kullanma. Bu düğümleri makine öğrenmesi (ML) veya yapay zeka (AI) gibi büyük veri işleme iş yükleri için kullanabilirsiniz.

Bu düğüm kaynak donanımının dağıtılması genellikle pahalı olduğundan, bu düğümlerde zamanlanabilir iş yüklerini sınırlayın. Bunun yerine, giriş hizmetlerini çalıştırmak ve diğer iş yüklerini önlemek için kümedeki bazı düğümleri ayırın.

Farklı düğümler için bu destek, birden çok düğüm havuzu kullanılarak sağlanır. AKS kümesi bir veya daha fazla düğüm havuzunu destekler.

Kubernetes zamanlayıcı, düğümlerde çalıştırabilecek iş yüklerini kısıtlamak için renk tonları ve toleranslar kullanır.

  • Yalnızca belirli podların zamanlanabilir olduğunu belirtmek için düğüme bir renk tonu uygulayın.
  • Ardından bir poda tolerans uygulayarak bir düğümün tonlamasını tolere etmelerini sağlayın.

Aks kümesine pod dağıttığınızda Kubernetes yalnızca tolere etmeyle uyumlu olan düğümlerde pod zamanlar. Renk tonları ve toleranslar, podların uygun olmayan düğümlere zamanlanmadığından emin olmak için birlikte çalışır. Düğüme bir veya daha fazla renk tonu uygulanır ve düğüm, tolere etmeyen podları kabul etmeyecek şekilde işaretlenir.

Örneğin, GPU desteğine sahip düğümler için AKS kümenize bir düğüm havuzu eklediğinizi varsayalım. Gpu gibi bir ad ve ardından zamanlama için bir değer tanımlarsınız. Bu değerin NoSchedule olarak ayarlanması, Kubernetes zamanlayıcısının düğümde tanımsız toleransla pod zamanlamasını kısıtlar.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name taintnp \
    --node-taints sku=gpu:NoSchedule \
    --no-wait

Düğüm havuzundaki düğümlere uygulanan bir renk tonuyla, pod belirtiminde düğümlerde zamanlamaya izin veren bir tolerans tanımlarsınız. Aşağıdaki örnek, önceki adımda düğüm havuzuna uygulanan taint'i tolere etmek için ve'yi effect: NoSchedule tanımlarsku: gpu:

kind: Pod
apiVersion: v1
metadata:
  name: tf-mnist
spec:
  containers:
  - name: tf-mnist
    image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
    resources:
      requests:
        cpu: 0.5
        memory: 2Gi
      limits:
        cpu: 4.0
        memory: 16Gi
  tolerations:
  - key: "sku"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

Bu pod kullanılarak kubectl apply -f gpu-toleration.yamldağıtıldığında Kubernetes, düğümlerde taint uygulanmış podu başarıyla zamanlayabilir. Bu mantıksal yalıtım, küme içindeki kaynaklara erişimi denetlemenize olanak tanır.

Renk tonları uyguladığınızda, uygulama geliştiricileriniz ve sahiplerinizle birlikte çalışarak dağıtımlarında gerekli toleransları tanımlamalarına izin verin.

AKS'de birden çok düğüm havuzu kullanma hakkında daha fazla bilgi için bkz. AKS'de küme için birden çok düğüm havuzu oluşturma.

AKS'de renk tonlarının ve toleransların davranışı

AKS'de bir düğüm havuzunu yükselttiğinizde, yeni düğümlere uygulanırken renk tonlamaları ve toleranslar belirli bir deseni izler:

Azure Sanal Makine Ölçek Kümeleri kullanan varsayılan kümeler

Yeni ölçeklendirilen düğümlerin BELIRTILEN API düğüm renklerini almasını sağlamak için AKS API'sinden bir düğüm havuzunu bozabilirsiniz.

Şöyle düşünelim:

  1. İki düğümlü bir kümeyle başlarsınız: node1 ve node2.
  2. Düğüm havuzunu yükseltin.
  3. İki düğüm daha oluşturulur: node3 ve node4.
  4. Renk tonları sırasıyla geçirilir.
  5. Özgün düğüm1 ve düğüm2 silinir.

Sanal Makine Ölçek Kümeleri desteği olmayan kümeler

Yine şunu varsayalım:

  1. İki düğümlü bir kümeniz var: node1 ve node2.
  2. Düğüm havuzunu yükseltin.
  3. Ek bir düğüm oluşturulur: node3.
  4. node1'den alınan renk tonları node3'e uygulanır.
  5. node1 silindi.
  6. Özgün düğüm1 ile değiştirmek için yeni bir node1 oluşturulur.
  7. Node2 renk tonları yeni node1'e uygulanır.
  8. node2 silindi.

Özünde node1node3, node2 ise yeni düğüm1 olur.

AKS'de bir düğüm havuzunu ölçeklendirdiğinizde, renk tonları ve toleranslar tasarım gereği yerine getirilmez.

Düğüm seçicileri ve benzeşimi kullanarak pod zamanlamasını denetleme

En iyi yöntem kılavuzu

Düğüm seçicileri, düğüm benzimliği veya podlar arası benzimliği kullanarak düğümlerdeki podların zamanlamasını denetleyin. Bu ayarlar Kubernetes zamanlayıcısının düğümdeki donanım gibi iş yüklerini mantıksal olarak yalıtmasına olanak sağlar.

Tonlamalar ve toleranslar, kaynakları kesin bir kesme ile mantıksal olarak yalıtıyor. Pod bir düğümün renk ayrımını tolere etmiyorsa, düğümde zamanlanmaz.

Alternatif olarak düğüm seçicileri de kullanabilirsiniz. Örneğin, düğümleri yerel olarak bağlı SSD depolama alanını veya büyük miktarda belleği gösterecek şekilde etiketleyip pod belirtiminde bir düğüm seçici tanımlarsınız. Kubernetes bu podları eşleşen bir düğümde zamanlar.

Toleranslardan farklı olarak, eşleşen düğüm seçicisi olmayan podlar etiketlenmiş düğümlerde zamanlanabilir. Bu davranış düğümlerdeki kullanılmayan kaynakların kullanmasına izin verir, ancak eşleşen düğüm seçicisini tanımlayan podlara öncelik verir.

Şimdi yüksek miktarda belleğe sahip düğümler örneğine bakalım. Bu düğümler, yüksek miktarda bellek isteyen podların önceliklerini belirler. Kaynakların boşta kalmadığından emin olmak için diğer podların çalışmasına da izin verir. Aşağıdaki örnek komut, myResourceGroup içindeki myAKSCluster öğesine hardware=highmem etiketine sahip bir düğüm havuzu ekler. Bu düğüm havuzundaki tüm düğümler bu etikete sahiptir.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name labelnp \
    --node-count 1 \
    --labels hardware=highmem \
    --no-wait

Pod belirtimi daha sonra bir düğümdeki nodeSelector etiket kümesiyle eşleşen bir düğüm seçici tanımlamak için özelliğini ekler:

kind: Pod
apiVersion: v1
metadata:
  name: tf-mnist
spec:
  containers:
  - name: tf-mnist
    image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
    resources:
      requests:
        cpu: 0.5
        memory: 2Gi
      limits:
        cpu: 4.0
        memory: 16Gi
  nodeSelector:
      hardware: highmem

Bu zamanlayıcı seçeneklerini kullandığınızda, pod belirtimlerini doğru şekilde tanımlamalarına izin vermek için uygulama geliştiricilerinizle ve sahiplerinizle birlikte çalışın.

Düğüm seçicileri kullanma hakkında daha fazla bilgi için bkz. Düğümlere Pod Atama.

Düğüm benzitesi

Düğüm seçici, belirli bir düğüme pod atamak için temel bir çözümdür. Düğüm benzitesi daha fazla esneklik sağlayarak pod bir düğümle eşleştirilemiyorsa ne olacağını tanımlamanıza olanak sağlar. Şunları yapabilirsiniz:

  • Kubernetes zamanlayıcının etiketli bir konağa sahip bir podla eşleşmesi gerekir. Veya
  • Eşleşmeyi tercih edin , ancak eşleşme yoksa podunun farklı bir konakta zamanlamasına izin verin.

Aşağıdaki örnek, düğüm benzini requiredDuringSchedulingIgnoredDuringExecution olarak ayarlar. Bu benzite, Kubernetes zamanlamasının eşleşen etikete sahip bir düğüm kullanmasını gerektirir. Kullanılabilir düğüm yoksa, pod zamanlamanın devam etmesi için beklemesi gerekir. Pod'un farklı bir düğümde zamanlamasına izin vermek için, bunun yerine değeri tercih edilenDuringSchedulingIgnoreDuringExecution olarak ayarlayabilirsiniz:

kind: Pod
apiVersion: v1
metadata:
  name: tf-mnist
spec:
  containers:
  - name: tf-mnist
    image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
    resources:
      requests:
        cpu: 0.5
        memory: 2Gi
      limits:
        cpu: 4.0
        memory: 16Gi
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: hardware
            operator: In
            values:
            - highmem

Ayarın IgnoredDuringExecution bölümü, düğüm etiketleri değişirse podun düğümden çıkarılmaması gerektiğini gösterir. Kubernetes zamanlayıcı, düğümlerde önceden zamanlanmış podlar için değil yalnızca zamanlanan yeni podlar için güncelleştirilmiş düğüm etiketlerini kullanır.

Daha fazla bilgi için bkz. Benzeşim ve benzeşim karşıtı.

Podlar arası benzeşim ve benzeşim önleme

Kubernetes zamanlayıcısının iş yüklerini mantıksal olarak yalıtmaya yönelik son yaklaşımlarından biri podlar arası benzeşim veya benzeşimsizlik kullanmaktır. Bu ayarlar, podların eşleşmemesi veya mevcut bir eşleşen podu olan bir düğümde zamanlanması gerektiğini tanımlar. Varsayılan olarak, Kubernetes zamanlayıcı düğümler arasında bir çoğaltma kümesinde birden çok pod zamanlamayı dener. Bu davranışla ilgili daha belirli kurallar tanımlayabilirsiniz.

Örneğin, Redis için Azure Cache kullanan bir web uygulamanız vardır.

  • Kubernetes zamanlayıcısının çoğaltmaları düğümler arasında dağıtmasını istemek için pod benzeşimi önleme kurallarını kullanırsınız.
  • Her web uygulaması bileşeninin karşılık gelen önbellekle aynı konakta zamanlandığından emin olmak için benzimsellik kurallarını kullanırsınız.

Düğümler arasında pod dağıtımı aşağıdaki örneğe benzer:

Düğüm 1 Düğüm 2 Düğüm 3
webapp-1 webapp-2 webapp-3
önbellek-1 önbellek-2 önbellek-3

Podlar arası benzeşim ve benzeşim karşıtı, düğüm seçicilerinden veya düğüm benzeşiminden daha karmaşık bir dağıtım sağlar. Dağıtım ile kaynakları mantıksal olarak yalıtıyor ve Kubernetes'in düğümlerde podları nasıl zamanlamasını denetleyebilirsiniz.

bu web uygulamasının Redis için Azure Cache örnek içeren tam bir örneği için bkz. Aynı düğümde podları birlikte bulma.

Sonraki adımlar

Bu makale, gelişmiş Kubernetes zamanlayıcı özelliklerine odaklanmıştır. AKS'deki küme işlemleri hakkında daha fazla bilgi için aşağıdaki en iyi yöntemlere bakın: