Chapitre 9. Quotas
9.1. Quotas de ressources par projet Copier lienLien copié sur presse-papiers!
Un resource quota, défini par un objet ResourceQuota
, fournit des contraintes qui limitent la consommation globale de ressources par projet. Il peut limiter la quantité d'objets pouvant être créés dans un projet par type, ainsi que la quantité totale de ressources de calcul et de stockage susceptibles d'être consommées par les ressources de ce projet.
Ce guide décrit le fonctionnement des quotas de ressources, la manière dont les administrateurs de clusters peuvent définir et gérer les quotas de ressources par projet, et la manière dont les développeurs et les administrateurs de clusters peuvent les visualiser.
9.1.1. Ressources gérées par quotas Copier lienLien copié sur presse-papiers!
Les paragraphes suivants décrivent l'ensemble des ressources de calcul et des types d'objets qui peuvent être gérés par un quota.
Un pod est dans un état terminal si status.phase in (Failed, Succeeded)
est vrai.
Nom de la ressource | Description |
---|---|
|
La somme des demandes de CPU de tous les pods dans un état non terminal ne peut pas dépasser cette valeur. |
|
La somme des demandes de mémoire de tous les pods dans un état non terminal ne peut pas dépasser cette valeur. |
|
La somme des demandes de CPU de tous les pods dans un état non terminal ne peut pas dépasser cette valeur. |
|
La somme des demandes de mémoire de tous les pods dans un état non terminal ne peut pas dépasser cette valeur. |
| La somme des limites de CPU de tous les pods dans un état non terminal ne peut pas dépasser cette valeur. |
| La somme des limites de mémoire de tous les pods dans un état non terminal ne peut pas dépasser cette valeur. |
Nom de la ressource | Description |
---|---|
| La somme des demandes de stockage sur l'ensemble des réclamations de volumes persistants dans n'importe quel état ne peut pas dépasser cette valeur. |
| Le nombre total de réclamations de volumes persistants qui peuvent exister dans le projet. |
| La somme des demandes de stockage sur l'ensemble des réclamations de volumes persistants dans n'importe quel état qui ont une classe de stockage correspondante, ne peut pas dépasser cette valeur. |
| Le nombre total de réclamations de volumes persistants avec une classe de stockage correspondante qui peuvent exister dans le projet. |
|
La somme des demandes de stockage éphémère local pour tous les pods dans un état non terminal ne peut pas dépasser cette valeur. |
|
La somme des demandes de stockage éphémère pour tous les pods dans un état non terminal ne peut pas dépasser cette valeur. |
| La somme des limites de stockage éphémère de tous les pods dans un état non terminal ne peut pas dépasser cette valeur. |
Nom de la ressource | Description |
---|---|
| Le nombre total de pods dans un état non terminal qui peuvent exister dans le projet. |
| Le nombre total de contrôleurs de réplication qui peuvent exister dans le projet. |
| Nombre total de quotas de ressources pouvant exister dans le projet. |
| Le nombre total de services qui peuvent exister dans le projet. |
|
Le nombre total de services de type |
|
Le nombre total de services de type |
| Le nombre total de secrets qui peuvent exister dans le projet. |
|
Le nombre total d'objets |
| Le nombre total de réclamations de volumes persistants qui peuvent exister dans le projet. |
| Le nombre total de flux d'images qui peuvent exister dans le projet. |
9.1.2. Périmètre des quotas Copier lienLien copié sur presse-papiers!
Chaque quota peut être associé à un ensemble de scopes. Un quota ne mesure l'utilisation d'une ressource que si elle correspond à l'intersection des champs d'application énumérés.
L'ajout d'un champ d'application à un quota restreint l'ensemble des ressources auxquelles ce quota peut s'appliquer. La spécification d'une ressource en dehors de l'ensemble autorisé entraîne une erreur de validation.
Champ d'application | Description |
|
Faire correspondre les pods qui ont la meilleure qualité de service pour |
|
Les pods qui n'ont pas la meilleure qualité de service pour |
Un champ d'application BestEffort
limite un quota aux ressources suivantes :
-
pods
Un champ d'application NotBestEffort
limite un quota au suivi des ressources suivantes :
-
pods
-
memory
-
requests.memory
-
limits.memory
-
cpu
-
requests.cpu
-
limits.cpu
9.1.3. Application des quotas Copier lienLien copié sur presse-papiers!
Après la création d'un quota de ressources pour un projet, le projet limite la possibilité de créer de nouvelles ressources susceptibles d'enfreindre la contrainte de quota jusqu'à ce qu'il ait calculé des statistiques d'utilisation mises à jour.
Après la création d'un quota et la mise à jour des statistiques d'utilisation, le projet accepte la création de nouveaux contenus. Lorsque vous créez ou modifiez des ressources, votre quota d'utilisation est incrémenté dès la demande de création ou de modification de la ressource.
Lorsque vous supprimez une ressource, l'utilisation de votre quota est décrémentée lors du prochain recalcul complet des statistiques de quota pour le projet. Un délai configurable détermine le temps nécessaire pour ramener les statistiques d'utilisation des quotas à la valeur observée actuellement dans le système.
Si les modifications du projet dépassent une limite de quota d'utilisation, le serveur refuse l'action et un message d'erreur approprié est renvoyé à l'utilisateur expliquant la contrainte de quota violée et les statistiques d'utilisation actuellement observées dans le système.
9.1.4. Demandes et limites Copier lienLien copié sur presse-papiers!
Lors de l'allocation des ressources informatiques, chaque conteneur peut spécifier une demande et une valeur limite pour le processeur, la mémoire et le stockage éphémère. Les quotas peuvent restreindre n'importe laquelle de ces valeurs.
Si le quota a une valeur spécifiée pour requests.cpu
ou requests.memory
, il faut que chaque conteneur entrant fasse une demande explicite pour ces ressources. Si le quota a une valeur spécifiée pour limits.cpu
ou limits.memory
, il faut que chaque conteneur entrant spécifie une limite explicite pour ces ressources.
9.1.5. Exemples de définitions de quotas de ressources Copier lienLien copié sur presse-papiers!
core-object-counts.yaml
- 1
- Le nombre total d'objets
ConfigMap
qui peuvent exister dans le projet. - 2
- Le nombre total de réclamations de volume persistantes (PVC) qui peuvent exister dans le projet.
- 3
- Le nombre total de contrôleurs de réplication qui peuvent exister dans le projet.
- 4
- Le nombre total de secrets qui peuvent exister dans le projet.
- 5
- Le nombre total de services qui peuvent exister dans le projet.
- 6
- Le nombre total de services de type
LoadBalancer
qui peuvent exister dans le projet.
openshift-object-counts.yaml
- 1
- Nombre total de flux d'images pouvant exister dans le projet.
compute-resources.yaml
- 1
- Le nombre total de pods dans un état non terminal qui peuvent exister dans le projet.
- 2
- Sur l'ensemble des pods dans un état non terminal, la somme des demandes de CPU ne peut pas dépasser 1 cœur.
- 3
- Sur l'ensemble des pods dans un état non terminal, la somme des demandes de mémoire ne peut pas dépasser 1Gi.
- 4
- Pour tous les pods dans un état non terminal, la somme des limites de CPU ne peut pas dépasser 2 cœurs.
- 5
- Pour tous les pods dans un état non terminal, la somme des limites de mémoire ne peut pas dépasser 2Gi.
besteffort.yaml
compute-resources-long-running.yaml
- 1
- Le nombre total de pods dans un état non terminal.
- 2
- Pour tous les pods dans un état non terminal, la somme des limites de CPU ne peut pas dépasser cette valeur.
- 3
- La somme des limites de mémoire de tous les pods dans un état non terminal ne peut pas dépasser cette valeur.
- 4
- Restreint le quota aux seuls pods correspondants pour lesquels
spec.activeDeadlineSeconds
est défini surnil
. Les pods de construction relèvent deNotTerminating
à moins que la politiqueRestartNever
ne soit appliquée.
compute-resources-time-bound.yaml
- 1
- Le nombre total de pods dans un état de terminaison.
- 2
- Pour tous les pods en état de terminaison, la somme des limites de CPU ne peut pas dépasser cette valeur.
- 3
- La somme des limites de mémoire ne peut pas dépasser cette valeur pour tous les pods en état de terminaison.
- 4
- Restreint le quota aux seuls pods correspondants où
spec.activeDeadlineSeconds >=0
. Par exemple, ce quota s'applique aux pods de construction ou de déploiement, mais pas aux pods de longue durée comme un serveur web ou une base de données.
storage-consumption.yaml
- 1
- Le nombre total de demandes de volumes persistants dans un projet
- 2
- Pour toutes les demandes de volume persistant d'un projet, la somme de l'espace de stockage demandé ne peut dépasser cette valeur.
- 3
- Pour toutes les demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage or ne peut pas dépasser cette valeur.
- 4
- Pour toutes les demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage argent ne peut pas dépasser cette valeur.
- 5
- Pour toutes les demandes de volumes persistants d'un projet, le nombre total de demandes dans la classe de stockage Silver ne peut pas dépasser cette valeur.
- 6
- Sur l'ensemble des demandes de volumes persistants d'un projet, la somme des espaces de stockage demandés dans la classe de stockage bronze ne peut pas dépasser cette valeur. Lorsque cette valeur est fixée à
0
, cela signifie que la classe de stockage bronze ne peut pas demander de stockage. - 7
- Pour toutes les demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage bronze ne peut pas dépasser cette valeur. Lorsque cette valeur est fixée à
0
, cela signifie que la classe de stockage bronze ne peut pas créer de demandes. - 8
- Sur l'ensemble des pods dans un état non terminal, la somme des demandes de stockage éphémère ne peut pas dépasser 2Gi.
- 9
- La somme des limites de stockage éphémère de tous les pods dans un état non terminal ne peut pas dépasser 4Gi.
9.1.6. Création d'un quota Copier lienLien copié sur presse-papiers!
Vous pouvez créer un quota pour limiter l'utilisation des ressources dans un projet donné.
Procédure
- Définir le quota dans un fichier.
Utilisez le fichier pour créer le quota et l'appliquer à un projet :
oc create -f <file> [-n <project_name>]
$ oc create -f <file> [-n <project_name>]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Par exemple :
oc create -f core-object-counts.yaml -n demoproject
$ oc create -f core-object-counts.yaml -n demoproject
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.6.1. Création de quotas de nombre d'objets Copier lienLien copié sur presse-papiers!
Vous pouvez créer un quota de comptage d'objets pour tous les types de ressources standard à espace de noms sur OpenShift Container Platform, tels que les objets BuildConfig
et DeploymentConfig
. Un quota de comptage d'objets place un quota défini sur tous les types de ressources standard à espace de noms.
Lors de l'utilisation d'un quota de ressources, un objet est imputé au quota lors de sa création. Ces types de quotas sont utiles pour se protéger contre l'épuisement des ressources. Le quota ne peut être créé que s'il y a suffisamment de ressources disponibles dans le projet.
Procédure
Pour configurer un quota de comptage d'objets pour une ressource :
Exécutez la commande suivante :
oc create quota <name> \ --hard=count/<resource>.<group>=<quota>,count/<resource>.<group>=<quota>
$ oc create quota <name> \ --hard=count/<resource>.<group>=<quota>,count/<resource>.<group>=<quota>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- La variable
<resource>
est le nom de la ressource et<group>
est le groupe API, le cas échéant. Utilisez la commandeoc api-resources
pour obtenir une liste des ressources et des groupes d'API qui leur sont associés.
Par exemple :
oc create quota test \ --hard=count/deployments.extensions=2,count/replicasets.extensions=4,count/pods=3,count/secrets=4
$ oc create quota test \ --hard=count/deployments.extensions=2,count/replicasets.extensions=4,count/pods=3,count/secrets=4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
resourcequota "test" created
resourcequota "test" created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cet exemple limite les ressources répertoriées à la limite stricte de chaque projet du cluster.
Vérifiez que le quota a été créé :
oc describe quota test
$ oc describe quota test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.6.2. Définition d'un quota de ressources pour les ressources étendues Copier lienLien copié sur presse-papiers!
Le surengagement des ressources n'est pas autorisé pour les ressources étendues, vous devez donc spécifier requests
et limits
pour la même ressource étendue dans un quota. Actuellement, seuls les éléments de quota avec le préfixe requests.
sont autorisés pour les ressources étendues. Voici un exemple de scénario permettant de définir un quota de ressources pour la ressource GPU nvidia.com/gpu
.
Procédure
Déterminez le nombre de GPU disponibles sur un nœud de votre cluster. Par exemple, le nombre de GPU disponibles sur un nœud de votre cluster :
oc describe node ip-172-31-27-209.us-west-2.compute.internal | egrep 'Capacity|Allocatable|gpu'
# oc describe node ip-172-31-27-209.us-west-2.compute.internal | egrep 'Capacity|Allocatable|gpu'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans cet exemple, 2 GPU sont disponibles.
Fixer un quota dans l'espace de noms
nvidia
. Dans cet exemple, le quota est de1
:cat gpu-quota.yaml
# cat gpu-quota.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer le quota :
oc create -f gpu-quota.yaml
# oc create -f gpu-quota.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
resourcequota/gpu-quota created
resourcequota/gpu-quota created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vérifiez que le quota de l'espace de noms est correct :
oc describe quota gpu-quota -n nvidia
# oc describe quota gpu-quota -n nvidia
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 0 1
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 0 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Définir un pod qui demande un seul GPU. L'exemple de fichier de définition suivant s'appelle
gpu-pod.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer la capsule :
oc create -f gpu-pod.yaml
# oc create -f gpu-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vérifiez que le module est en cours d'exécution :
oc get pods
# oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME READY STATUS RESTARTS AGE gpu-pod-s46h7 1/1 Running 0 1m
NAME READY STATUS RESTARTS AGE gpu-pod-s46h7 1/1 Running 0 1m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vérifiez que le compteur du quota
Used
est correct :oc describe quota gpu-quota -n nvidia
# oc describe quota gpu-quota -n nvidia
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 1 1
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 1 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Tentative de création d'un second pod GPU dans l'espace de noms
nvidia
. Celui-ci est techniquement disponible sur le nœud car il possède 2 GPU :oc create -f gpu-pod.yaml
# oc create -f gpu-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Error from server (Forbidden): error when creating "gpu-pod.yaml": pods "gpu-pod-f7z2w" is forbidden: exceeded quota: gpu-quota, requested: requests.nvidia.com/gpu=1, used: requests.nvidia.com/gpu=1, limited: requests.nvidia.com/gpu=1
Error from server (Forbidden): error when creating "gpu-pod.yaml": pods "gpu-pod-f7z2w" is forbidden: exceeded quota: gpu-quota, requested: requests.nvidia.com/gpu=1, used: requests.nvidia.com/gpu=1, limited: requests.nvidia.com/gpu=1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ce message d'erreur Forbidden est attendu parce que vous avez un quota de 1 GPU et que ce pod a essayé d'allouer un deuxième GPU, qui dépasse son quota.
9.1.7. Consultation d'un quota Copier lienLien copié sur presse-papiers!
Vous pouvez consulter les statistiques d'utilisation liées aux limites définies dans le quota d'un projet en naviguant dans la console web jusqu'à la page Quota du projet.
Vous pouvez également utiliser l'interface de gestion pour afficher les détails des quotas.
Procédure
Obtenir la liste des quotas définis dans le projet. Par exemple, pour un projet appelé
demoproject
:oc get quota -n demoproject
$ oc get quota -n demoproject
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME AGE besteffort 11m compute-resources 2m core-object-counts 29m
NAME AGE besteffort 11m compute-resources 2m core-object-counts 29m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Décrivez le quota qui vous intéresse, par exemple le quota
core-object-counts
:oc describe quota core-object-counts -n demoproject
$ oc describe quota core-object-counts -n demoproject
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.8. Configuration de quotas de ressources explicites Copier lienLien copié sur presse-papiers!
Configurer des quotas de ressources explicites dans un modèle de demande de projet pour appliquer des quotas de ressources spécifiques dans les nouveaux projets.
Conditions préalables
- Accès au cluster en tant qu'utilisateur ayant le rôle d'administrateur de cluster.
-
Installez le CLI OpenShift (
oc
).
Procédure
Ajouter une définition de quota de ressources à un modèle de demande de projet :
Si un modèle de demande de projet n'existe pas dans un cluster :
Créez un modèle de projet bootstrap et produisez-le dans un fichier appelé
template.yaml
:oc adm create-bootstrap-project-template -o yaml > template.yaml
oc adm create-bootstrap-project-template -o yaml > template.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ajoutez une définition de quota de ressources à
template.yaml
. L'exemple suivant définit un quota de ressources nommé "consommation de stockage". La définition doit être ajoutée avant la sectionparameters:
dans le modèle :Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Le nombre total de demandes de volumes persistants dans un projet.
- 2
- Pour toutes les demandes de volume persistant d'un projet, la somme de l'espace de stockage demandé ne peut dépasser cette valeur.
- 3
- Pour toutes les demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage or ne peut pas dépasser cette valeur.
- 4
- Pour toutes les demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage argent ne peut pas dépasser cette valeur.
- 5
- Pour toutes les demandes de volumes persistants d'un projet, le nombre total de demandes dans la classe de stockage Silver ne peut pas dépasser cette valeur.
- 6
- Sur l'ensemble des demandes de volumes persistants d'un projet, la somme des espaces de stockage demandés dans la classe de stockage bronze ne peut pas dépasser cette valeur. Lorsque cette valeur est fixée à
0
, la classe de stockage bronze ne peut pas demander de stockage. - 7
- Sur l'ensemble des demandes de volumes persistants d'un projet, la somme du stockage demandé dans la classe de stockage bronze ne peut pas dépasser cette valeur. Lorsque cette valeur est définie sur
0
, la classe de stockage bronze ne peut pas créer de demandes.
Créer un modèle de demande de projet à partir du fichier
template.yaml
modifié dans l'espace de nomsopenshift-config
:oc create -f template.yaml -n openshift-config
$ oc create -f template.yaml -n openshift-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NotePour inclure la configuration en tant qu'annotation
kubectl.kubernetes.io/last-applied-configuration
, ajoutez l'option--save-config
à la commandeoc create
.Par défaut, le modèle s'appelle
project-request
.
Si un modèle de demande de projet existe déjà dans un cluster :
NoteSi vous gérez des objets de manière déclarative ou impérative au sein de votre cluster à l'aide de fichiers de configuration, modifiez le modèle de demande de projet existant à l'aide de ces fichiers.
Liste des modèles dans l'espace de noms
openshift-config
:oc get templates -n openshift-config
$ oc get templates -n openshift-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Modifier un modèle de demande de projet existant :
oc edit template <project_request_template> -n openshift-config
oc edit template <project_request_template> -n openshift-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Ajoutez une définition de quota de ressources, telle que l'exemple précédent
storage-consumption
, dans le modèle existant. La définition doit être ajoutée avant la sectionparameters:
du modèle.
Si vous avez créé un modèle de demande de projet, faites-y référence dans la ressource de configuration du projet du cluster :
Accéder à la ressource de configuration du projet pour l'éditer :
En utilisant la console web :
-
Naviguez jusqu'à la page Administration
Cluster Settings. - Cliquez sur Configuration pour afficher toutes les ressources de configuration.
- Trouvez l'entrée pour Project et cliquez sur Edit YAML.
-
Naviguez jusqu'à la page Administration
En utilisant le CLI :
Modifier la ressource
project.config.openshift.io/cluster
:oc edit project.config.openshift.io/cluster
$ oc edit project.config.openshift.io/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Mettez à jour la section
spec
de la ressource de configuration du projet pour inclure les paramètresprojectRequestTemplate
etname
. L'exemple suivant fait référence au nom du modèle de demande de projet par défautproject-request
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérifier que le quota de ressources est appliqué lors de la création des projets :
Créer un projet :
oc new-project <nom_du_projet>
oc new-project <nom_du_projet>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Liste des quotas de ressources du projet :
oc get resourcequotas
$ oc get resourcequotas
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Décrivez en détail le quota de ressources :
oc describe resourcequotas <resource_quota_name>
oc describe resourcequotas <resource_quota_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow