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

➡️ Enix Live Show le 14/12/2023

Requests & Limits

Quel sizing alors ? Trop ? Trop peu ?

Requests & Limits

center

Requests & Limits

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

Goldilocks

Démo !

center

Goldilocks + VPA + Grafana = 💔

center

Mes stratégies

Requests, Limits ?

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

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

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*"