Devoxxfr 2024

Build & Deploy

Dimensionnez correctement vos déploiements Kubernetes

RÉMI VERCHÈRE
ACCENTURE

Devoxxfr 2024

Répondre à la question ⤵️

Quelles Requests & Limits définir sur vos applications conteneurisées ?

Agenda

  • Rappel Requests & Limits dans Kubernetes
  • Présentation de 2 outils (+ démo) pour vous aider à les définir
  • Stratégies de mise à l'échelle : focus sur Vertical Pod Autoscaler
  • Q/A si on a du temps
Crédits : beaucoup d’images de chez Sysdig, Datadog & Robusta qui expliquent bien les choses.
Devoxxfr 2024

Qui suis-je ?

👋 Rémi Verchère

💻 Cloud Native Infrastructure Consultant

👷 Ops qui aide les Devs à mettre en prod

🫶 Open Source & CNCF landscape

👨‍🍼 Papa x 👦👦👧👧

🌐 @rverchere

Devoxxfr 2024

Rappel Requests & Limits

Devoxxfr 2024

Requests & Limits

Requests

Ressources nécessaires pour placer un conteneur sur un noeud.

Limits

Ressources maximum qu'un conteneur peut utiliser sur un noeud.

Sur Memory & CPU (📺)

Devoxxfr 2024

Requests & Limits

Qualité de Service

  • Ni Requests, ni Limits : Best Effort
  • Requests < Limits : Burstable
  • Requests = Limits : Guaranteed

PDB, Evictions, Priority Classes

  • Ce n'est pas le sujet aujourd'hui...
Devoxxfr 2024
Devoxxfr 2024

Requests & Limits

Quel sizing alors ? Trop ? Trop peu ?

Devoxxfr 2024

Requests & Limits

center

Devoxxfr 2024

Requests & Limits

center

Devoxxfr 2024

Requests & Limits

center

Devoxxfr 2024

Requests & Limits

Ça n'arrive pas qu'aux autres...

center

💡 Requests trop hautes, scheduler ne peut placer les pods, alors que le cluster est "large".
Devoxxfr 2024

Aide au dimensionnement

Devoxxfr 2024

Aide au dimensionnement

Plusieurs méthodes

  1. Au doigt mouillé itératif ☝️
  2. Spécial devs Java ⤴️ 🧌
  3. Grâce aux métriques 🔍 !
Devoxxfr 2024

Aide au dimensionnement

Plusieurs méthodes

  1. Au doigt mouillé itératif ☝️
  2. Spécial devs Java ⤴️ 🧌
  3. Grâce aux métriques 🔍 !

Outils pour vous faciliter la vie

  1. KRR
  2. Goldilocks
Devoxxfr 2024

Krr

center

Devoxxfr 2024

Krr

Démo !

center

(🙏 OVHCloud)

Devoxxfr 2024

Goldilocks

  • From Fairwinds : https://goldilocks.docs.fairwinds.com/
  • "Get your resource requests 'Just Right'"
  • Automatise les "Vertical Pod Autoscalers" en mode recommendation (⁉️)
  • Interface Web pour analyse des recommendations VPA

center

Devoxxfr 2024

Vertical Pod Autoscaler

Devoxxfr 2024

VPA

  • Adaptation automatique des Requests & Limits du pod

center

Devoxxfr 2024

VPA

  • 3 composants
    • Recommender
    • Updater
    • Admission Controller
  • Plusieurs modes
    • Recreate
    • Initial
    • Off
Devoxxfr 2024

VPA

Remarques

Devoxxfr 2024

VPA

Exemple

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: devoxxfr-app
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: devoxxfr-app
  updatePolicy:
    updateMode: "Off"
status:
  recommendation:
    containerRecommendations:
    - [...]
Devoxxfr 2024

Autres types d'Autoscalers

1) Horizontal Pod Austocaler

2) Cluster Autoscaler

3) Multi-dimensional Pod Autoscaling

  • AEP-5342 (Autoscaler Enhancement Proposal) Multi-dimensional Pod Autoscaler
Devoxxfr 2024

Goldilocks

Démo !

center

(🙏 OVHCloud)

Devoxxfr 2024

Goldilocks

C'est moche hein ?

center

Devoxxfr 2024

Goldilocks

On peut faire "moins moche..."

  • Parlons Kube-State-Metrics, mieux : CustomResourceStateMetrics !!
# kubectl get vpa goldilocks-example -o yaml
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
[...]
status:
  recommendation:
    containerRecommendations:
    - target:
        cpu: 15m
        memory: "1238659775"
Devoxxfr 2024

Goldilocks + VPA + Grafana = ❤️

center

Devoxxfr 2024

Mes stratégies

Mes Outils

  • Goldilocks + VPA
  • Prometheus + Grafana + CustomResourceStateMetrics

Requests, Limits ?

  • CPU Requests, No Limits
  • RAM Requests = Limits
  • ➡️ Ce dont l'application à besoin
Devoxxfr 2024

Nouveautés depuis K8S 1.27

Devoxxfr 2024

Ressources

Blog posts

Devoxxfr 2024

Merci

Rémi Verchère
Accenture

Lorsqu'on doit déployer une application sur un cluster Kubernetes, une bonne pratique est de définir des ressources "requests" et "limits" pour garantir le bon fonctionnement de celle-ci tout en garantissant la bonne santé du cluster qui l'accueille. OK, mais quelles valeurs de "requests" et "limits" doit-on spécifier ? Pas assez de RAM et l'application sera "OOMKilled" ? Trop de CPU mais cela bloquera les autres déploiements ? Après un tour d'horizon des différentes options pour paramétrer ces ressources, je vous présenterai un outil simple mais efficace pour vous aider à définir des valeurs pragmatiques : Goldilocks et l'utilisation automatique des Vertical Pod Autoscaler.

The Miserable Life of a CPU Instruction - Samuel Ortiz https://www.youtube.com/watch?v=j6-yGGBTXGU

1. Standards : Prometheus, VictoriaMetrics, Datadog, etc. 2. Plus "avancées" : VPA

1. Standards : Prometheus, VictoriaMetrics, Datadog, etc. 2. Plus "avancées" : VPA

HPA: De plus en plus utilisé (+55% des entreprises, rapport Sysdig)

Coucou Karpenter !

- Requests trop basses & HPA