Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Use load-aware scheduling

Son Güncelleme:Oct 06, 2026

Varsayılan olarak pod'lar düğümün gerçek yüküne göre değil, talep edilen kaynaklara göre zamanlanır. ACK yönetilen Pro kümesinde yük farkında zamanlamayı etkinleştirerek pod'ları daha düşük gerçek yüke sahip düğümlere yerleştirebilir, kullanım dengesini sağlayabilir ve tek bir aşırı yüklü düğüm nedeniyle oluşan düğüm arızası riskini azaltabilirsiniz.

Yük farkında zamanlama nasıl çalışır?

Yük farkında zamanlama, Container Service for Kubernetes (ACK) zamanlayıcısının Kubernetes Zamanlama Çerçevesi tabanlı olarak uyguladığı bir eklentidir. Yerel Kubernetes zamanlama ilkesi pod'ları öncelikli olarak kaynak tahsisine göre yerleştirir. Buna karşılık ACK zamanlayıcısı her düğümün gerçek kaynak yükünü tespit eder; geçmiş düğüm yük istatistiklerine başvurur, zamanlanacak pod'un yükünü tahmin eder ve ardından pod'u daha düşük yüke sahip bir düğüme yerleştirir. Bu sayede düğümler arasındaki yük dengelenir ve tek bir aşırı yüklü düğüm kaynaklı uygulama veya düğüm arızalarının önlenmesine yardımcı olunur.

Yük farkında zamanlama için hem kube-scheduler bileşeni hem de ack-koordinator eklentisi gereklidir. ack-koordinator eklentisi düğüm kaynak kullanımını toplar ve bildirir; ACK zamanlayıcısı ise bu veriyi kullanarak düğümleri puanlar ve sıralar, böylece daha düşük yüklü düğümler öncelikli olarak seçilir. Eklenti tasarımı hakkında ayrıntılı bilgi için bkz. ack-koordinator mimarisi.

Aşağıdaki şekilde Requested talep edilen kaynak miktarını; Usage ise gerçekten kullanılan kaynak miktarını gösterir. Yalnızca gerçekten kullanılan kaynaklar gerçek yük olarak kabul edilir. Düğüm koşulları aynı olduğunda ACK zamanlayıcısı yeni pod'u daha düşük yüke sahip olan B Düğümüne atar.

1

Düğüm kullanımı küme ortamı, iş yükü trafiği ve talep hacmi ile birlikte zaman içinde dinamik olarak değişir. Pod'lar zamanlandıktan sonra kümenin tekrar dengesiz hale gelme olasılığını azaltmak için ack-koordinator eklentisi yeniden zamanlama özelliği de sunar. Düğüm yüklerinin zaman içinde dengeli kalmasını sağlamak amacıyla yük farkında zamanlamayı düğüm yüklerini dengelemek için sıcak nokta odaklı yeniden zamanlamayı kullanma ile birlikte kullanın.

Düğüm yükü nasıl ölçülür?

Yük istatistiği ortalama ve yüzdelik değerler dahil olmak üzere çeşitli şekillerde toplanabilir. Varsayılan olarak ACK zamanlayıcısı son 5 dakikanın ortalamasını kullanır. Toplama türünü değiştirmek için loadAwareAggregatedUsageAggragationType parametresini ayarlayın. Ayrıntılar için bkz. Özel kube-scheduler parametreleri.

Bellek için kullanım verileri sayfa önbelleğini dışarıda bırakır çünkü işletim sistemi sayfa önbelleğini geri alabilir. kubectl top node komutu tarafından döndürülen kullanıma sayfa önbelleği dahildir. Bir düğümün gerçek bellek kullanımını görüntülemek için bkz. Managed Service for Prometheus'i yapılandırma.

Zamanlama ilkeleri

Yük farkında zamanlama aşağıdaki ilkeleri sağlar. Her iki ilke de önceki bölümde açıklanan toplanmış düğüm yük istatistiğini kullanır.


İlke


Açıklama


Düğüm filtreleme


Aday düğümleri gerçek yüke göre filtreler. Bir düğümün gerçek yükü yapılandırılmış yük eşiğini aşarsa zamanlayıcı pod'ları o düğüme zamanlamaz. Düğüm filtreleme varsayılan olarak devre dışıdır. Etkinleştirmek için loadAwareThreshold parametresini ayarlayın. Ayrıntılar için bkz. Özel kube-scheduler parametreleri.


Düğüm puanlama


Aday düğümleri hem CPU hem de bellek boyutunda puanlar ve daha yüksek puana sahip düğümleri öncelikli olarak seçer. Puan ((1 - CPU utilization) * CPU weight + (1 - memory utilization) * memory weight) / (CPU weight + memory weight) formülüyle hesaplanır; burada CPU ve bellek kullanımı yüzde olarak ifade edilir. CPU ağırlığını ve bellek ağırlığını özelleştirmek için loadAwareResourceWeight parametresini ayarlayın. Ayrıntılar için bkz. Özel kube-scheduler parametreleri.

Ön koşullar

  • Küme türü — Yalnızca ACK yönetilen Pro kümesi desteklenir. Prosedür için bkz. ACK Pro kümesi oluşturma.

  • ack-koordinator eklentisi — ack-koordinator eklentisinin 1.1.1-ack.1 veya sonraki bir sürümünü yükleyin. Yükleme prosedürü için bkz. ack-koordinator (eski adıyla ack-slo-manager).

  • ACK zamanlayıcı sürümü — ACK zamanlayıcısı kümenizin Kubernetes sürümü için aşağıdaki tabloda listelenen sürüm gereksinimini karşılamalıdır.


Kubernetes sürümü


Gerekli ACK zamanlayıcı sürümü


1.26 ve sonrası


Tüm sürümler


1.24


v1.24.6-ack-4.0 veya sonrası


1.22


v1.22.15-ack-4.0 veya sonrası

Bu sürümler kube-scheduler parametreleri aracılığıyla yük farkında zamanlamayı yapılandırmak için gereklidir. Bazı önceki zamanlayıcı sürümleri yalnızca pod ek açıklamaları protokolünü destekler. Tam uyumluluk matrisi için SSS bölümüne bakın.

Faturalama

ack-koordinator eklentisini yüklemek veya kullanmak ücretsizdir. Ancak aşağıdaki senaryolarda maliyet oluşabilir:

  • Çalışan düğüm kaynakları — ack-koordinator yüklendikten sonra çalışan düğüm kaynaklarını tüketen yönetilmeyen bir eklentidir. Kaynak talepleri kurulum sırasında her modül için yapılandırılabilir.

  • Özel ölçümler — Varsayılan olarak ack-koordinator kaynak profilleme ve ince ayarlı zamanlama gibi özellikler için izleme ölçümlerini Prometheus biçiminde sunar. Enable Prometheus monitoring metrics for ack-koordinator seçeneğini belirler ve Managed Service for Prometheus kullanırsanız bu ölçümler özel ölçümler olarak faturalandırılır. Ücretler küme boyutu ve uygulama sayısı gibi faktörlere göre değişir. Bu özelliği etkinleştirmeden önce özel ölçümler için ücretsiz katmanı ve fiyatlandırmayı anlamak adına Prometheus örneklerinin faturalandırılması konusuna bakın. Kaynak kullanımınızı izlemek ve yönetmek için kullanım sorgulama hizmetini kullanın.

Adım 1: Yük farkında zamanlamayı etkinleştirme

Önemli

ack-koordinator eklentisi ve ACK zamanlayıcısı Ön koşullar bölümünde açıklanan sürüm gereksinimlerini karşılamadığı sürece yük farkında zamanlama etkili olmaz.

  1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesine tıklayın.

  2. Clusters sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde Components and Add-ons öğesine tıklayın.

  3. kube-scheduler öğesini bulun ve Configuration öğesine tıklayın.

  4. kube-scheduler parametreleri iletişim kutusunda aşağıdaki tabloda açıklanan parametreleri yapılandırın ve OK öğesine tıklayın.

    Aşağıdaki tabloda yük farkında zamanlama için ana parametreler açıklanmaktadır. Eksiksiz parametre ayarları referansı ve her parametrenin gerektirdiği eklenti sürümleri için bkz. kube-scheduler ve .


    Parametre


    Tür


    Açıklama


    Geçerli değerler


    Varsayılan değer


    Örnek


    loadAwareThreshold


    Kaynak adı resourceName ve eşik threshold içeren bir liste.


    Düğüm filtreleme ilkesi tarafından kullanılan ilgili kaynak türünün eşiği.


    resourceName: cpu ve memory desteklenir. threshold: [0,100].


    Boş, bu düğüm filtrelemenin devre dışı olduğu anlamına gelir.


    resourceName: cpu ve threshold: 80


    loadAwareResourceWeight


    Kaynak adı resourceName ve ağırlık resourceWeight içeren bir liste.


    Düğüm puanlama ilkesi tarafından kullanılan ilgili kaynak türünün puanlama ağırlığı. Specifies whether to enable load-aware node scoring during pod scheduling seçeneğini belirlemeniz gerekir.


    resourceName: yalnızca cpu ve memory desteklenir. resourceWeight: [1,100] aralığında bir tamsayı.


    cpu: 1 ve memory: 1


    resourceName: cpu ve resourceWeight: 1


    loadAwareAggregatedUsageAggragationType


    enum


    Yük istatistiğinin toplama türü. avg: ortalama değer. p50: medyan olan 50. yüzdelik dilim. p90, p95 ve p99: 90., 95. ve 99. yüzdelik dilimler.


    avg, p50, p90, p95 ve p99


    avg


    p90

    Önemli

    Kümedeki düğümler için otomatik düğüm ölçeklendirme zaten etkinse yük farkında filtreleme eşiği beklenmeyen ölçek genişletme veya daraltmaya neden olabilir. Bunun nedeni otomatik düğüm ölçeklendirmenin pod'ların beklemede olup olmamasına göre ölçek genişletmesi ve kümenin tahsis seviyesine göre ölçek daraltması yapmasıdır. Otomatik düğüm ölçeklendirmeyi yük farkında düğüm filtreleme ile birlikte kullanmak için Otomatik düğüm ölçeklendirmeyi etkinleştirme bölümünde açıklandığı gibi yapılandırmayı kümenizin kapasitesi ve kullanımına uygun şekilde ayarlayın.

  5. Sol gezinme bölmesinde Cluster Information öğesine tıklayın. Görüntülenen sayfada Basic Information sekmesine tıklayın ve küme Running durumuna geçene kadar bekleyin; bu durum yük farkında zamanlamanın etkin olduğunu gösterir.

Adım 2: Yük farkında zamanlamayı doğrulama

Aşağıdaki örnekte her biri 4 çekirdek ve 16 GiB belleğe sahip üç düğümden oluşan bir küme kullanılmaktadır. Örnek önce düğümler arasındaki yükleri dengesiz hale getirir ve ardından yeni pod'ların nereye zamanlandığını kontrol eder.

  1. Aşağıdaki içeriğe sahip stress-demo.yaml adlı bir dosya oluşturun.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: stress-demo
      namespace: default
      labels:
        app: stress-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: stress-demo
      template:
        metadata:
          name: stress-demo
          labels:
            app: stress-demo
        spec:
          containers:
            - args:
                - '--vm'
                - '2'
                - '--vm-bytes'
                - '1600M'
                - '-c'
                - '2'
                - '--vm-hang'
                - '2'
              command:
                - stress
              image: polinux/stress
              imagePullPolicy: Always
              name: stress
              resources:
                limits:
                  cpu: '2'
                  memory: 4Gi
                requests:
                  cpu: '2'
                  memory: 4Gi
          restartPolicy: Always
  2. Pod'u oluşturmak için aşağıdaki kubectl komutunu çalıştırın. Pod barındırıldığı düğümün yükünü artırır.

    kubectl create -f stress-demo.yaml
    deployment.apps/stress-demo created
  3. Pod çalışana kadar pod durumunu kontrol etmek için aşağıdaki kubectl komutunu çalıştırın.

    kubectl get pod -o wide
    NAME                           READY   STATUS    RESTARTS   AGE   IP           NODE                    NOMINATED NODE   READINESS GATES
    stress-demo-7fdd89cc6b-g****   1/1     Running   0          82s   10.XX.XX.112   cn-beijing.10.XX.XX.112   <none>           <none>

    stress-demo-7fdd89cc6b-g**** pod'u cn-beijing.10.XX.XX.112 düğümüne zamanlanır. Pod'un başlatmayı tamamlaması ve düğüm yükünün artması için yaklaşık 3 dakika bekleyin.

  4. Her düğümün yükünü kontrol etmek için aşağıdaki kubectl komutunu çalıştırın.

    kubectl top node
    NAME                    CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
    cn-beijing.10.XX.XX.110   92m          2%     1158Mi          9%
    cn-beijing.10.XX.XX.111   77m          1%     1162Mi          9%
    cn-beijing.10.XX.XX.112   2105m        53%    3594Mi          28%

    cn-beijing.10.XX.XX.111 en düşük yüke sahiptir ve cn-beijing.10.XX.XX.112 düğümü en yüksek yüke sahiptir. Kümedeki düğümler arasındaki yükler artık dengesizdir.

  5. Aşağıdaki içeriğe sahip nginx-with-loadaware.yaml adlı bir dosya oluşturun.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-with-loadaware
      namespace: default
      labels:
        app: nginx
    spec:
      replicas: 6
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            resources:
              limits:
                cpu: 500m
              requests:
                cpu: 500m
  6. Pod'ları oluşturmak için aşağıdaki kubectl komutunu çalıştırın.

    kubectl create -f nginx-with-loadaware.yaml
    deployment/nginx-with-loadawre created
  7. Pod zamanlama ayrıntılarını görüntülemek için aşağıdaki kubectl komutunu çalıştırın.

    kubectl get pods | grep nginx
    nginx-with-loadaware-5646666d56-2****   1/1     Running   0          18s   10.XX.XX.118   cn-beijing.10.XX.XX.110   <none>           <none>
    nginx-with-loadaware-5646666d56-7****   1/1     Running   0          18s   10.XX.XX.115   cn-beijing.10.XX.XX.110   <none>           <none>
    nginx-with-loadaware-5646666d56-k****   1/1     Running   0          18s   10.XX.XX.119   cn-beijing.10.XX.XX.110   <none>           <none>
    nginx-with-loadaware-5646666d56-q****   1/1     Running   0          18s   10.XX.XX.113   cn-beijing.10.XX.XX.111   <none>           <none>
    nginx-with-loadaware-5646666d56-s****   1/1     Running   0          18s   10.XX.XX.120   cn-beijing.10.XX.XX.111   <none>           <none>
    nginx-with-loadaware-5646666d56-z****   1/1     Running   0          18s   10.XX.XX.116   cn-beijing.10.XX.XX.111   <none>           <none>

    Beklenen çıktı yük farkında zamanlama etkinleştirildikten sonra zamanlayıcının düğüm yüklerini algıladığını ve pod'ları öncelikli olarak cn-beijing.10.XX.XX.112 dışındaki düğümlere zamanlamak için zamanlama stratejisini kullandığını gösterir.

SSS

Yeni oluşturulan bir pod yığınındaki tüm pod'lar neden en düşük yüklü düğüme zamanlanmaz?

Yeni pod'lar başladıktan sonra düğümün yükünü artırır. Zamanlayıcı yeni pod yığınının tamamını şu anda en düşük yüke sahip olan düğüme yerleştirirse bu düğüm hızla bir yük sıcak noktası haline gelebilir.

Bu nedenle yük farkında zamanlama eklentisi düğümleri puanlarken kullanımı henüz bildirilmemiş yeni pod'lara ev sahipliği yapan bir düğümün puanını ayarlar. Bu aşırı zamanlamanın yeni bir sıcak nokta oluşturmasını engeller.

Düğüm yüküne ek olarak zamanlama sonucunu etkileyen başka faktörler var mı?

Kubernetes zamanlayıcısı birden çok eklentiden oluşur ve bunların çoğu zamanlama sırasında düğüm puanlamasına katkıda bulunur; örneğin yakınlık eklentisi ve topoloji yayılımı eklentisi. Nihai düğüm sıralaması tüm bu eklentileri yansıtır ve her eklentinin puanlama ağırlığını gerektiği gibi ayarlayabilirsiniz.

Zamanlayıcı yeni bir sürüme yükseltildikten sonra yük farkında zamanlama önceki protokol üzerinden çalışmaya devam eder mi?

Cevap kümenin Kubernetes sürümüne bağlıdır. 1.22 sürümünde ACK zamanlayıcısı önceki protokolle uyumlu kalır. 1.24 sürümü için uyumluluk dönemi 30 Ağustos 2023'te sona ermiştir. 1.26 ve sonraki sürümlerde pod ek açıklamaları protokolü desteklenmez.

Önceki protokolü hala destekleyen bir sürümde pod'a alibabacloud.com/loadAwareScheduleEnabled: "true" ek açıklamasını ekleyin. ACK zamanlayıcısı önceki protokolle uyumlu olduğundan zamanlayıcıyı yeni sürüme sorunsuz bir şekilde yükseltebilirsiniz. Yükseltmeden sonra pod yapılandırmalarında gereken değişiklikleri azaltmak için kümeye genel yük dengeleme zamanlama ilkesini etkinleştirmek üzere Özel kube-scheduler parametreleri bölümündeki adımları izleyin.

Önemli

Kümeyi daha yeni bir sürüme yükseltin ve yük farkında zamanlama için yeni yapılandırma yöntemini kullanın. Daha fazla bilgi için bkz. kümeyi manuel olarak yükseltme.

Aşağıdaki tablolar her sürüm için protokol desteğini ve eklenti sürümü gereksinimlerini açıklamaktadır:

1.26 ve sonrası


ACK zamanlayıcı sürümü


Gerekli ack-koordinator (ack-slo-manager) sürümü


Pod ek açıklamaları protokolü


Konsol parametre anahtarı


Tüm ACK zamanlayıcı sürümleri


≥1.1.1-ack.1


Desteklenmiyor


Destekleniyor

1.24


ACK zamanlayıcı sürümü


Gerekli ack-koordinator (ack-slo-manager) sürümü


Pod ek açıklamaları protokolü


Konsol parametre anahtarı


≥v1.24.6-ack-4.0


≥1.1.1-ack.1


Destekleniyor


Destekleniyor


≥v1.24.6-ack-3.1 ve <v1.24.6-ack-4.0


≥0.8.0


Destekleniyor


Desteklenmiyor


ACK zamanlayıcı sürümü


Gerekli ack-koordinator (ack-slo-manager) sürümü


Pod ek açıklamaları protokolü


Konsol parametre anahtarı


≥1.22.15-ack-4.0


≥1.1.1-ack.1


Destekleniyor


Destekleniyor


≥1.22.15-ack-2.0 ve <1.22.15-ack-4.0


≥0.8.0


Destekleniyor


Desteklenmiyor


≥v1.20.4-ack-4.0 ve ≤v1.20.4-ack-8.0 veya v1.18-ack-4.0


≥0.3.0 ve <0.8.0


Destekleniyor


Desteklenmiyor