Limites resources et ResourceQuota
Limites resources et ResourceQuota
Les ResourceQuotas dans un Namespace Kubernetes sont utilisées pour définir des quotas de ressources spécifiques à un namespace. Ils permettent de limiter la quantité totale de ressources (CPU, mémoire, nombre de pods, etc.) qu'un Namespace peut consommer dans un cluster Kubernetes. Les ResourceQuotas sont un moyen de garantir que les différents namespace d'un cluster partagent les ressources de manière équitable et ne monopolisent pas toutes les ressources disponibles.
Les requests et limits sont des paramètres de gestion des ressources pour les conteneurs qui permettent de contrôler l'utilisation des ressources CPU et mémoire. Ces paramètres garantissent une répartition équitable des ressources entre les pods et protègent le cluster des situations de surcharge.
1. Requests :
- Définition : La quantité minimale de ressources que le conteneur requiert pour fonctionner.
- Impact : Kubernetes utilise les valeurs de requests pour planifier les pods sur les nœuds ayant suffisamment de ressources disponibles.
- Si un nœud ne dispose pas des ressources demandées, le pod ne sera pas planifié (reste en état Pending).
2. Limits :
- Définition : La quantité maximale de ressources qu'un conteneur peut consommer.
- Impact :
- Si un conteneur dépasse ses limites de CPU, Kubernetes le bride (throttling).
- Si un conteneur dépasse ses limites de mémoire, il est tué par le mécanisme OOM (Out of Memory).
ResourceQuotas
Exemple 1 : Limiter la quantité totale de CPU et de mémoire dans un Namespace :
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-resource-quota
namespace: mon-namespace
spec:
hard:
requests.cpu: "2" # Limite totale des demandes CPU à 2 CPU
requests.memory: 4Gi # Limite totale des demandes mémoire à 4 GiB
limits.cpu: "4" # Limite totale des limites CPU à 4 CPU
limits.memory: 8Gi # Limite totale des limites mémoire à 8 GiB
Le ResourceQuota my-resource-quota limite la quantité totale de CPU et de mémoire que les pods peuvent consommer dans le namespace mon-espace-de-noms
Exemple 2 : Limiter le nombre de pods dans un Namespace :
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-quota-10p
namespace: mon-namespace
spec:
hard:
pods: "10" # Limite le nombre total de pods à 10
Le ResourceQuota resource-quota-10p limite le nombre total de pods qui peuvent être créés dans le namesapce mon-namespace à 10.
Exemple 3 : Limiter le nombre de services LoadBalancer :
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-resource-quota
namespace: mon-namespace
spec:
hard:
services.loadbalancers: "2" # Limite le nombre de services de type LoadBalancer à 2
Le ResourceQuota limite le nombre de services de type LoadBalancer pouvant être créés dans le namesapce à 2.
Exemple 1 : Demande et limite de ressources CPU et mémoire :
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: mon-image
resources:
requests:
memory: "512Mi" # Demande 512 MiB de mémoire
cpu: "250m" # Demande 250 milliCPU (0,25 CPU)
limits:
memory: "1Gi" # Limite l'utilisation mémoire à 1 GiB
cpu: "500m" # Limite l'utilisation CPU à 500 milliCPU (0,5 CPU)
Le conteneur "my-container" demande un minimum de 512 MiB de mémoire et 250 milliCPU (0,25 CPU) pour fonctionner correctement. De plus, il est limité à utiliser au maximum 1 GiB de mémoire et 500 milliCPU (0,5 CPU).
Exemple 2 : Demande de ressources CPU pour un StatefulSet :
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-statefulset
spec:
replicas: 3
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: mon-image
resources:
requests:
cpu: "100m" # Demande 100 milliCPU (0,1 CPU)
Le StatefulSet "my-statefulset" crée 3 replicas. Chacun de ces pods contient un conteneur qui demande un minimum de 100 milliCPU (0,1 CPU) pour fonctionner correctement. Les autres ressources ne sont pas spécifiées ici, ce qui signifie qu'il n'y a pas de demande ou de limite spécifique pour la mémoire.
Commentaires
Aucun commentaire pour le moment.