Aracılığıyla paylaş


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

Azure Kubernetes Service'te (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ı denetlemenizi sağlar:

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

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

  • Düğümlerde zamanlanacak 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şimli veya benzeşimsiz podları birbirinden ayırın veya gruplayın.
  • GPU gerektiren iş yüklerinin zamanlamasını yalnızca zamanlanabilir GPU'lara sahip düğümlerde 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ştururken GPU desteği veya çok sayıda güçlü CPU ile düğüm 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 hangi iş yüklerinin çalışabileceğini kısıtlamak için tonlamalar 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 renk tonlarını tolere etmelerini sağlayın.

Aks kümesine bir pod dağıttığınızda Kubernetes yalnızca tolere etme özelliğiyle hizalanan düğümlerde pod zamanlar. Bozulmalar ve toleranslar, podların uygun olmayan düğümlere zamanlanmadığından emin olmak için birlikte çalışır. Bir düğüme bir veya daha fazla renk tonu uygulanır ve düğüm, tonlamaları 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 tolerans ile podları 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 taint ile, 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 effect: NoSchedule değerini tanımlarsku: gpu:

kind: Pod
apiVersion: v1
metadata:
  name: app
spec:
  containers:
  - name: app
    image: <your-workload>: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 bir 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 tonları 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 taint yapabilirsiniz.

Şö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 gelen renk tonları node3'e uygulanır.
  5. node1 silindi.
  6. Özgün node1 ile değiştirmek için yeni bir node1 oluşturulur.
  7. Node2 renk tonları yeni node1'e uygulanır.
  8. node2 silindi.

Temelde node1 node3, node2 ise yeni düğüm1 olur.

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

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

En iyi yöntem kılavuzu

Düğüm seçicileri, düğüm benzini veya podlar arası benziteyi 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.

Taints ve tolerations, kaynakları sabit bir kesme ile mantıksal olarak yalıtıyor. Pod bir düğümün taint'ini 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çiciyi tanımlayan podlara öncelik verir.

Şimdi yüksek miktarda belleğe sahip düğüm örneklerine göz atalım. Bu düğümler, yüksek miktarda bellek isteyen podların önceliğini 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: app
spec:
  containers:
  - name: app
    image: <your-workload>: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 atamaya yönelik 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 pod'un 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: app
spec:
  containers:
  - name: app
    image: <your-workload>: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 zaten 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 önleme.

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 mevcut eşleşen podu olan bir düğümde zamanlanmaması veya 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, aynı zamanda 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 ilgili önbellekle aynı konakta zamanlandığından emin olmak için benzite kurallarını kullanırsınız.

Düğümler arasında pod dağılı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, 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ıp Kubernetes'in düğümlerdeki podları nasıl zamanlamasını denetlersiniz.

Redis için Azure Cache örnek içeren bu web uygulamasının 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: