Skip to main content

7_Scalabilite

La scalabilité

C'est la capacité de s'adapter à un changement d'ordre de grandeur, que ce soit de manière verticale ou horizontale.

Scalabilité verticale

Elle consiste à améliorer la capacité des ressources existantes au sein d'une seule machine (workstation, server, VPS, etc.). Par exemple, on peut ajouter de la RAM, un SSD ou un HDD supplémentaires, ou encore améliorer le processeur pour augmenter les ressources de calcul.

Scalabilité horizontale

Elle consiste à ajouter de nouvelles machines à l'infrastructure existante. Par exemple, on peut ajouter un node ou même un serveur supplémentaire.

Mise à l'échelle Horizontale

Nous ajoutons des nodes, des pods, des machines virtuelles (VM) ou des containers à notre infrastructure existante.

Mise à l'échelle verticale

Nous ajoutons ou améliorons le matériel de l'hôte, c'est-à-dire plus de RAM, de SSD, de HDD, etc. On augmente les ressources de calcul.

Pour Kubernetes, il existe deux manières de procéder :

  • Mode scale manuel : Nous définissons le nombre de replicasets ou de replication controllers manuellement.
  • Autoscale : Comme son nom l'indique, cette méthode gère automatiquement la scalabilité.

Pour commencer, j'ai tout supprimé pour n'avoir qu'un pod simple :

kubernetes-6

Toutes les commandes se trouvent dans chacune de mes documentations (j'ai fait des copier-coller), mais pour le scale, il me faut le service. Le pod nginx est de manière impérative et le deployment-XXXXXXXXXX-XXXXX est de manière déclarative.

Mode impératif

Ici, nous allons scaler à trois instances.

kubectl scale deployment "nomdudeployment" replicas=3

Alors oui, effectivement, je n'ai pas bien géré, car mon déploiement s'appelle "deployment". Mais on peut voir que cela fonctionne.

kubernetes-7

Mode déclaratif

Mais on peut aussi le faire via le manifeste :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-nginx # Il est courant d'utiliser des noms en minuscules
spec:
  replicas: 3
  selector:
    matchLabels: # Utilisation du pluriel 'matchLabels'
      app: nginx_lab
  template: # Correction de l'orthographe de 'template'
    metadata:
      labels: # Utilisation du pluriel 'labels'
        app: nginx_lab
    spec:
      containers:
        - image: nginx:latest # Utilisation d'une image Docker standard pour nginx
          name: container-nginx

On déclare bien dans notre replicas que nous en voulons 3. Il ne reste plus qu'à appliquer (apply).

kubectl apply -f nginx.yaml

Nos pods ont bien été créés :

kubernetes-8
kubernetes-9
kubernetes-10
kubernetes-11