3.10. Réduire la consommation de ressources d'OpenShift Pipelines
Si vous utilisez des clusters dans des environnements multi-locataires, vous devez contrôler la consommation des ressources de CPU, de mémoire et de stockage pour chaque projet et objet Kubernetes. Cela permet d'éviter qu'une application consomme trop de ressources et affecte les autres applications.
Pour définir les limites de ressources finales qui sont définies sur les pods résultants, Red Hat OpenShift Pipelines utilise les limites de quotas de ressources et les plages de limites du projet dans lequel ils sont exécutés.
Pour limiter la consommation de ressources dans votre projet, vous pouvez :
- Définir et gérer des quotas de ressources pour limiter la consommation globale de ressources.
- Utilisez les plages de limites pour restreindre la consommation de ressources pour des objets spécifiques, tels que les pods, les images, les flux d'images et les réclamations de volumes persistants.
3.10.1. Comprendre la consommation de ressources dans les pipelines Copier lienLien copié sur presse-papiers!
Chaque tâche consiste en un certain nombre d'étapes à exécuter dans un ordre particulier défini dans le champ steps
de la ressource Task
. Chaque tâche s'exécute comme un pod, et chaque étape s'exécute comme un conteneur au sein de ce pod.
Les étapes sont exécutées une par une. Le module qui exécute la tâche ne demande que les ressources nécessaires à l'exécution d'une seule image de conteneur (étape) de la tâche à la fois, et ne stocke donc pas de ressources pour toutes les étapes de la tâche.
Le champ Resources
de la spécification steps
spécifie les limites de la consommation de ressources. Par défaut, les demandes de ressources pour l'unité centrale, la mémoire et le stockage éphémère sont réglées sur les valeurs BestEffort
(zéro) ou sur les minimums fixés par les plages de limites dans ce projet.
Exemple de configuration des demandes et des limites de ressources pour une étape
Lorsque le paramètre LimitRange
et les valeurs minimales pour les demandes de ressources de conteneur sont spécifiés dans le projet dans lequel le pipeline et les exécutions de tâches sont exécutés, Red Hat OpenShift Pipelines examine toutes les valeurs LimitRange
dans le projet et utilise les valeurs minimales au lieu de zéro.
Exemple de configuration des paramètres de la plage de limites au niveau d'un projet
3.10.2. Atténuer la surconsommation de ressources dans les pipelines Copier lienLien copié sur presse-papiers!
Lorsque vous avez défini des limites de ressources pour les conteneurs de votre pod, OpenShift Container Platform additionne les limites de ressources demandées lorsque tous les conteneurs s'exécutent simultanément.
Pour consommer la quantité minimale de ressources nécessaires à l'exécution d'une étape à la fois dans la tâche invoquée, Red Hat OpenShift Pipelines demande le maximum de CPU, de mémoire et de stockage éphémère comme spécifié dans l'étape qui nécessite la plus grande quantité de ressources. Cela garantit que les besoins en ressources de toutes les étapes sont satisfaits. Les demandes autres que les valeurs maximales sont fixées à zéro.
Toutefois, ce comportement peut entraîner une utilisation des ressources plus importante que nécessaire. Si vous utilisez des quotas de ressources, cela peut également conduire à des pods non ordonnançables.
Prenons l'exemple d'une tâche à deux étapes qui utilise des scripts et qui ne définit pas de limites de ressources ni de demandes. Le pod résultant a deux conteneurs init (l'un pour la copie du point d'entrée, l'autre pour l'écriture des scripts) et deux conteneurs, un pour chaque étape.
OpenShift Container Platform utilise la plage de limites définie pour le projet afin de calculer les demandes de ressources requises et les limites. Pour cet exemple, définissez la plage de limites suivante dans le projet :
Dans ce scénario, chaque conteneur init utilise une demande de mémoire de 1Gi (la limite maximale de la plage de limites), et chaque conteneur utilise une demande de mémoire de 500Mi. Ainsi, la demande totale de mémoire pour le pod est de 2Gi.
Si la même plage de limites est utilisée avec une tâche de dix étapes, la demande finale de mémoire est de 5Gi, ce qui est supérieur à ce dont chaque étape a réellement besoin, c'est-à-dire 500Mi (puisque chaque étape s'exécute l'une après l'autre).
Ainsi, pour réduire la consommation de ressources, vous pouvez :
- Réduire le nombre d'étapes d'une tâche donnée en regroupant différentes étapes en une étape plus importante, en utilisant la fonction de script et la même image. Cela permet de réduire la ressource minimale requise.
- Répartir les étapes qui sont relativement indépendantes les unes des autres et qui peuvent s'exécuter seules dans plusieurs tâches au lieu d'une seule. Cela réduit le nombre d'étapes dans chaque tâche, ce qui diminue la demande pour chaque tâche, et le planificateur peut alors les exécuter lorsque les ressources sont disponibles.