KrustyHack Profile picture
Jan 12 10 tweets 3 min read
Comment survivre à des pics de charge avec son cluster Kubernetes ?

Le brief : tout tourne bien, nos pods sont healthy, reçoivent du traffic, mais tout d'un coup un gros pic de traff sur notre app ! Et là, c'est le drame. 😱

🧵👇
Le HPA (HorizontalPodAutoscaler) réagit bien, il auto-scale notre déploiement en demandant le scheduling de nouveaux pods. Mais là problème... Il n'y a pas assez de noeuds ! #Kubernetes va alors demander de nouveaux noeuds (on part du principe que c'est on-cloud). #k8s #kube
Mais le temps qu'ils arrivent, notre application est au bord de l'explosion, même la p50 latency est au-dessus des 10 secondes, c'est le feu à bord 🔥😱 Les utilisateurs gueulent car tout est pété en prod.
Finalement après 1-3 minutes les noeuds sont là, les nouveaux pods sont schédulés et le traffic commence à être ingéré correctement, la congestion baisse, on retrouve le calme.

Super, mais comment on aurait pu éviter ça ?! 😭
Une des solutions que j'ai mis en place chez @Voggt_fr c'est l'utilisation de pods placeholder. Ce sont des pods avec une empreinte ultra légère (busybox, no root, sleep infinity, ...) déployé en permanence sur le cluster et avec une PriorityClass très faible.
Dans le cas d'un pic de traff, quand le HPA demande de nouveaux pods, le pod placeholder va être evicted et les nouveaux pods de mon app vont prendre sa place. Ce placeholder va ensuite être reschedule et trigger un nouveau noeud, où il va attendre d'être evicted au besoin.
L'idée est simple mais peut être coûteuse, surtout si vous utilisez des VMs plein tarif. Toutefois elle permet d'overprovisionner très simplement un ou plusieurs noeuds Kubernetes toujours prêts à recevoir rapidement de nouveaux pods en cas de besoin !
Je vous met un exemple de pod placeholder en image. Un pod avec une empreinte ultra light et qui request/limit CPU et/ou RAM et avec une PriorityClass très faible (0 chez nous). Comme ça plus besoin d'attendre des noeuds, il se fait evict et les pods prennent sa place.
Le code d'exemple d'un pod placeholder : gist.github.com/KrustyHack/a0b…
Notez bien que la PriorityClass du placeholder doit être très faible (chez nous on a mis 0).
J'espère que ce thread t'a été utile ! N'hésites pas à partager, merci. 🖖

blackcreeper.com

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with KrustyHack

KrustyHack Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(