Limites des plages dans Kubernetes

Avec Limit Range, nous pouvons restreindre la consommation et la création de ressources car par défaut, les conteneurs fonctionnent avec des ressources informatiques illimitées sur un cluster Kubernetes. Un Pod peut consommer autant de CPU et de mémoire que défini par la Limit Range.

Une Limit Range fournit des contraintes sur :

  • Les ressources minimales et maximales
  • La demande de stockage minimale et maximale par PersistentVolumeClaim
  • Un rapport entre la demande et la limite pour une ressource dans un espace de nom.
  • Définir la demande/limite par défaut pour les ressources informatiques

Pour en savoir plus sur les plages de limites, visite la documentation officielle de Kubernetes ici.

Dans cet article, nous allons créer une plage de limites et voir comment définir des valeurs minimales et maximales pour les ressources CPU utilisées par les conteneurs et les pods. Nous verrons différents scénarios avec Limite et Demande sur le CPU.

Pré-requis

  1. Cluster Kubernetes avec au moins 1 nœud de travail.
    Si tu veux apprendre à créer un cluster Kubernetes, cliqueici. Ce guide t’aidera à créer un cluster Kubernetes avec 1 maître et 2 nœuds sur des instances EC2 AWS Ubuntu 18.04.

Que ferons-nous ?

  1. Crée une LimitRange dans l’espace de noms par défaut.
  2. Créer des Pods avec CPU Limit et Range dans l’espace de noms par défaut.

Créer une LimitRange dans l’espace de noms par défaut.

Créer un fichier pour définir une plage de limites dans l’espace de noms par défaut.

vim set-limit-range.yml
apiVersion: v1
kind: LimitRange
metadata:
  name: set-limit-range
spec:
  limits:
  - max:
      cpu: "800m"
    min:
      cpu: "200m"
    type: Container

set-limit-range-definition

Obtiens une liste des plages de limites existantes dans l’espace de noms par défaut et crée celle qui te convient à l’aide du fichier créé à l’étape précédente.

kubectl get limitrange
kubectl create -f set-limit-range.yml
kubectl get limitrange
kubectl describe limitrange set-limit-range

create-limit-range

Dans la capture d’écran ci-dessus, on peut voir que nous avons créé une plage de limites qui définit le CPU comme « Min=200m » et « Max=800m ».

Cela signifie que les pods de l’espace de noms par défaut ne peuvent pas avoir un CPU « inférieur à Min=200m » et « supérieur à Max=800m ».

Créer des pods avec une limite et une plage de CPU dans l’espace de noms par défaut

Pod avec limite

Crée une définition de pod qui demande un CPU supérieur à 200m et inférieur à 800m

vim pod-with-cpu-within-range.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-cpu-within-range
spec:
  containers:
  - name: pod-with-cpu-within-range
    image: nginx
    resources:
      limits:
        cpu: "800m"
      requests:
        cpu: "500m"

pod-with-cpu-within-range-definition

Liste les pods existants et crée un nouveau pod avec le fichier créé à l’étape précédente.

kubectl get pods
kubectl create -f pod-with-cpu-within-range.yml
kubectl get pods
kubectl describe pod pod-with-cpu-within-range

create-pod-with-cpu-within-range

Dans la capture d’écran ci-dessus, on peut voir que le pod a été créé avec une demande de CPU et une limite définies.

Pod avec plus de CPU :

Cette fois, créons un pod avec une limite de CPU de 1,5, c’est-à-dire plus de 800m.

vim pod-with-cpu-more-than-limit.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-cpu-more-than-limit
spec:
  containers:
  - name: pod-with-cpu-more-than-limit
    image: nginx
    resources:
      limits:
        cpu: "1.5"
      requests:
        cpu: "500m"

pod-with-cpu-more-than-limit-definition

Obtiens une liste des pods existants et essaie de créer un nouveau pod dont la limite de CPU est de « 1,5 », soit plus que « 800m », ce que nous avons défini dans la plage de limites.

kubectl get pods
kubectl create -f pod-with-cpu-more-than-limit.yml

essayer-de-créer-un-pod-avec-un-cpu-plus-que-limite

Dans la capture d’écran ci-dessus, on peut voir que le pod n’a pas été créé.

Pod avec moins de CPU :

Essayons maintenant de créer un pod qui demande « CPU=100m », soit moins de « 200m », ce que nous avons défini dans la plage de limites.

vim pod-with-cpu-less-than-limit.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-cpu-less-than-limit
spec:
  containers:
  - name: pod-with-cpu-less-than-limit
    image: nginx
    resources:
      limits:
        cpu: "800m"
      requests:
        cpu: "100m"

Récupère maintenant une liste des pods existants et essaie de créer un pod avec le fichier de définition ci-dessus.

kubectl get pods
kubectl create -f pod-with-cpu-less-than-limit.yml

Cette fois aussi, la création du pod échouera car nous avons demandé CPU=100m inférieur à 200m que nous avons défini dans la plage de limites.

Pod sans CPU :

Dans ce scénario, ne définissons aucune demande ou limite pour le CPU.

vim pod-with-no-cpu.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-no-cpu
spec:
  containers:
  - name: pod-with-no-cpu
    image: vish/stress

pod-with-no-cpu-definition

Essayons maintenant de créer un pod et de voir sa description.

kubectl get pods
kubectl create -f pod-with-no-cpu.yml
kubectl describe pods pod-with-no-cpu

create-pod-with-cpu-less-than-limit

Dans la capture d’écran ci-dessus, on peut voir que si nous ne spécifions aucune demande ou limite pour le CPU, le pod se voit attribuer un CPU égal à la limite spécifiée dans la plage de limites, c’est-à-dire que dans cet exemple, le pod a obtenu une limite et une demande de CPU égale à 800m, ce qui est la limite spécifiée dans la plage de limites.

Conclusion

Dans cet article, nous avons vu les étapes pour créer une plage de limites dans l’espace de noms par défaut. Nous avons ensuite essayé différents scénarios pour la limite et la demande de CPU dans le pod.

Vous aimerez aussi...