Azure Kubernetes Service (AKS) üzerinde zamanlayıcı profilleri kullanan Bin Pack düğümleri (önizleme)

Bu makalede, NodeResourcesFit ağaç içi zamanlama eklentisini kullanarak Azure Kubernetes Service (AKS) kümelerinizin düğüm kullanımını geliştirmek için düğümlerinizi bin-packing yöntemiyle nasıl paketleyeceğinizi öğreneceksiniz. Varsayılan AKS zamanlayıcı, zamanlama podlarıyla daha düşük kullanıma sahip düğümlere öncelik veren bir NodeResourcesFit:LeastAllocated modda çalışır. AKS'de Yapılandırılabilir Zamanlayıcı Profilleri, bu varsayılan davranışı değiştirmenize ve daha yüksek kullanıma sahip düğümlere öncelik vermek için yapılandırmada ince ayar yapmanızı sağlar. Bu belge üç farklı özel zamanlayıcı profilini kapsarken, düğüm etkin noktalarını azaltırken kullanımı iyileştirmeye yönelik en iyi yöntem önerisini vurgular.

Düğüm bölme paketleme, podları düğüm havuzuna yaymak veya düğümleri erken ölçeklendirmek yerine düğümlerdeki pod yoğunluğunun artırılmasıyla kaynak kullanımını en üst düzeye çıkaran bir zamanlama stratejisidir. Kap yerleştirme, boşa harcanan kaynakların en aza indirilmesine yardımcı olur ve boşta olan veya az kullanılan düğümleri korumanın operasyonel maliyetini azaltabilir. Veriler CPU ve belleğin genellikle fazla istenen kaynaklar olduğunu gösterdiği için düğüm kullanımını geliştirmek kritik önem taşır. Buna ek olarak, GPU benimsemesi büyüdükçe, hızlandırıcıların verimli kullanımı göreli kıtlık ve maliyet nedeniyle eşit derecede kritik hale gelir.

Sınırlamalar

  • AKS şu anda üçüncü taraf zamanlayıcıların veya ağaç dışı zamanlama eklentilerinin dağıtımını yönetmemektedir.
  • AKS, zamanlayıcıyı hedefleyen aks-system ağaç içi zamanlama eklentilerini desteklemez. Bu kısıtlama, kümenizde etkinleştirilmiş AKS eklentilerinde beklenmeyen değişikliklerin önlenmesine yardımcı olmak için uygulanır. Ayrıca, adlı profilebir aks-system tanımlayamazsınız.

Önkoşullar

AKS kümesinde zamanlayıcı profili yapılandırmasını etkinleştirme

Yeni veya mevcut bir AKS kümesinde zamanlama profili yapılandırmasını etkinleştirebilirsiniz.

  1. az aks create bayrağı ile zamanlayıcı profili yapılandırması etkinleştirilmiş bir AKS kümesi oluşturmak için --enable-upstream-kubescheduler-user-configuration komutunu kullanın.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<aks-cluster-name>
    
    # Create an AKS cluster with schedule profile configuration enabled
    az aks create \
    --resource-group $RESOURCE_GROUP \ 
    --name $CLUSTER_NAME \
    --enable-upstream-kubescheduler-user-configuration \
    --generate-ssh-keys
    
  2. Oluşturma işlemi tamamlandıktan sonra komutunu kullanarak kümeye bağlanın az aks get-credentials .

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    

Zamanlayıcı denetleyicisinin yüklenmesini doğrulama

  • AKS kümenizde özelliği etkinleştirdikten sonra zamanlayıcı denetleyicisinin özel kaynak tanımının (CRD) komutu kullanılarak kubectl get başarıyla yüklendiğini doğrulayın.

    kubectl get crd schedulerconfigurations.aks.azure.com
    

    Uyarı

    Özellik önceki bölümde başarıyla etkinleştirilmediyse bu komut başarılı olmaz.

RequestedtoCapacity Eklentisi ile düğüm paketlemeyi yapılandırma

Üç profilden biri, RequestedToCapacityRatio düğümleri açık bir kullanıma eşlemek için en ayrıntılı kullanıcı denetimini sağlar. Örneğin, bu zamanlama profili 50-85% bir kullanım bandı içindeki düğümleri tercih edecek şekilde yapılandırılmıştır, boş düğümlerden kaçınacak ve 90% veya daha fazla kullanımda neredeyse dolu düğümlerin önceliğini önemli ölçüde düşürerek bir boşluk bırakılmasını sağlar. Bu ayrıntı düzeyi göz önünde bulundurulduğunda, RequestedtoCapacity üretim kümeleri için AKS'de düğüm paketleme işlemi için önerilen puanlama stratejisidir.

Bu yapılandırma, CPU kullanımını düğüm seçiminde baskın faktör haline getirir ve yoğun CPU kullanan uygulamalar için aşırı doygunluğu önler. Son olarak, varsayılan olarak etkin bırakılırsa PodTopologySpread ağırlıklı puanı geçersiz kılabileceğinden NodeResourcesFit eklentisini devre dışı bırakmanız gerekir.

  • NodeResourcesFit bir düğümün pod çalıştırmak için yeterli kaynağı olup olmadığını zamanlayıcının nasıl değerlendirdiğini denetler.
  • scoringStrategy: RequestedToCapacityRatio pod varsayımsal olarak yerleştirildikten sonra istenen kaynakların toplam düğüm kapasitesine oranına göre düğümleri puanlar.
  • Resources, CPU ve Memory'nin puanlama için dikkate alınmakta olan birincil kaynaklar olduğunu belirtir. ağırlığıyla 8, CPU kullanımına sahip düğümler pod zamanlama döngüsü sırasında bellekten 8 kat daha yüksek puanlanır. Bu, yüksek kullanımlı düğümlerin seçilme olasılığını artırır.
  • shape: düğüm kullanımını zamanlayıcı puanıyla eşler. Her nokta, bir kullanım yüzdesini ve buna karşılık gelen puanı temsil eder; noktalar arasında ise doğrusal bir puanlama vardır.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
  name: upstream
spec:
  rawConfig: |
    apiVersion: kubescheduler.config.k8s.io/v1
    kind: KubeSchedulerConfiguration
    profiles:
      - schedulerName: cpu-binpack-scheduler-RtC
        plugins:
          multiPoint:
            enabled:
              - name: NodeResourcesFit
            disabled:
              - name: PodTopologySpread
        pluginConfig:
          - name: NodeResourcesFit
            args:
              apiVersion: kubescheduler.config.k8s.io/v1
              kind: NodeResourcesFitArgs
              scoringStrategy:
                type: RequestedToCapacityRatio
                resources:
                  - name: cpu
                    weight: 8
                  - name: memory
                    weight: 1
                requestedToCapacityRatio:
                  shape:
                    - utilization: 0
                      score: 0
                    - utilization: 30
                      score: 9
                    - utilization: 50
                      score: 10
                    - utilization: 85
                      score: 10
                    - utilization: 90
                      score: 5
                    - utilization: 100
                      score: 0

MostAllocated Eklentisi ile düğüm bölme paketlemeyi yapılandırma

Scheduler'ı MostAllocated kullanarak, yalnızca kaynak kullanımına göre düğümleri önceliklendirir. Kaynak kullanımı ne kadar yüksek olursa, düğüm o kadar yüksek puanlanır ve kullanılmayan düğümlerden kaçınılır veya gerekli olana kadar ölçeklendirme yapılır. Tek başına kullanıldığında, bu yapılandırma düğümlerin istenen sınırların ötesinde aşırı yüklenmesine yol açar ve kısıtlama veya ek darboğazlara neden olabilir.

Bu yapılandırma, CPU kullanımını düğüm seçiminde baskın faktör yapar. Tutarlı bir davranış sağlamak için PodTopologySpread eklentisini devre dışı bırakmanız gerekir, çünkü varsayılan olarak etkin bırakıldığında NodeResourcesFit tarafından belirlenen ağırlıklı puanı geçersiz kılabilir.

  • NodeResourcesFit bir düğümün pod çalıştırmak için yeterli kaynağı olup olmadığını zamanlayıcının nasıl değerlendirdiğini denetler.
  • scoringStrategy: MostAllocated pod isteklerine göre puanlamalar. MostAllocated zamanlayıcıya yüksek kaynak kullanımına sahip düğümleri tercih etmelerini söyler. Bu strateji yoğun pod yerleşimini teşvik eder ve daha iyi düğüm kullanımına yardımcı olur.
  • Resources, CPU ve Memory'nin puanlama için dikkate alınmakta olan birincil kaynaklar olduğunu belirtir. ağırlığıyla 8, CPU kullanımına sahip düğümler pod zamanlama döngüsü sırasında bellekten 8 kat daha yüksek puanlanır. Bu, yüksek kullanımlı düğümlerin seçilme olasılığını artırır.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
  name: upstream
spec:
  rawConfig: |
    apiVersion: kubescheduler.config.k8s.io/v1
    kind: KubeSchedulerConfiguration
    profiles:
      - schedulerName: cpu-binpack-scheduler-mA
        plugins:
          multiPoint:
            enabled:
              - name: NodeResourcesFit
            disabled:
              - name: PodTopologySpread
        pluginConfig:
          # NodeResourcesFit configuration
          - name: NodeResourcesFit
            args:
              apiVersion: kubescheduler.config.k8s.io/v1
              kind: NodeResourcesFitArgs
              scoringStrategy:
                type: MostAllocated
                resources:
                  - name: cpu
                    weight: 8
                  - name: memory
                    weight: 1

MostAllocated ve NodeResourcesBalancedAllocation Eklentileri ile düğüm bölme paketlemeyi yapılandırma

Bu yapılandırma, hedef kaynakların dengeli kullanımına göre düğümleri puanlayarak basit ve verimli stratejiye MostAllocated bazı korumalar eklemeyi amaçlamaktadır. NodeResourcesBalancedAllocation kullanıcı tanımlı oransal kullanıma sahip düğümlere pod yerleştirmeyi teşvik ederek genel verimliliği artırırken, asimetrik kaynak baskısından kaynaklanan darboğazları önler. Örneğin, kullanılmayan bol miktarda belleğe sahip CPU'ya bağlı düğümler, daha iyi CPU ve bellek kullanımı dengesine sahip düğümlere göre daha düşük puanlanır.

  • NodeResourcesBalancedAllocation düğümleri, birden fazla kaynaktaki kaynak kullanımının ne kadar dengeli olduğuna göre puanlar. Bu eklenti, tek bir kaynağın kullanımını en üst düzeye çıkarmak yerine kaynak tüketiminin orantılı olduğu düğümleri tercih eder.
  • Resources bakiye değerlendirmesi sırasında hangi kaynakların dikkate alınıyor olduğunu belirtir. CPU ve bellek ağırlığı eşit olduğunda, her iki kaynak da benzer düzeylerde kullanıldığında düğümler daha yüksek puanlanır.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
  name: upstream
spec:
  rawConfig: |
    apiVersion: kubescheduler.config.k8s.io/v1
    kind: KubeSchedulerConfiguration
    profiles:
      - schedulerName: cpu-binpack-scheduler-mA-BalancedAllocation
        plugins:
          multiPoint:
            enabled:
              - name: NodeResourcesFit
              - name: NodeResourcesBalancedAllocation
            disabled:
              - name: PodTopologySpread
        pluginConfig:
          # NodeResourcesFit configuration
          - name: NodeResourcesFit
            args:
              apiVersion: kubescheduler.config.k8s.io/v1
              kind: NodeResourcesFitArgs
              scoringStrategy:
                type: MostAllocated
                resources:
                  - name: cpu
                    weight: 8
                  - name: memory
                    weight: 1
          - name: NodeResourcesBalancedAllocation
            args:
              apiVersion: kubescheduler.config.k8s.io/v1
              kind: NodeResourcesBalancedAllocationArgs
              resources:
                - name: cpu
                  weight: 1
                - name: memory
                  weight: 1

AKS kümesinin tamamına zamanlayıcı profili atama

  1. cpu-bin-packing-scheduler.yaml adlı bir dosya oluşturun ve upstream adlı CRD ile birlikte kullanın.

  2. komutunu kullanarak zamanlama yapılandırma bildirimini kubectl apply uygulayın.

    kubectl apply -f cpu-bin-packing-scheduler.yaml
    
  3. Belirli iş yükleri için bu zamanlama mekanizmasını hedeflemek için pod dağıtımlarınızı aşağıdakilerle schedulerNamegüncelleştirin:

    ...
    ...
        spec:
          schedulerName: binpacking-scheduler
    ...
    ...
    

Sonraki Adımlar

AKS zamanlayıcı, diğer yapılandırmalar ve en iyi yöntemler hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın: