Dimensionnez correctement vos déploiements Kubernetes

Rémi Verchère @ Accenture

Répondre à la question ⤵️

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

Agenda

  • (R)appel 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.

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

(R)appel Requests & Limits

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 (📺)

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...

Requests & Limits

Quel sizing alors ? Trop ? Trop peu ?

Requests & Limits

center

Requests & Limits

center

Requests & Limits

center

Requests & Limits

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

center

Aide au dimensionnement

Aide au dimensionnement

Plusieurs méthodes

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

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

Krr

center

Krr

Démo !

center

Goldilocks

center

VPA - Vertical Pod Autoscaler

VPA

  • Adaptation automatique des Requests & Limits du pod

center

VPA

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

VPA

Remarques

  • Pas par défaut, à installer
  • Besoin de créer une ressource de type “VerticalPodAutoscaler”
  • ⛔ A ne pas utiliser avec HPA
  • Restart du conteneur ★
  • Fournit des métriques : via le 'status' de la resource VPA
  • Calcul : 👀 vertical-pod-autoscaler.md#recommendation-model 🤯
    • Requests : CPU 90% Percentile par défaut, RAM OOMKilled
    • Limits : Ratio Requests Initiaux

VPA

Exemple

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

Autres types d'Autoscalers

1) Horizontal Pod Austocaler

center

2) Cluster Autoscaler

3) Multi-dimensional Pod Autoscaling

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

Autres types d'Autoscalers

Un mot sur les HPA

  • De plus en plus utilisés

  • Déclenchement:

    • Par défaut sur CPU/RAM
      (metrics-server)
    • Autres métriques via Prometheus
      (net latency)
  • Temps de réaction ? Serverless / Event Driven

    • Voir “Keda”, “Knative”, …
  • 🤔, mais sur quoi se déclenchent les HPAs ?

Goldilocks

Démo !

center

Goldilocks

C'est moche hein ?

center

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"
  • Pour en savoir plus, venez jeudi au meetup "DevOps Aix-Marseille" !

Goldilocks + VPA + Grafana = ❤️

center

Mes stratégies

Mes Outils

  • Goldilocks + VPA
  • Prometheus + Grafana + CustomResourceStateMetrics

Requests, Limits ?

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

Ressources

Blog posts

Nouveautés depuis K8S 1.27

  • In-place Resource Resize for Kubernetes Pods (alpha)
    "In Kubernetes v1.27, we have added a new alpha feature that allows users to resize CPU/memory resources allocated to pods without restarting the containers"

  • HorizontalPodAutoscaler ContainerResource type metric moves to beta
    "Kubernetes 1.20 introduced the ContainerResource type metric in HorizontalPodAutoscaler (HPA). In Kubernetes 1.27, this feature moves to beta and the corresponding feature gate (HPAContainerMetrics) gets enabled by default."

  • Quality-of-Service for Memory Resources (alpha)

Merci !

Rémi Verchère @ Accenture

Kubetrain

Kubetrain

KubeTrain.io vise à permettre aux participants de la prochaine Cloud Native Computing Foundation (CNCF) #kubecon EU 2024 à paris de partager le voyage en train au départ de différentes villes d'Europe.

Plus d'infos sur le site kubetrain.io

Kubetrain - Objectif

L'objectif ? pouvoir réserver un wagon qui permettra à tous les participants venant d'Aix-en-Provence ou de Marseille de faire le déplacement à Paris ensembles.

Cela nous permet de :

  • réduire notre impact sur l'environnement
  • obtenir des tarifs préférentiels
  • échanger pendant le trajet (si vous en avez envie)
  • joindre l'utile à l'agréable

Les billets sont disponibles sur https://kutt.it/kubetrain
Page kubetrain : https://kubetrain.io/departures/aix-marseille/
Référent local : Frédéric Léger / webofmars

Kubetrain - Sponsoring 1/2

Le projet est en recherche de sponsoring afin de réduire les coûts de transport et pouvoir organiser un événement sur place (mais chut ! 🤐)

Quels avantages à être sponsor ?

  • 2 tickets de train à utiliser comme vous voulez (tech ou marketing)
  • Visibilité pour votre marque
  • Reconnaissance de toute la communauté tech Aix-Marseille
  • Probablement une tonne de points de karma 😀

Kubetrain - Sponsoring 2/2

Mais aussi

  • Faire le voyage avec des développeurs, des ops, des devops, des tech de la région
  • Le nom et logo de votre société sur le coupon d'échange
  • Diffuser les messages de votre choix durant le trajet
  • Distribution de vos goodies si vous le souhaitez
  • Votre logo sur différentes pages du site kubetrain.io

Encore 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

- Requests trop basses & HPA

"*Support for Memory QoS was initially added in Kubernetes v1.22, and later some limitations around the formula for calculating memory.high were identified. These limitations are addressed in Kubernetes v1.27*"