Cette page montre comment configurer les Pods pour qu’ils soient affectés à des classes particulières de qualité de service (QoS). Kubernetes utilise des classes de QoS pour prendre des décisions concernant l’ordonnancement et les évictions des pods.
Vous devez disposer d’un cluster Kubernetes et l’outil de ligne de commande kubectl doit être configuré pour communiquer avec votre cluster. Si vous ne possédez pas déjà de cluster, vous pouvez en créer un en utilisant Minikube, ou vous pouvez utiliser l’un de ces environnements Kubernetes:
Pour consulter la version, entrez kubectl version
.
Quand Kubernetes crée un Pod, il affecte une de ces classes QoS au Pod :
Créez un namespace de manière à ce que les ressources que vous créez dans cet exercice soient isolées du reste de votre cluster.
kubectl create namespace qos-example
Pour qu’un Pod reçoive une classe de QoS Guaranteed :
Ci-dessous le fichier de configuration d’un Pod qui a un seul conteneur. Le conteneur dispose d’une limite de mémoire et d’une demande de mémoire, tous deux égaux à 200 MiB. Le conteneur a également une limite CPU et une demande CPU, toutes deux égales à 700 milliCPU :
pods/qos/qos-pod.yaml
|
---|
|
Créez le Pod :
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod.yaml --namespace=qos-example
Consultez des informations détaillées sur le Pod :
kubectl get pod qos-demo --namespace=qos-example --output=yaml
Le résultat indique que Kubernetes a donné au pod une classe de qualité de service de type Guaranteed. De plus, il affiche que la demande de mémoire du conteneur du pod correspond à sa limite de mémoire, et que la demande de CPU correspond à sa limite de CPU.
spec:
containers:
...
resources:
limits:
cpu: 700m
memory: 200Mi
requests:
cpu: 700m
memory: 200Mi
...
qosClass: Guaranteed
Note: Si un conteneur spécifie sa propre limite de mémoire, mais ne spécifie pas de demande de mémoire, Kubernetes attribue automatiquement une demande de mémoire correspondant à la limite. De même, si un conteneur spécifie sa propre limite CPU, mais ne spécifie pas de demande de CPU, Kubernetes lui attribue automatiquement une demande de CPU qui correspond à cette limite.
Supprimez votre Pod :
kubectl delete pod qos-demo --namespace=qos-example
Un Pod reçoit une classe QoS de Burstable si :
Voici le fichier de configuration d’un pod qui a un seul conteneur. Le conteneur a une limite de mémoire de 200 MiB et une demande de mémoire de 100 MiB.
pods/qos/qos-pod-2.yaml
|
---|
|
Créez le Pod :
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-2.yaml --namespace=qos-example
Consultez des informations détaillées sur le Pod :
kubectl get pod qos-demo-2 --namespace=qos-example --output=yaml
La sortie montre que Kubernetes a accordé au pod une classe QoS de type Burstable.
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: qos-demo-2-ctr
resources:
limits:
memory: 200Mi
requests:
memory: 100Mi
...
qosClass: Burstable
Supprimez votre Pod :
kubectl delete pod qos-demo-2 --namespace=qos-example
Pour qu’un pod puisse avoir la classe QoS de BestEffort, les conteneurs dans le pod ne doivent pas avoir des limites ou des demandes de mémoire ou de CPU.
Voici le fichier de configuration d’un Pod qui a un seul conteneur. Le conteneur n’a pas des limites ou des demandes de mémoire ou de CPU :
pods/qos/qos-pod-3.yaml
|
---|
|
Créez le Pod :
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-3.yaml --namespace=qos-example
Consultez des informations détaillées sur le Pod :
kubectl get pod qos-demo-3 --namespace=qos-example --output=yaml
Le résultat montre que Kubernetes a accordé au pod une classe QoS de BestEffort.
spec:
containers:
...
resources: {}
...
qosClass: BestEffort
Supprimez votre Pod :
kubectl delete pod qos-demo-3 --namespace=qos-example
Voici le fichier de configuration d’un Pod qui a deux conteneurs. Un conteneur spécifie une demande de mémoire de 200 MiB. L’autre conteneur ne spécifie aucune demande ou limite.
pods/qos/qos-pod-4.yaml
|
---|
|
Notez que le pod répond aux critères de la classe QoS Burstable. En d’autres termes, il ne répond pas aux exigences de la classe de qualité de service Guaranteed, et l’un de ses conteneurs dispose d’une demande de mémoire.
Créez le Pod :
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-4.yaml --namespace=qos-example
Consultez des informations détaillées sur le Pod :
kubectl get pod qos-demo-4 --namespace=qos-example --output=yaml
Le résultat montre que Kubernetes a accordé au pod une classe QoS de Burstable:
spec:
containers:
...
name: qos-demo-4-ctr-1
resources:
requests:
memory: 200Mi
...
name: qos-demo-4-ctr-2
resources: {}
...
qosClass: Burstable
Supprimez votre pod :
kubectl delete pod qos-demo-4 --namespace=qos-example
Supprimez votre namespace.
kubectl delete namespace qos-example
Configuration des demandes et des limites de mémoire par défaut pour un Namespace
Configuration des demandes et des limites par défaut de CPU pour un Namespace
Configuration des contraintes de mémoire minimales et maximales pour un Namespace
Configuration des contraintes minimales et maximales du CPU pour un Namespace
Configuration des quotas de mémoire et de CPU pour un Namespace
Cette page est elle utile ?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.