7.3. Restreindre la consommation des ressources par des plages de limites


Par défaut, les conteneurs s'exécutent avec des ressources de calcul non limitées sur un cluster OpenShift Container Platform. Avec les plages de limites, vous pouvez restreindre la consommation de ressources pour des objets spécifiques dans un projet :

  • des pods et des conteneurs : Vous pouvez définir des exigences minimales et maximales en matière de CPU et de mémoire pour les pods et leurs conteneurs.
  • Flux d'images : Vous pouvez limiter le nombre d'images et de balises dans un objet ImageStream.
  • Images : Vous pouvez limiter la taille des images qui peuvent être transférées vers un registre interne.
  • Réclamations de volumes persistants (PVC) : Vous pouvez limiter la taille des PVC qui peuvent être demandés.

Si un pod ne respecte pas les contraintes imposées par la plage de limites, le pod ne peut pas être créé dans l'espace de noms.

7.3.1. À propos des plages de limites

Une plage de limites, définie par un objet LimitRange, restreint 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).

Toutes les demandes de création et de modification de ressources sont évaluées par rapport à chaque objet LimitRange du projet. Si la ressource ne respecte pas l'une des contraintes énumérées, elle est rejetée.

L'illustration suivante montre un objet de plage de limites pour tous les composants : pod, conteneur, image, flux d'images ou PVC. Vous pouvez configurer des limites pour l'un ou l'ensemble de ces composants dans le même objet. Vous créez un objet de plage de limites différent pour chaque projet dans lequel vous souhaitez contrôler les ressources.

Objet de la plage de limites d'un échantillon 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"

7.3.1.1. Limites des composants

Les exemples suivants montrent les paramètres de la plage de limites pour chaque composant. Les exemples sont divisés pour plus de clarté. Vous pouvez créer un seul objet LimitRange pour un ou tous les composants si nécessaire.

7.3.1.1.1. Limites des conteneurs

Une plage de limites vous permet de spécifier le minimum et le maximum de CPU et de mémoire que chaque conteneur d'un pod peut demander pour un projet spécifique. Si un conteneur est créé dans le projet, les demandes de CPU et de mémoire du conteneur dans la spécification Pod doivent être conformes aux valeurs définies dans l'objet LimitRange. Si ce n'est pas le cas, le module n'est pas créé.

  • La demande et la limite du processeur ou de la mémoire du conteneur doivent être supérieures ou égales à la contrainte de ressource min pour les conteneurs spécifiés dans l'objet LimitRange.
  • La demande et la limite du processeur ou de la mémoire du conteneur doivent être inférieures ou égales à la contrainte de ressource max pour les conteneurs spécifiés dans l'objet LimitRange.

    Si l'objet LimitRange définit une unité centrale max, il n'est pas nécessaire de définir une valeur d'unité centrale request dans la spécification Pod. Mais vous devez spécifier une valeur de CPU limit qui satisfasse la contrainte de CPU maximale spécifiée dans la plage de limites.

  • Le rapport entre les limites des conteneurs et les demandes doit être inférieur ou égal à la valeur maxLimitRequestRatio pour les conteneurs, spécifiée dans l'objet LimitRange.

    Si l'objet LimitRange définit une contrainte maxLimitRequestRatio, tout nouveau conteneur doit avoir une valeur request et une valeur limit. OpenShift Container Platform calcule le ratio limite/demande en divisant la valeur limit par la valeur request. Cette valeur doit être un nombre entier non négatif supérieur à 1.

    Par exemple, si un conteneur a cpu: 500 dans la valeur limit et cpu: 100 dans la valeur request, le ratio limite/demande pour cpu est 5. Ce ratio doit être inférieur ou égal à la valeur maxLimitRequestRatio.

Si la spécification Pod ne précise pas de limite ou de mémoire de ressource de conteneur, les valeurs de CPU et de mémoire de default ou defaultRequest pour les conteneurs spécifiés dans l'objet de plage de limites sont attribuées au conteneur.

Conteneur LimitRange définition de l'objet

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

1
Le nom de l'objet LimitRange.
2
La quantité maximale de CPU qu'un conteneur unique dans un pod peut demander.
3
Quantité maximale de mémoire qu'un conteneur unique d'un module peut demander.
4
La quantité minimale de CPU qu'un conteneur unique dans un pod peut demander.
5
Quantité minimale de mémoire qu'un conteneur unique d'un module peut demander.
6
La quantité par défaut de CPU qu'un conteneur peut utiliser si elle n'est pas spécifiée dans la spécification Pod.
7
La quantité de mémoire par défaut qu'un conteneur peut utiliser si elle n'est pas spécifiée dans la spécification Pod.
8
La quantité par défaut de CPU qu'un conteneur peut demander si elle n'est pas spécifiée dans la spécification Pod.
9
La quantité de mémoire par défaut qu'un conteneur peut demander si elle n'est pas spécifiée dans la spécification Pod.
10
Rapport maximum entre la limite et la demande pour un conteneur.
7.3.1.1.2. Limites du pod

Une plage de limites 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é. Pour créer un conteneur dans le projet, les demandes de CPU et de mémoire du conteneur dans la spécification Pod doivent être conformes aux valeurs définies dans l'objet LimitRange. Si ce n'est pas le cas, le module n'est pas créé.

Si la spécification Pod ne précise pas de limite ou de mémoire de ressource de conteneur, les valeurs de CPU et de mémoire de default ou defaultRequest pour les conteneurs spécifiés dans l'objet de plage de limites sont attribuées au conteneur.

Pour tous les conteneurs d'un module, les conditions suivantes doivent être remplies :

  • La demande et la limite du processeur ou de la mémoire du conteneur doivent être supérieures ou égales aux contraintes de ressources de min pour les pods spécifiés dans l'objet LimitRange.
  • La demande et la limite du processeur ou de la mémoire du conteneur doivent être inférieures ou égales aux contraintes de ressources de max pour les pods spécifiés dans l'objet LimitRange.
  • Le rapport entre les limites des conteneurs et les demandes doit être inférieur ou égal à la contrainte maxLimitRequestRatio spécifiée dans l'objet LimitRange.

Pod LimitRange définition de l'objet

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

1
Le nom de l'objet de la plage de limites.
2
La quantité maximale de CPU qu'un pod peut demander pour tous les conteneurs.
3
La quantité maximale de mémoire qu'un pod peut demander pour tous les conteneurs.
4
La quantité minimale de CPU qu'un pod peut demander à tous les conteneurs.
5
La quantité minimale de mémoire qu'un pod peut demander à tous les conteneurs.
6
Rapport maximum entre la limite et la demande pour un conteneur.
7.3.1.1.3. Limites d'images

Un 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 l'on pousse des images vers un registre d'images OpenShift, les points suivants doivent être respectés :

  • max La taille de l'image doit être inférieure ou égale à la taille des images spécifiée dans l'objet LimitRange.

Image LimitRange Définition de l'objet

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 1
spec:
  limits:
    - type: openshift.io/Image
      max:
        storage: 1Gi 2

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.
Note

Pour éviter que des blobs dépassant la limite ne soient téléchargés vers le registre, ce dernier doit être configuré pour appliquer des quotas.

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 plus et poussées vers un registre v2. Si une telle image est tirée avec un ancien daemon Docker, le manifeste de l'image est converti par le registre en schéma v1 sans les informations de taille. Aucune limite de stockage fixée sur les images ne les empêche d'être téléchargées.

La question est en cours de traitement.

7.3.1.1.4. Limites du flux d'images

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

Pour chaque flux d'images, les conditions suivantes doivent être remplies :

  • 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 limit range.

Définition de l'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

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

La ressource openshift.io/image-tags représente des références d'images uniques. Les références possibles sont an ImageStreamTag, an ImageStreamImage et a 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 étiquetée dans une spécification ImageStream n'est comptée qu'une seule fois. Cette spécification ne limite en rien les accès à un registre interne d'images de conteneurs, mais elle est utile pour la restriction des balises.

La ressource openshift.io/images représente des noms d'images uniques enregistrés dans le statut du flux d'images. Elle permet de restreindre le nombre d'images qui peuvent être poussées vers le registre d'images d'OpenShift. Les références internes et externes ne sont pas distinguées.

7.3.1.1.5. Limites des demandes d'indemnisation en cas de volume persistant

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

Pour toutes les demandes de volumes persistants d'un projet, les points suivants doivent être respectés :

  • La demande de ressources dans une revendication de volume persistant (PVC) doit être supérieure ou égale à la contrainte min pour les PVC qui est spécifiée dans l'objet LimitRange.
  • La demande de ressources dans une revendication de volume persistant (PVC) doit être inférieure ou égale à la contrainte max pour les PVC qui est spécifiée dans l'objet LimitRange.

PVC LimitRange définition de l'objet

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 1
spec:
  limits:
    - type: "PersistentVolumeClaim"
      min:
        storage: "2Gi" 2
      max:
        storage: "50Gi" 3

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

7.3.2. Création d'une plage de limites

Pour appliquer une plage de limites à un projet :

  1. Créez un objet LimitRange avec les 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"
    1
    Spécifiez un nom pour l'objet LimitRange.
    2
    Pour définir les limites d'un module, spécifiez les demandes minimales et maximales de CPU et de mémoire, selon les besoins.
    3
    Pour définir des limites pour un conteneur, spécifiez les demandes minimales et maximales de CPU et de mémoire selon les besoins.
    4
    Facultatif. Pour un conteneur, indiquez la quantité par défaut de CPU ou de mémoire qu'un conteneur peut utiliser, si elle n'est pas spécifiée dans la spécification Pod.
    5
    Facultatif. Pour un conteneur, spécifiez la quantité par défaut de CPU ou de mémoire qu'un conteneur peut demander, si elle n'est pas spécifiée dans la spécification Pod.
    6
    Facultatif. Pour un conteneur, spécifier le rapport maximum entre la limite et la demande qui peut être spécifié dans la spécification Pod.
    7
    Pour définir les limites d'un objet Image, définissez la taille maximale d'une image qui peut être poussée vers un registre d'images OpenShift.
    8
    Pour fixer des limites à un flux d'images, définissez le nombre maximum de balises et de références d'images pouvant figurer dans le fichier objet ImageStream, selon les besoins.
    9
    Pour définir les limites d'une demande de volume persistant, définissez 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> $ oc create -f <limit_range_file> 1
    1
    Indiquez le nom du fichier YAML que vous avez créé et le projet dans lequel vous souhaitez que les limites s'appliquent.

7.3.3. Visualisation d'une limite

Vous pouvez visualiser toutes les limites définies dans un projet en naviguant dans la console web jusqu'à la page Quota du projet.

Vous pouvez également utiliser l'interface de communication pour afficher les détails de la plage de limites :

  1. Obtenir la liste des objets LimitRange définis dans le projet. Par exemple, pour un projet appelé demoproject:

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

    $ oc describe limits resource-limits -n demoproject
    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    -               -               -

7.3.4. Suppression d'une plage de limites

Pour supprimer tout objet LimitRange actif afin de ne plus appliquer les limites dans un projet :

  1. Exécutez la commande suivante :

    oc delete limits <limit_name>
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.

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 leBlog 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.

© 2024 Red Hat, Inc.