3.11. Définir un quota de ressources de calcul pour OpenShift Pipelines


Un objet ResourceQuota dans Red Hat OpenShift Pipelines contrôle la consommation totale de ressources par espace de noms. Vous pouvez l'utiliser pour limiter la quantité d'objets créés dans un espace de noms, en fonction du type d'objet. En outre, vous pouvez spécifier un quota de ressources de calcul pour limiter la quantité totale de ressources de calcul consommées dans un espace de noms.

Cependant, vous pourriez vouloir limiter la quantité de ressources de calcul consommées par les pods résultant de l'exécution d'un pipeline, plutôt que de définir des quotas pour l'ensemble de l'espace de noms. Actuellement, Red Hat OpenShift Pipelines ne vous permet pas de spécifier directement le quota de ressources de calcul pour un pipeline.

Pour obtenir un certain degré de contrôle sur l'utilisation des ressources informatiques par un pipeline, il convient d'envisager les approches alternatives suivantes :

  • Définir les demandes et les limites de ressources pour chaque étape d'une tâche.

    Exemple : Définir les demandes et les limites de ressources pour chaque étape d'une tâche.

    ...
    spec:
      steps:
        - name: step-with-limts
          resources:
            requests:
              memory: 1Gi
              cpu: 500m
            limits:
              memory: 2Gi
              cpu: 800m
    ...
    Copy to Clipboard Toggle word wrap

  • Définissez des limites de ressources en spécifiant des valeurs pour l'objet LimitRange. Pour plus d'informations sur LimitRange, reportez-vous à la section Limiter la consommation de ressources avec des plages de limites.
  • Réduire la consommation de ressources du pipeline.
  • Définir et gérer des quotas de ressources par projet.
  • Idéalement, le quota de ressources de calcul pour un pipeline devrait correspondre à la quantité totale de ressources de calcul consommées par les pods fonctionnant simultanément dans un pipeline. Cependant, les pods qui exécutent les tâches consomment des ressources de calcul en fonction du cas d'utilisation. Par exemple, une tâche de construction Maven peut nécessiter différentes ressources de calcul pour les différentes applications qu'elle construit. Par conséquent, vous ne pouvez pas prédéterminer les quotas de ressources de calcul pour les tâches d'un pipeline générique. Pour une meilleure prévisibilité et un meilleur contrôle de l'utilisation des ressources de calcul, utilisez des pipelines personnalisés pour différentes applications.
Note

Lors de l'utilisation de Red Hat OpenShift Pipelines dans un espace de noms configuré avec un objet ResourceQuota, les pods résultant des exécutions de tâches et des exécutions de pipelines peuvent échouer avec une erreur, telle que : failed quota: <quota name> must specify cpu, memory.

Pour éviter cette erreur, effectuez l'une des opérations suivantes :

  • (Recommandé) Spécifiez une plage de limites pour l'espace de noms.
  • Définir explicitement les demandes et les limites pour tous les conteneurs.

Pour plus d'informations, reportez-vous à la question et à la résolution.

Si votre cas d'utilisation n'est pas couvert par ces approches, vous pouvez mettre en œuvre une solution de contournement en utilisant un quota de ressources pour une classe de priorité.

Un objet PriorityClass associe les noms des classes de priorité aux valeurs entières qui indiquent leurs priorités relatives. Les valeurs les plus élevées augmentent la priorité d'une classe. Après avoir créé une classe de priorité, vous pouvez créer des modules qui spécifient le nom de la classe de priorité dans leurs spécifications. En outre, vous pouvez contrôler la consommation de ressources système d'un pod en fonction de sa priorité.

La spécification d'un quota de ressources pour un pipeline est similaire à la définition d'un quota de ressources pour le sous-ensemble de pods créés par l'exécution d'un pipeline. Les étapes suivantes fournissent un exemple de solution de contournement en spécifiant un quota de ressources basé sur la classe de priorité.

Procédure

  1. Créer une classe de priorité pour un pipeline.

    Exemple : Classe de priorité pour un pipeline

    apiVersion: scheduling.k8s.io/v1
    kind: PriorityClass
    metadata:
      name: pipeline1-pc
    value: 1000000
    description: "Priority class for pipeline1"
    Copy to Clipboard Toggle word wrap

  2. Créer un quota de ressources pour un pipeline.

    Exemple : Quota de ressources pour un pipeline

    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: pipeline1-rq
    spec:
      hard:
        cpu: "1000"
        memory: 200Gi
        pods: "10"
      scopeSelector:
        matchExpressions:
        - operator : In
          scopeName: PriorityClass
          values: ["pipeline1-pc"]
    Copy to Clipboard Toggle word wrap

  3. Vérifier l'utilisation du quota de ressources pour le pipeline.

    Exemple : Vérifier l'utilisation des quotas de ressources pour le pipeline

    $ oc describe quota
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    Name:       pipeline1-rq
    Namespace:  default
    Resource    Used  Hard
    --------    ----  ----
    cpu         0     1k
    memory      0     200Gi
    pods        0     10
    Copy to Clipboard Toggle word wrap

    Comme les pods ne sont pas en cours d'exécution, le quota est inutilisé.

  4. Créer les pipelines et les tâches.

    Exemple : YAML pour le pipeline

    apiVersion: tekton.dev/v1alpha1
    kind: Pipeline
    metadata:
      name: maven-build
    spec:
      workspaces:
      - name: local-maven-repo
      resources:
      - name: app-git
        type: git
      tasks:
      - name: build
        taskRef:
          name: mvn
        resources:
          inputs:
          - name: source
            resource: app-git
        params:
        - name: GOALS
          value: ["package"]
        workspaces:
        - name: maven-repo
          workspace: local-maven-repo
      - name: int-test
        taskRef:
          name: mvn
        runAfter: ["build"]
        resources:
          inputs:
          - name: source
            resource: app-git
        params:
        - name: GOALS
          value: ["verify"]
        workspaces:
        - name: maven-repo
          workspace: local-maven-repo
      - name: gen-report
        taskRef:
          name: mvn
        runAfter: ["build"]
        resources:
          inputs:
          - name: source
            resource: app-git
        params:
        - name: GOALS
          value: ["site"]
        workspaces:
        - name: maven-repo
          workspace: local-maven-repo
    Copy to Clipboard Toggle word wrap

    Exemple : YAML pour une tâche dans le pipeline

    apiVersion: tekton.dev/v1alpha1
    kind: Task
    metadata:
      name: mvn
    spec:
      workspaces:
      - name: maven-repo
      inputs:
        params:
        - name: GOALS
          description: The Maven goals to run
          type: array
          default: ["package"]
        resources:
        - name: source
          type: git
      steps:
        - name: mvn
          image: gcr.io/cloud-builders/mvn
          workingDir: /workspace/source
          command: ["/usr/bin/mvn"]
          args:
            - -Dmaven.repo.local=$(workspaces.maven-repo.path)
            - "$(inputs.params.GOALS)"
          priorityClassName: pipeline1-pc
    Copy to Clipboard Toggle word wrap

    Note

    Veiller à ce que toutes les tâches du pipeline appartiennent à la même classe de priorité.

  5. Créer et lancer l'exécution du pipeline.

    Exemple : YAML pour l'exécution d'un pipeline

    apiVersion: tekton.dev/v1alpha1
    kind: PipelineRun
    metadata:
      generateName: petclinic-run-
    spec:
      pipelineRef:
        name: maven-build
      resources:
      - name: app-git
        resourceSpec:
          type: git
          params:
            - name: url
              value: https://github.com/spring-projects/spring-petclinic
    Copy to Clipboard Toggle word wrap

  6. Une fois les pods créés, vérifiez l'utilisation du quota de ressources pour l'exécution du pipeline.

    Exemple : Vérifier l'utilisation des quotas de ressources pour le pipeline

    $ oc describe quota
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    Name:       pipeline1-rq
    Namespace:  default
    Resource    Used  Hard
    --------    ----  ----
    cpu         500m  1k
    memory      10Gi  200Gi
    pods        1     10
    Copy to Clipboard Toggle word wrap

    La sortie indique que vous pouvez gérer le quota de ressources combiné pour tous les pods fonctionnant simultanément et appartenant à une classe de priorité, en spécifiant le quota de ressources par classe de priorité.

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