Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Enable CPU QoS for containers

Son Güncelleme:Oct 06, 2026

Birlikte yerleştirme ortamlarında gecikmeye duyarlı (LS) ve en iyi çaba (BE) uygulamaları aynı düğümü paylaşır. CPU istekleri ve sınırları tek başına BE iş yüklerinin LS iş yüklerini engellemesini önleyemez; bu durum özellikle yüksek yük altında daha belirgindir. CPU QoS, Linux zamanlama önceliklerini grup kimliği özelliği aracılığıyla kullanarak LS Pod'larına BE Pod'larından daha yüksek çekirdek zamanlama önceliği verir ve birlikte yerleştirme senaryolarındaki etkileşimi azaltır.

Temel kavramları anlamak için Kubernetes belgelerindeki Pod hizmet kalitesi sınıfları ve Konteynerlere ve Pod'lara bellek kaynakları atama konularına bakın.

CPU QoS nasıl çalışır?

ack-koordinator, her CPU cgroup'una bir grup kimliği atar. Çekirdek, bu kimlikleri kullanarak görevleri farklılaştırılmış önceliklerle zamanlar:

  • LS görevleri için daha hızlı zamanlama: İşletim sistemi, LS uygulama görevlerini daha yüksek öncelikle zamanlayarak yanıt hızını ve aktarım hızını artırır.

  • BE görevleri tarafından önceliğin alınmaması: Bir BE görevi uyandığında çalışan bir LS sürecinin önceliğini alamaz.

  • SMT yalıtımı: Eş Zamanlı Çoklu İş Parçacığı (SMT) ortamlarında BE görevleri aynı fiziksel çekirdekte LS görevleriyle paralel olarak çalışmaz; bu da donanım düzeyindeki kaynak çekişmesini önler.

Bir QoS sınıfı seçin

QoS sınıfı CPU zamanlama önceliği
LS (gecikmeye duyarlı) Yüksek (grup kimliği: 2)
BE (en iyi çaba) Düşük (grup kimliği: -1)

koordinator.sh/qosClass: LS etiketiyle işaretlenen Pod'lar yüksek öncelikli olarak değerlendirilir. koordinator.sh/qosClass: BE etiketiyle işaretlenen Pod'lar ise düşük öncelikli olarak değerlendirilir. Bu etikete sahip olmayan Pod'lar için ack-koordinator yerel Kubernetes QoS sınıfına geri döner: BestEffort Pod'ları BE'ye, diğer tüm Pod'lar ise LS'ye eşlenir.

Ön koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

Düğümleriniz Alibaba Cloud Linux çalıştırmıyorsa BE Pod CPU kullanımını sınırlamak için bunun yerine CPU Suppress özelliğini kullanın.

Faturalama

ack-koordinator'u yüklemek ve kullanmak ücretsizdir. Aşağıdaki durumlarda ek maliyetler oluşabilir:

  • Çalışan düğüm kaynakları: ack-koordinator kendi kendine yönetilen bir bileşendir ve yüklemeden sonra çalışan düğümün CPU ve bellek kaynaklarını tüketir. Yükleme sırasında her modül için kaynak isteklerini yapılandırın.

  • Prometheus izleme: Enable Prometheus Monitoring for ACK-Koordinator seçeneğini etkinleştirir ve Alibaba Cloud Prometheus kullanırsanız sunulan ölçümler özel ölçümler olarak faturalandırılır. Maliyetler küme boyutuna ve uygulama sayısına bağlıdır. Bu seçeneği etkinleştirmeden önce Prometheus örneklerinin faturalandırması belgesini inceleyin ve tüketiminizi izlemek için kullanım verilerini sorgulayın.

CPU QoS'u etkinleştirin

CPU QoS'u bir ConfigMap kullanarak küme düzeyinde etkinleştirin, ardından Pod'larınızı uygun QoS sınıfıyla etiketleyin.

1. Adım: ConfigMap'i uygulayın

  1. Aşağıdaki içeriğe sahip configmap.yaml adlı bir dosya oluşturun:

    CPU QoS'u Deployment gibi bir iş yüküne uygulamak için template.metadata altındaki Pod şablonuna koordinator.sh/qosClass etiketini ekleyin.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ack-slo-config
      namespace: kube-system
    data:
      # Enable the CPU QoS feature for containers.
      resource-qos-config: |
        {
          "clusterStrategy": {
            "lsClass": {
              "cpuQOS": {
                "enable": true,
                "groupIdentity": 2
              }
            },
            "beClass": {
              "cpuQOS": {
                "enable": true,
                "groupIdentity": -1
              }
            }
          }
        }

    lsClass alanı LS Pod'larını yapılandırır; beClass ise BE Pod'larını yapılandırır. Aşağıdaki tabloda cpuQOS altındaki anahtar parametreler açıklanmaktadır.

    Parametre Tür Geçerli değerler Açıklama
    enable Boolean true / false true: CPU QoS'u küme genelinde etkinleştirir. false: Devre dışı bırakır.
    groupIdentity Integer -1 ile 2 arasında Cgroup için çekirdek zamanlama önceliği. Daha yüksek değerler daha yüksek öncelik anlamına gelir. Varsayılan: LS Pod'ları için 2, BE Pod'ları için -1. Bu sınıf için grup kimliğini devre dışı bırakmak üzere 0 olarak ayarlayın.
  2. kube-system ad alanında ack-slo-config ConfigMap'inin zaten var olup olmadığını kontrol edin:

    • Varsa diğer yapılandırma alanlarının üzerine yazmadan güncellemek için aşağıdaki yama komutunu çalıştırın:

      kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
    • Yoksa oluşturun:

      kubectl apply -f configmap.yaml

2. Adım: Bir LS Pod'u dağıtın ve doğrulayın

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

    apiVersion: v1
    kind: Pod
    metadata:
      name: ls-pod-demo
      labels:
        koordinator.sh/qosClass: 'LS' # Specify the QoS class of the Pod as LS.
    spec:
      containers:
      - command:
        - httpd
        - -D
        - FOREGROUND
        image: registry.cn-zhangjiakou.aliyuncs.com/acs/apache-2-4-51-for-slo-test:v0.1
        imagePullPolicy: Always
        name: apache
        resources:
          limits:
            cpu: "4"
            memory: 10Gi
          requests:
            cpu: "4"
            memory: 10Gi
      restartPolicy: Never
      schedulerName: default-scheduler
  2. Pod'u dağıtın:

    kubectl apply -f ls-pod-demo.yaml
  3. Düğümde LS Pod'unun cgroup'una atanan grup kimliğini kontrol edin:

    cat /sys/fs/cgroup/cpu/kubepods.slice/kubepods-pod1c20f2ad****.slice/cpu.bvt_warp_ns

    Beklenen çıktı:

    # The group identity of the LS Pod is 2, which indicates high priority.
    2

3. Adım: Bir BE Pod'u dağıtın ve doğrulayın

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

    apiVersion: v1
    kind: Pod
    metadata:
      name: be-pod-demo
      labels:
        koordinator.sh/qosClass: 'BE' # Specify the QoS class of the Pod as BE.
    spec:
      containers:
        - args:
            - '-c'
            - '1'
            - '--vm'
            - '1'
          command:
            - stress
          image: registry-cn-beijing.ack.aliyuncs.com/acs/stress:v1.0.4
          imagePullPolicy: Always
          name: stress
      restartPolicy: Always
      schedulerName: default-scheduler
  2. Pod'u dağıtın:

    kubectl apply -f be-pod-demo.yaml
  3. Düğümde BE Pod'unun cgroup'una atanan grup kimliğini kontrol edin:

    cat /sys/fs/cgroup/cpu/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod4b6e96c8****.slice/cpu.bvt_warp_ns

    Beklenen çıktı:

    # The group identity of the BE Pod is -1, which indicates low priority.
    -1

LS Pod'unun grup kimliği 2, BE Pod'unun grup kimliği ise -1 değerindedir. Bu fark CPU QoS'un aktif olduğunu doğrular: çekirdek CPU kaynaklarını BE iş yüklerine kıyasla LS iş yüklerine öncelikli olarak tahsis eder.

SSS

ack-koordinator'a yükseltme sırasında protokol uyumluluğu

ack-slo-manager'ın önceki sürümleri (v0.8.0 ve öncesi) CPU QoS'u yapılandırmak için alibabacloud.com/qosClass ek açıklamasını kullanıyordu. ack-koordinator her iki protokolü de destekler; böylece bileşeni yükseltebilir ve Pod'larınızı koordinator.sh protokolüne kademeli olarak geçirebilirsiniz. Eski alibabacloud.com protokolüne desteğin 30 Temmuz 2023'te sona erdiğini unutmayın; kaynaklarınızı mümkün olan en kısa sürede yeni protokole güncelleyin.

Bileşen sürümü **alibabacloud.com protokolü** **koordinator.sh protokolü**
>= 0.5.2 ve < 0.8.0 Desteklenir Desteklenmez
>= 0.8.0 Desteklenir Desteklenir

Sonraki adımlar