8.3. Limiter la consommation de ressources avec des fourchettes limites


Les conteneurs s’exécutent par défaut avec des ressources de calcul non liées sur un cluster dédié OpenShift. Avec des plages limites, vous pouvez limiter la consommation de ressources pour des objets spécifiques dans un projet:

  • gousses et conteneurs: Vous pouvez définir des exigences minimales et maximales pour le CPU et la mémoire pour les pods et leurs conteneurs.
  • Flux d’images: Vous pouvez définir des limites sur le nombre d’images et de balises dans un objet ImageStream.
  • Images: Vous pouvez limiter la taille des images qui peuvent être poussées à un registre interne.
  • Allégations de volume persistants (PVC): Vous pouvez restreindre la taille des PVC qui peuvent être demandés.

Lorsqu’un pod ne répond pas aux contraintes imposées par la plage limite, le pod ne peut pas être créé dans l’espace de noms.

8.3.1. À propos des limites

La plage limite, définie par un objet LimitRange, limite la consommation de ressources dans un projet. Dans le projet, vous pouvez définir des limites de ressources spécifiques pour un pod, un conteneur, une image, un flux d’images ou une revendication de volume persistant (PVC).

Les demandes de création et de modification de ressources sont évaluées par rapport à chaque objet LimitRange du projet. En cas de violation de l’une des contraintes énumérées, la ressource est rejetée.

Ce qui suit montre un objet de plage limite pour tous les composants: pod, conteneur, image, flux d’images ou PVC. Il est possible de configurer des limites pour l’un ou l’autre de ces composants dans le même objet. Créez un objet de plage limite différent pour chaque projet où vous souhaitez contrôler les ressources.

Échantillon limite objet de portée pour un conteneur

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits"
spec:
  limits:
    - type: "Container"
      max:
        cpu: "2"
        memory: "1Gi"
      min:
        cpu: "100m"
        memory: "4Mi"
      default:
        cpu: "300m"
        memory: "200Mi"
      defaultRequest:
        cpu: "200m"
        memory: "100Mi"
      maxLimitRequestRatio:
        cpu: "10"
Copy to Clipboard Toggle word wrap

8.3.1.1. À propos des limites des composants

Les exemples suivants montrent les paramètres de plage limite pour chaque composant. Les exemples sont révélés pour plus de clarté. Il est possible de créer un seul objet LimitRange pour n’importe quel ou tous les composants si nécessaire.

8.3.1.1.1. Limites du conteneur

La plage limite vous permet de spécifier le CPU et la mémoire minimum et maximum que chaque conteneur d’un pod peut demander pour un projet spécifique. Lorsqu’un conteneur est créé dans le projet, les requêtes CPU et mémoire du conteneur dans la spécification Pod doivent respecter les valeurs définies dans l’objet LimitRange. Dans le cas contraire, la gousse n’est pas créée.

  • La requête et la limite de CPU de conteneur ou de mémoire doivent être supérieures ou égales à la contrainte de ressource min pour les conteneurs qui sont spécifiés dans l’objet LimitRange.
  • La requête et la limite de CPU de conteneur ou de mémoire doivent être inférieures ou égales à la contrainte de ressource maximale pour les conteneurs qui sont spécifiés dans l’objet LimitRange.

    Lorsque l’objet LimitRange définit un CPU max, vous n’avez pas besoin de définir une valeur de requête CPU dans la spécification Pod. Cependant, vous devez spécifier une valeur limite CPU qui satisfait à la contrainte maximale du CPU spécifiée dans la plage de limites.

  • Le rapport entre les limites du conteneur et les demandes doit être inférieur ou égal à la valeur maxLimitRequestRatio pour les conteneurs spécifiés dans l’objet LimitRange.

    Lorsque l’objet LimitRange définit une contrainte maxLimitRequestRatio, tout nouveau conteneur doit avoir à la fois une requête et une valeur limite. L’OpenShift Dedicated calcule le ratio limite/demande en divisant la limite par la demande. Cette valeur devrait être un entier non négatif supérieur à 1.

    À titre d’exemple, si un conteneur a cpu: 500 dans la valeur limite, et cpu: 100 dans la valeur de requête, le rapport limite-demande pour cpu est 5. Ce ratio doit être inférieur ou égal au rapport maxLimitRequestRatio.

Dans le cas où la spécification Pod ne spécifie pas de mémoire ou de limite de ressource de conteneur, les valeurs CPU et mémoire par défautRequest CPU et mémoire pour les conteneurs spécifiés dans l’objet de la plage limite sont assignées au conteneur.

Définition de l’objet LimitRange de conteneur

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 
1

spec:
  limits:
    - type: "Container"
      max:
        cpu: "2" 
2

        memory: "1Gi" 
3

      min:
        cpu: "100m" 
4

        memory: "4Mi" 
5

      default:
        cpu: "300m" 
6

        memory: "200Mi" 
7

      defaultRequest:
        cpu: "200m" 
8

        memory: "100Mi" 
9

      maxLimitRequestRatio:
        cpu: "10" 
10
Copy to Clipboard Toggle word wrap

1
Le nom de l’objet LimitRange.
2
La quantité maximale de CPU qu’un seul conteneur dans un pod peut demander.
3
La quantité maximale de mémoire qu’un seul conteneur dans un pod peut demander.
4
La quantité minimale de CPU qu’un seul conteneur dans un pod peut demander.
5
La quantité minimale de mémoire qu’un seul conteneur dans un pod peut demander.
6
La quantité par défaut de CPU qu’un conteneur peut utiliser s’il n’est pas spécifié dans la spécification Pod.
7
La quantité de mémoire par défaut qu’un conteneur peut utiliser s’il n’est pas spécifié dans la spécification Pod.
8
La quantité par défaut de CPU qu’un conteneur peut demander s’il n’est pas spécifié dans la spécification Pod.
9
La quantité de mémoire par défaut qu’un conteneur peut demander s’il n’est pas spécifié dans la spécification Pod.
10
Le rapport limite/demande maximum pour un conteneur.
8.3.1.1.2. Limites de pod

La plage limite vous permet de spécifier les limites minimales et maximales de CPU et de mémoire pour tous les conteneurs d’un pod dans un projet donné. Afin de créer un conteneur dans le projet, les requêtes CPU et mémoire du conteneur dans la spécification Pod doivent respecter les valeurs définies dans l’objet LimitRange. Dans le cas contraire, la gousse n’est pas créée.

Dans le cas où la spécification Pod ne spécifie pas de mémoire ou de limite de ressource de conteneur, les valeurs CPU et mémoire par défautRequest CPU et mémoire pour les conteneurs spécifiés dans l’objet de la plage limite sont assignées au conteneur.

Dans tous les conteneurs d’une gousse, les éléments suivants doivent être vrais:

  • La requête et la limite de CPU de conteneur ou de mémoire doivent être supérieures ou égales aux contraintes de ressources min pour les pods qui sont spécifiés dans l’objet LimitRange.
  • Le CPU de conteneur ou la requête et la limite de mémoire doivent être inférieures ou égales aux contraintes de ressources maximales pour les pods qui sont spécifiés dans l’objet LimitRange.
  • Le rapport entre les limites du conteneur et les requêtes doit être inférieur ou égal à la contrainte maxLimitRequestRatio spécifiée dans l’objet LimitRange.

Définition de l’objet Pod LimitRange

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 
1

spec:
  limits:
    - type: "Pod"
      max:
        cpu: "2" 
2

        memory: "1Gi" 
3

      min:
        cpu: "200m" 
4

        memory: "6Mi" 
5

      maxLimitRequestRatio:
        cpu: "10" 
6
Copy to Clipboard Toggle word wrap

1
Le nom de l’objet de plage limite.
2
La quantité maximale de CPU qu’un pod peut demander sur tous les conteneurs.
3
La quantité maximale de mémoire qu’un pod peut demander sur tous les conteneurs.
4
La quantité minimale de CPU qu’un pod peut demander sur tous les conteneurs.
5
La quantité minimale de mémoire qu’un pod peut demander sur tous les conteneurs.
6
Le rapport limite/demande maximum pour un conteneur.
8.3.1.1.3. Limites d’image

L’objet LimitRange vous permet de spécifier la taille maximale d’une image qui peut être poussée vers un registre d’images OpenShift.

Lorsque vous poussez des images vers un registre d’images OpenShift, les éléments suivants doivent être vrais:

  • La taille de l’image doit être inférieure ou égale à la taille maximale pour les images spécifiées dans l’objet LimitRange.

Définition de l’objet LimitRange d’image

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 
1

spec:
  limits:
    - type: openshift.io/Image
      max:
        storage: 1Gi 
2
Copy to Clipboard Toggle word wrap

1
Le nom de l’objet LimitRange.
2
La taille maximale d’une image qui peut être poussée vers un registre d’images OpenShift.
Avertissement

La taille de l’image n’est pas toujours disponible dans le manifeste d’une image téléchargée. C’est particulièrement le cas pour les images construites avec Docker 1.10 ou supérieure et poussées vers un registre v2. Lorsqu’une telle image est tirée avec un démon Docker plus ancien, le manifeste de l’image est converti par le registre en schema v1 dépourvu de toutes les informations de taille. Aucune limite de stockage définie sur les images ne l’empêche d’être téléchargée.

La question est en cours d’examen.

8.3.1.1.4. Limites de flux d’images

L’objet LimitRange vous permet de spécifier des limites pour les flux d’images.

Dans chaque flux d’images, les éléments suivants doivent être vrais:

  • Le nombre de balises d’image dans une spécification ImageStream doit être inférieur ou égal à la contrainte openshift.io/image-tags dans l’objet LimitRange.
  • Le nombre de références uniques aux images dans une spécification ImageStream doit être inférieur ou égal à la contrainte openshift.io/images dans l’objet de plage limite.

Définition d’objet ImageStream LimitRange

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 
1

spec:
  limits:
    - type: openshift.io/ImageStream
      max:
        openshift.io/image-tags: 20 
2

        openshift.io/images: 30 
3
Copy to Clipboard Toggle word wrap

1
Le nom de l’objet LimitRange.
2
Le nombre maximal de balises d’image uniques dans le paramètre imagestream.spec.tags dans la spécification imagestream.
3
Le nombre maximal de références d’image uniques dans le paramètre imagestream.status.tags dans la spécification imagestream.

La ressource openshift.io/image-tags représente des références d’image uniques. Les références possibles sont un ImageStreamTag, une ImageStreamImage et un DockerImage. Les balises peuvent être créées à l’aide des commandes oc tag et oc import-image. Aucune distinction n’est faite entre les références internes et externes. Cependant, chaque référence unique marquée dans une spécification ImageStream est comptée une seule fois. Il ne limite pas les poussées à un registre d’images de conteneur interne de quelque manière que ce soit, mais est utile pour la restriction des balises.

La ressource openshift.io/images représente des noms d’images uniques enregistrés dans l’état du flux d’images. Il permet de restreindre un certain nombre d’images qui peuvent être poussées au registre d’images OpenShift. Les références internes et externes ne sont pas distinguées.

8.3.1.1.5. Limites persistantes des revendications de volume

L’objet LimitRange vous permet de restreindre le stockage demandé dans une revendication de volume persistant (PVC).

Dans toutes les revendications de volume persistantes dans un projet, les éléments suivants doivent être vrais:

  • La demande de ressource dans une revendication de volume persistant (PVC) doit être supérieure ou égale à la contrainte minimale pour les PVC spécifiée dans l’objet LimitRange.
  • La demande de ressource dans une revendication de volume persistant (PVC) doit être inférieure ou égale à la contrainte maximale pour les PVC spécifiée dans l’objet LimitRange.

Définition d’objet en PVC LimitRange

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 
1

spec:
  limits:
    - type: "PersistentVolumeClaim"
      min:
        storage: "2Gi" 
2

      max:
        storage: "50Gi" 
3
Copy to Clipboard Toggle word wrap

1
Le nom de l’objet LimitRange.
2
La quantité minimale de stockage qui peut être demandée dans une revendication de volume persistant.
3
La quantité maximale de stockage qui peut être demandée dans une revendication de volume persistant.

8.3.2. Création d’une gamme de limites

Appliquer une plage limite à un projet:

  1. Créez un objet LimitRange avec vos spécifications requises:

    apiVersion: "v1"
    kind: "LimitRange"
    metadata:
      name: "resource-limits" 
    1
    
    spec:
      limits:
        - type: "Pod" 
    2
    
          max:
            cpu: "2"
            memory: "1Gi"
          min:
            cpu: "200m"
            memory: "6Mi"
        - type: "Container" 
    3
    
          max:
            cpu: "2"
            memory: "1Gi"
          min:
            cpu: "100m"
            memory: "4Mi"
          default: 
    4
    
            cpu: "300m"
            memory: "200Mi"
          defaultRequest: 
    5
    
            cpu: "200m"
            memory: "100Mi"
          maxLimitRequestRatio: 
    6
    
            cpu: "10"
        - type: openshift.io/Image 
    7
    
          max:
            storage: 1Gi
        - type: openshift.io/ImageStream 
    8
    
          max:
            openshift.io/image-tags: 20
            openshift.io/images: 30
        - type: "PersistentVolumeClaim" 
    9
    
          min:
            storage: "2Gi"
          max:
            storage: "50Gi"
    Copy to Clipboard Toggle word wrap
    1
    Indiquez un nom pour l’objet LimitRange.
    2
    Afin de fixer des limites pour un pod, spécifiez les demandes minimales et maximales de CPU et de mémoire au besoin.
    3
    Afin de fixer des limites pour un conteneur, spécifiez les demandes minimales et maximales de CPU et de mémoire au besoin.
    4
    En option. Dans le cas d’un conteneur, spécifiez la quantité par défaut de CPU ou de mémoire qu’un conteneur peut utiliser, s’il n’est pas spécifié dans la spécification Pod.
    5
    En option. Dans le cas d’un conteneur, spécifiez la quantité par défaut de CPU ou de mémoire qu’un conteneur peut demander, s’il n’est pas spécifié dans la spécification Pod.
    6
    En option. Dans le cas d’un conteneur, spécifiez le rapport limite/demande maximum qui peut être spécifié dans la spécification Pod.
    7
    Afin de définir des limites pour un objet Image, définissez la taille maximale d’une image qui peut être poussée à un registre d’images OpenShift.
    8
    Afin de définir des limites pour un flux d’images, définissez le nombre maximal de balises d’image et de références qui peuvent être dans le fichier objet ImageStream, au besoin.
    9
    Afin de fixer des limites pour une revendication de volume persistant, fixez la quantité minimale et maximale de stockage qui peut être demandée.
  2. Créer l’objet:

    $ oc create -f <limit_range_file> -n <project> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Indiquez le nom du fichier YAML que vous avez créé et le projet où vous souhaitez que les limites s’appliquent.

8.3.3. Afficher une limite

Il est possible d’afficher les limites définies dans un projet en naviguant dans la console Web vers la page Quota du projet.

Il est également possible d’utiliser le CLI pour afficher les détails de la plage limite:

  1. Accédez à la liste de l’objet LimitRange défini dans le projet. À titre d’exemple, pour un projet appelé démoproject:

    $ oc get limits -n demoproject
    Copy to Clipboard Toggle word wrap
    NAME              CREATED AT
    resource-limits   2020-07-15T17:14:23Z
    Copy to Clipboard Toggle word wrap
  2. Décrivez l’objet LimitRange qui vous intéresse, par exemple la plage de limites ressources-limites:

    $ oc describe limits resource-limits -n demoproject
    Copy to Clipboard Toggle word wrap
    Name:                           resource-limits
    Namespace:                      demoproject
    Type                            Resource                Min     Max     Default Request Default Limit   Max Limit/Request Ratio
    ----                            --------                ---     ---     --------------- -------------   -----------------------
    Pod                             cpu                     200m    2       -               -               -
    Pod                             memory                  6Mi     1Gi     -               -               -
    Container                       cpu                     100m    2       200m            300m            10
    Container                       memory                  4Mi     1Gi     100Mi           200Mi           -
    openshift.io/Image              storage                 -       1Gi     -               -               -
    openshift.io/ImageStream        openshift.io/image      -       12      -               -               -
    openshift.io/ImageStream        openshift.io/image-tags -       10      -               -               -
    PersistentVolumeClaim           storage                 -       50Gi    -               -               -
    Copy to Clipboard Toggle word wrap

8.3.4. La suppression d’une plage de limites

De supprimer tout objet LimitRange actif pour ne plus appliquer les limites d’un projet:

  • Exécutez la commande suivante:

    $ oc delete limits <limit_name>
    Copy to Clipboard Toggle word wrap
Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat