diff --git a/cours/containers/kubernetes/autoscaling.fr.md b/cours/containers/kubernetes/autoscaling.fr.md new file mode 100644 index 0000000..65f3ede --- /dev/null +++ b/cours/containers/kubernetes/autoscaling.fr.md @@ -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 + + + +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" +``` + + diff --git a/cours/containers/kubernetes/k8s-core-api-objects.fr.md b/cours/containers/kubernetes/k8s-core-api-objects.fr.md index f035da5..0599064 100644 --- a/cours/containers/kubernetes/k8s-core-api-objects.fr.md +++ b/cours/containers/kubernetes/k8s-core-api-objects.fr.md @@ -264,14 +264,7 @@ $ kubectl get pods -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` diff --git a/cours/containers/kubernetes/k8s-imperative-declarative-commands.fr.md b/cours/containers/kubernetes/k8s-imperative-declarative-commands.fr.md index bfc8c57..9723063 100644 --- a/cours/containers/kubernetes/k8s-imperative-declarative-commands.fr.md +++ b/cours/containers/kubernetes/k8s-imperative-declarative-commands.fr.md @@ -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 diff --git a/cours/containers/kubernetes/k8s-operations.fr.md b/cours/containers/kubernetes/k8s-operations.fr.md index 12a0543..0dcc987 100644 --- a/cours/containers/kubernetes/k8s-operations.fr.md +++ b/cours/containers/kubernetes/k8s-operations.fr.md @@ -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 \ @@ -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 +kubectl describe node | grep Taints kubectl logs (-f) ``` diff --git a/cours/containers/kubernetes/k8s-scheduling.fr.md b/cours/containers/kubernetes/k8s-scheduling.fr.md index 1a90d98..9e86394 100644 --- a/cours/containers/kubernetes/k8s-scheduling.fr.md +++ b/cours/containers/kubernetes/k8s-scheduling.fr.md @@ -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"} diff --git a/labs.json b/labs.json index 3d59194..b06f6e9 100644 --- a/labs.json +++ b/labs.json @@ -15,6 +15,7 @@ "k8s/rbac", "k8s/rolling_update", "k8s/network-policy", + "k8s/autoscaling", "k8s/ingress", "k8s/monitoring", "k8s/helm",