Skip to content

Commit

Permalink
autoscaling
Browse files Browse the repository at this point in the history
  • Loading branch information
herveleclerc committed Sep 18, 2024
1 parent f62798e commit 4ba5f67
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 13 deletions.
108 changes: 108 additions & 0 deletions cours/containers/kubernetes/autoscaling.fr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Mise en place de l'autoscaling dans Kubernetes

### Introduction


**Qu'est-ce que l'autoscaling?**

L'autoscaling est une technique qui permet d'ajuster automatiquement les ressources informatiques en fonction de la demande.

Dans le contexte de Kubernetes, l'autoscaling permet de :

- Ajouter ou supprimer des Pods (unité de déploiement de Kubernetes) en fonction de l'utilisation des ressources.

- Ajouter ou supprimer des nœuds (machines physiques ou virtuelles) dans le cluster pour répondre aux besoins de capacité.

**Pourquoi est-ce important dans Kubernetes?**

- Optimisation des coûts : Réduire les coûts en ajustant dynamiquement les ressources en fonction de la demande réelle.

- Haute disponibilité : Assurer que les applications restent disponibles et performantes en augmentant les ressources en cas de pics de charge.

- Gestion efficace des ressources : Éviter le sur-provisionnement ou le sous-provisionnement des ressources.


### Horizontal Pod Autoscaler (HPA)

Utilisé pour ajuster dynamiquement le nombre de pods en fonction de l'utilisation des ressources (CPU, mémoire, etc.).


```yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: example-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: example-deployment
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 50

```

En ligne de commande

```bash
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
```

### Cluster Autoscaler

- Ajuste le nombre de nœuds dans le cluster en fonction des besoins des pods.

- Nécessite une intégration avec le fournisseur de cloud (GCP, AWS, Azure, etc.).

Exemple:

Configuration pour GCP.

```yaml

apiVersion: autoscaling.k8s.io/v1
kind: ClusterAutoscaler
metadata:
name: cluster-autoscaler
spec:
scaleDown:
enabled: true
scaleUp:
enabled: true

```

### Vertical Pod Autoscaler (VPA)

VPA n'est pas natif à kubernetes il faut installer un contrôleur

<https://github.com/kubernetes/autoscaler.git>

Ajuste les ressources allouées à un pod en fonction de l'utilisation réelle.

Contrairement à l'Horizontal Pod Autoscaler (HPA), qui ajuste le nombre de pods, le VPA ajuste les ressources des pods existants.

Pourquoi utiliser le VPA ?

- Optimisation des ressources : Ajuste dynamiquement les ressources pour éviter le surprovisionnement et le - sous-provisionnement.
- Simplification de la gestion des ressources : Évite aux administrateurs de devoir ajuster manuellement les ressources allouées aux pods.
- Amélioration des performances : Assure que les pods ont suffisamment de ressources pour fonctionner efficacement, même avec des charges de travail variables.


```yaml
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: example-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: example-deployment
updatePolicy:
updateMode: "Auto"
```
9 changes: 1 addition & 8 deletions cours/containers/kubernetes/k8s-core-api-objects.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -264,14 +264,7 @@ $ kubectl get pods <POD_NAME> -o jsonpath='{.status}' | jq
- Il est lié avec l'object ReplicaSet qui gère le cycle de vie et la mise à l'échelle des pods
- Souvent combiné avec un objet de type **service**

![deployment](images/deployment.png)



### Kubernetes : `Deployment`


![](images/kubernetes/deployment-1.png){height="600px"}
![](images/kubernetes/deployment-1.png){height="400px"}


### Kubernetes : `Deployment`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

### déclaratif vs impératif

![](images/kubernetes/imperative-declarative-k8s.jpg){height="400x"}
![](images/kubernetes/imperative-declarative-k8s.jpg){height="500px"}


### La méthode déclarative
Expand Down
17 changes: 14 additions & 3 deletions cours/containers/kubernetes/k8s-operations.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,11 @@ kubectl set image deployment nginx nginx=nginx:1.15
- Dry run. Afficher les objets de l'API correspondant sans les créer :

```bash
kubectl run nginx --image=nginx --dry-run
kubectl run nginx --image=nginx --dry-run=client
kubectl run nginx --image=nginx --dry-run=server
```

- Démarrer un container en utiliser une commande différente et des arguments différents :
- Démarrer un container en utilisant une commande différente et des arguments différents :

```bash
kubectl run nginx --image=nginx \
Expand Down Expand Up @@ -92,14 +93,24 @@ kubectl attach my-pod -i
kubectl port-forward my-svc 6000
```

- Mettre en place de l'auto-scaling
ex: Mise à l'échelle automatique avec un minimum de 2 et un maximum de 10 réplicas lorsque l'utilisation du processeur est égale ou supérieure à 70 %


```bash
kubectl autoscale deployment my-Deployments --min=2 --max=10 --cpu-percent=70
```


### Kubectl : Logging

- Utiliser `kubectl` pour diagnostiquer les applications et le cluster kubernetes :

```bash
kubectl cluster-info
kubectl get events
kubectl get events --sort-by='.lastTimestamp'
kubectl describe node <NODE_NAME>
kubectl describe node <node-name> | grep Taints
kubectl logs (-f) <POD_NAME>
```

Expand Down
2 changes: 1 addition & 1 deletion cours/containers/kubernetes/k8s-scheduling.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ Ce système permet de gérer très finement les règles de placement des pods en
- Contraintes dépendantes de labels présents dans d'autres pods


![](images/kubernetes/affinities.png){height="550px"}
![](images/kubernetes/affinities.png){height="500px"}



Expand Down
1 change: 1 addition & 0 deletions labs.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"k8s/rbac",
"k8s/rolling_update",
"k8s/network-policy",
"k8s/autoscaling",
"k8s/ingress",
"k8s/monitoring",
"k8s/helm",
Expand Down

0 comments on commit 4ba5f67

Please sign in to comment.