Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Enable CPU QoS for containers

Dernière mise à jour :Aug 11, 2026

Dans les environnements de colocalisation, les applications sensibles à la latence (LS) et les applications au meilleur effort (BE) partagent le même nœud. Les requêtes et limites de processeur seules ne suffisent pas à empêcher les charges de travail BE d'interférer avec les charges de travail LS, en particulier sous forte charge. La fonctionnalité de qualité de service (QoS) du processeur utilise les priorités de planification Linux via la fonctionnalité group identity pour attribuer aux Pods LS une priorité de planification noyau supérieure à celle des Pods BE, réduisant ainsi les interférences dans les scénarios de colocalisation.

Pour comprendre les concepts sous-jacents, consultez les pages Pod quality of service classes et Assign memory resources to containers and Pods de la documentation Kubernetes.

Fonctionnement de la QoS du processeur

ack-koordinator attribue une identité de groupe à chaque cgroup de processeur. Le noyau utilise ces identités pour planifier les tâches avec des priorités différenciées :

  • Planification plus rapide des tâches LS : le système d'exploitation planifie les tâches des applications LS avec une priorité plus élevée, ce qui améliore la vitesse de réponse et le débit.

  • Aucune préemption par les tâches BE : lorsqu'une tâche BE se réveille, elle ne peut pas préempter un processus LS en cours d'exécution.

  • Isolation SMT : dans les environnements Simultaneous MultiThreading (SMT), les tâches BE ne s'exécutent pas en parallèle avec les tâches LS sur le même cœur physique, ce qui évite la contention des ressources au niveau matériel.

Choisir une classe de QoS

Classe de QoS Priorité de planification du processeur
LS (sensible à la latence) Élevée (identité de groupe : 2)
BE (meilleur effort) Faible (identité de groupe : -1)

Les Pods portant l'étiquette koordinator.sh/qosClass: LS sont traités comme prioritaires. Les Pods portant l'étiquette koordinator.sh/qosClass: BE sont traités comme non prioritaires. Pour les Pods sans cette étiquette, ack-koordinator revient à la classe de QoS native de Kubernetes : les Pods BestEffort correspondent à BE, et tous les autres correspondent à LS.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cluster ACK exécutant la version 1.18 ou ultérieure. Pour mettre à niveau le cluster, consultez la rubrique Manually update ACK clusters.

  • Alibaba Cloud Linux comme système d'exploitation des nœuds. La fonctionnalité d'identité de groupe repose sur des paramètres de noyau spécifiques à ce système d'exploitation. Pour connaître les exigences en matière de version de noyau, consultez la page Group identity feature.

  • ack-koordinator v0.8.0 ou ultérieure installé. Pour les instructions d'installation, consultez la rubrique ack-koordinator (FKA ack-slo-manager).

Si vos nœuds n'exécutent pas Alibaba Cloud Linux, utilisez plutôt CPU Suppress pour limiter l'utilisation du processeur par les Pods BE.

Facturation

L'installation et l'utilisation d'ack-koordinator sont gratuites. Des coûts supplémentaires peuvent s'appliquer dans les cas suivants :

  • Ressources des nœuds de travail : ack-koordinator est autogéré et consomme du processeur et de la mémoire des nœuds de travail après l'installation. Configurez les requêtes de ressources pour chaque module lors de l'installation.

  • Surveillance Prometheus : si vous activez l'option Enable Prometheus Monitoring for ACK-Koordinator et utilisez Alibaba Cloud Prometheus, les métriques exposées sont facturées en tant que custom metrics. Les coûts dépendent de la taille du cluster et du nombre d'applications. Consultez la documentation relative à la billing of Prometheus instances avant d'activer cette option, et query usage data pour surveiller votre consommation.

Activer la QoS du processeur

Activez la QoS du processeur au niveau du cluster à l'aide d'un ConfigMap, puis étiquetez vos Pods avec la classe de QoS appropriée.

Étape 1 : Appliquer le ConfigMap

  1. Créez un fichier nommé configmap.yaml avec le contenu suivant :

    Pour appliquer la QoS du processeur à une charge de travail telle qu'un Deployment, ajoutez l'étiquette koordinator.sh/qosClass au modèle de Pod sous template.metadata .
    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
              }
            }
          }
        }

    Le champ lsClass configure les Pods LS ; beClass configure les Pods BE. Le tableau suivant décrit les principaux paramètres sous cpuQOS.

    Paramètre Type Valeurs valides Description
    enable Booléen true / false true : active la QoS du processeur à l'échelle du cluster. false : la désactive.
    groupIdentity Entier -1 à 2 Priorité de planification du noyau pour le cgroup. Les valeurs plus élevées indiquent une priorité plus élevée. Par défaut : 2 pour les Pods LS, -1 pour les Pods BE. Définissez sur 0 pour désactiver l'identité de groupe pour cette classe.
  2. Vérifiez si le ConfigMap ack-slo-config existe déjà dans l'espace de noms kube-system :

    • S'il existe, exécutez la commande de correctif suivante pour le mettre à jour sans écraser les autres champs de configuration :

      kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
    • S'il n'existe pas, créez-le :

      kubectl apply -f configmap.yaml

Étape 2 : Déployer un Pod LS et vérifier

  1. Créez un fichier nommé ls-pod-demo.yaml avec le contenu suivant :

    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. Déployez le Pod :

    kubectl apply -f ls-pod-demo.yaml
  3. Sur le nœud, vérifiez l'identité de groupe attribuée au cgroup du Pod LS :

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

    Résultat attendu :

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

Étape 3 : Déployer un Pod BE et vérifier

  1. Créez un fichier nommé be-pod-demo.yaml avec le contenu suivant :

    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. Déployez le Pod :

    kubectl apply -f be-pod-demo.yaml
  3. Sur le nœud, vérifiez l'identité de groupe attribuée au cgroup du Pod BE :

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

    Résultat attendu :

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

Le Pod LS a une identité de groupe de 2 et le Pod BE a une identité de groupe de -1. Cette différence confirme que la QoS du processeur est active : le noyau donne la priorité aux ressources processeur pour les charges de travail LS par rapport aux charges de travail BE.

FAQ

Compatibilité des protocoles lors de la mise à niveau vers ack-koordinator

Les versions antérieures d'ack-slo-manager (v0.8.0 et antérieures) utilisaient l'annotation alibabacloud.com/qosClass pour configurer la QoS du processeur. ack-koordinator prend en charge les deux protocoles, ce qui vous permet de mettre à niveau le composant et de migrer vos Pods vers le protocole koordinator.sh de manière incrémentielle. Notez que la prise en charge de l'ancien protocole alibabacloud.com a pris fin le 30 juillet 2023. Mettez à jour vos ressources vers le nouveau protocole dès que possible.

Version du composant **Protocole alibabacloud.com** **Protocole koordinator.sh**
>= 0.5.2 et < 0.8.0 Pris en charge Non pris en charge
>= 0.8.0 Pris en charge Pris en charge

Étapes suivantes

  • Activez la QoS de la mémoire pour donner la priorité à l'accès à la mémoire des applications LS tout en maintenant une allocation équitable pour tous les Pods. Consultez la rubrique Enable memory QoS.

  • Isolez le cache L3 et la bande passante mémoire entre les charges de travail LS et BE. Consultez la rubrique Enable resource isolation based on the L3 cache and MBA.