ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

27 апрСля Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Π‘Ρ‚Π°Ρ‡ΠΊΠ°-2019, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… сСкции Β«DevOpsΒ», ΠΏΡ€ΠΎΠ·Π²ΡƒΡ‡Π°Π» Π΄ΠΎΠΊΠ»Π°Π΄ Β«ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² KubernetesΒ». Π’ Π½Ρ‘ΠΌ рассказываСтся ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ K8s ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

По Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ Ρ€Π°Π΄Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ с Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ (44 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Π΅Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ) ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Ρ‹ΠΆΠΈΠΌΠΊΡƒ Π² тСкстовом Π²ΠΈΠ΄Π΅. ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ!

Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Ρ‚Π΅ΠΌΡƒ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΏΠΎ словам ΠΈ Π½Π°Ρ‡Π½Ρ‘ΠΌ с ΠΊΠΎΠ½Ρ†Π°.

Kubernetes

ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π½Π° хостС Π΅ΡΡ‚ΡŒ Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. Π—Π°Ρ‡Π΅ΠΌ? Для обСспСчСния повторяСмости ΠΈ изоляции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ просто ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΉ, CI/CD. Π’Π°ΠΊΠΈΡ… машин с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Ρƒ нас ΠΌΠ½ΠΎΠ³ΠΎ.

Π§Ρ‚ΠΎ Π² этом случаС Π΄Π°Ρ‘Ρ‚ Kubernetes?

  1. ΠœΡ‹ пСрСстаём Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎ эти ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Β«ΠΎΠ±Π»Π°ΠΊΠΎΠΌΒ», кластСром ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ pod’ΠΎΠ² (Π³Ρ€ΡƒΠΏΠΏ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²).
  2. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ Π½Π΅ Π΄ΡƒΠΌΠ°Π΅ΠΌ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ pod’Ρ‹, Π° управляСм Π΅Ρ‰Ρ‘ большими Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ. Π’Π°ΠΊΠΈΠ΅ высокоуровнСвыС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ шаблон для запуска Π½Π΅ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π° Π²ΠΎΡ‚ Π½ΡƒΠΆΠ½ΠΎΠ΅ количСство экзСмпляров для Π΅Ρ‘ запуска. Если ΠΌΡ‹ впослСдствии помСняСм шаблон β€” ΠΏΠΎΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈ всС экзСмпляры.
  3. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ API ΠΌΡ‹ вмСсто выполнСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ описываСм «устройство ΠΌΠΈΡ€Π°Β» (Π² YAML), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаётся Kubernetes’ΠΎΠΌ. И снова: ΠΏΡ€ΠΈ измСнСниях описания Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами

CPU

ΠŸΡƒΡΡ‚ΡŒ ΠΌΡ‹ запускаСм Π½Π° сСрвСрС nginx, php-fpm ΠΈ mysql. Π£ этих слуТб Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Ρ‰Ρ‘ большС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… процСссов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов:

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)
(числа Π½Π° слайдС β€” Β«ΠΏΠΎΠΏΡƒΠ³Π°ΠΈΒ», абстрактная ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса Π² Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… мощностях)

Π§Ρ‚ΠΎΠ±Ρ‹ с этим ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ процСссы ΠΏΠΎ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, всС процСссы nginx Π² ΠΎΠ΄Π½Ρƒ Π³Ρ€ΡƒΠΏΠΏΡƒ Β«nginxΒ»). ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΈ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это β€” ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€:

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (Π² Linux). Π˜Ρ… появлСниС стало Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ благодаря Ρ‚Ρ€Ρ‘ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ возмоТностям Π² ядрС, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΡƒΠΆΠ΅ достаточно Π΄Π°Π²Π½ΠΎ: capabilities, namespaces ΠΈ cgroups. А Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌΡƒ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ способствовали Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Β«ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈΒ» Ρ‚ΠΈΠΏΠ° Docker):

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π’ контСкстС Π΄ΠΎΠΊΠ»Π°Π΄Π° нас интСрСсуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ cgroups, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ β€” Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (Docker’Π° ΠΈ Ρ‚.ΠΏ.), Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹Π΅ Π² Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ‚ΠΎΠ³ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ, β€” это ΠΈ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹.

ВСрнёмся ΠΊ потрСбностям Π² CPU Ρƒ этих процСссов, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ β€” Ρƒ Π³Ρ€ΡƒΠΏΠΏ процСссов:

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)
(ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡŽΡΡŒ, Ρ‡Ρ‚ΠΎ всС числа β€” абстрактноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ потрСбности Π² рСсурсах)

ΠŸΡ€ΠΈ этом Ρƒ самого CPU Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ рСсурс (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это 1000), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ всСм ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Ρ‚ΡŒ (сумма потрСбностСй всСх Π³Ρ€ΡƒΠΏΠΏ β€” 150+850+460=1460). Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС?

Π―Π΄Ρ€ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Π°Π²Π°Ρ‚ΡŒ рСсурсы ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ это «чСстно», выдавая ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ количСство рСсурсов ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅. Но Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΈΡ… большС Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ (333>150), поэтому излишСк (333-150=183) остаётся Π² Ρ€Π΅Π·Π΅Ρ€Π²Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π²Π½ΠΎ распрСдСляСтся ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ:

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π’ ΠΈΡ‚ΠΎΠ³Π΅: ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ рСсурсов, Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ β€” сильно Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ β€” Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ. Π’Π°ΠΊΠΎΠ² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ дСйствий «чСстного» ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π² Linux β€” CFS. Π•Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ назначСния вСса ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². НапримСр, Ρ‚Π°ΠΊ:

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° случай Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ рСсурсов Ρƒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (php-fpm). ВсС рСсурсы ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами ΠΏΠΎΡ€ΠΎΠ²Π½Ρƒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, master-процСсс Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π° всС worker’Ρ‹ тормозят, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ ΠΎΡ‚ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ:

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π’Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ CFS. ВСса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ, Π² дальнСйшСм Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Π²Π°Ρ‚ΡŒ request’Π°ΠΌΠΈ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ β€” см. дальшС.

ВзглянСм Π½Π° всю ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны. Как извСстно, всС Π΄ΠΎΡ€ΠΎΠ³ΠΈ Π²Π΅Π΄ΡƒΡ‚ Π² Π ΠΈΠΌ, Π° Π² случаС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° β€” Π² CPU. CPU ΠΎΠ΄ΠΈΠ½, Π·Π°Π΄Π°Ρ‡ ΠΌΠ½ΠΎΠ³ΠΎ β€” Π½ΡƒΠΆΠ΅Π½ свСтофор. Π‘Π°ΠΌΡ‹ΠΉ простой способ управлСния рСсурсами β€” «свСтофорный»: Π²Ρ‹Π΄Π°Π»ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡƒ процСссу фиксированноС врСмя доступа ΠΊ CPU, Π·Π°Ρ‚Π΅ΠΌ β€” ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΈ Ρ‚.ΠΏ.

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ называСтся Тёстким ΠΊΠ²ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (hard limiting). Π—Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ Π΅Π³ΠΎ просто ΠΊΠ°ΠΊ Π»ΠΈΠΌΠΈΡ‚Ρ‹. Однако, Ссли Ρ€Π°Π·Π΄Π°Ρ‚ΡŒ всСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Π»ΠΈΠΌΠΈΡ‚Ρ‹, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: mysql Π΅Ρ…Π°Π» ΠΏΠΎ Π΄ΠΎΡ€ΠΎΠ³Π΅ ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² CPU Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ, Π½ΠΎ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ процСссы Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° CPU простаиваСт.

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

ВСрнёмся ΠΊ ядру Linux ΠΈ Π΅Π³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ с CPU β€” общая ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° получаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ:

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π£ cgroup Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ настройки β€” ΠΏΠΎ сути это Π΄Π²Π΅ простыС Β«ΠΊΡ€ΡƒΡ‚ΠΈΠ»ΠΊΠΈΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ:

  1. вСс для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (request’Ρ‹) β€” это shares;
  2. ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ CPU для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (Π»ΠΈΠΌΠΈΡ‚Ρ‹) β€” это quota.

Π’ Ρ‡Ρ‘ΠΌ ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ CPU?

Π•ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ:

  1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠΏΡƒΠ³Π°ΠΈ, Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ β€” Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π΄ΠΎΠ³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ.
  2. ΠŸΡ€ΠΎΡ†Π΅Π½Ρ‚Ρ‹ понятнСС, Π½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹: 50% ΠΎΡ‚ сСрвСра с 4 ядрами ΠΈ с 20 ядрами Β­β€” ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ.
  3. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ упомянутыС вСса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π½Π°Π΅Ρ‚ Linux, Π½ΠΎ ΠΎΠ½ΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹.
  4. Π‘Π°ΠΌΡ‹ΠΉ Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы Π² сСкундах. Π’.Π΅. Π² сСкундах процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ сСкундам Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ: Π²Ρ‹Π΄Π°Π»ΠΈ 1 сСкунду процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² 1 Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ сСкунду β€” это ΠΎΠ΄Π½ΠΎ ядро CPU Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.

Π§Ρ‚ΠΎΠ±Ρ‹ стало Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΡ‰Π΅, ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ стали прямо Π² ядрах, подразумСвая ΠΏΠΎΠ΄ Π½ΠΈΠΌΠΈ Ρ‚ΠΎ самоС врСмя CPU ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Linux ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ вСса, Π° Π½Π΅ Ρ‚Π°ΠΊΠΎΠ΅ процСссорноС врСмя/ядра, понадобился ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с сСрвСром с 3 ядрами CPU, Π³Π΄Π΅ Ρ‚Ρ€Ρ‘ΠΌ pod’Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ вСса (500, 1000 ΠΈ 1500), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»Π΅Π³ΠΊΠΎ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ части Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌ ядСр (0,5, 1 ΠΈ 1,5).

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Если Π²Π·ΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ сСрвСр, Π³Π΄Π΅ ядСр Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΄Π²ΠΎΠ΅ большС (6), ΠΈ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π°ΠΌ Ρ‚Π΅ ΠΆΠ΅ pod’Ρ‹, распрСдСлСниС ядСр Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ простым ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° 2 (1, 2 ΠΈ 3 соотвСтствСнно). Но Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ происходит Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½Π° этом сСрвСрС появится Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ pod, вСс Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡƒΡΡ‚ΡŒ для удобства Π±ΡƒΠ΄Π΅Ρ‚ 3000. Он Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ сСбС Ρ‡Π°ΡΡ‚ΡŒ рСсурсов CPU (ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ ядСр), Π° Ρƒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… pod’ΠΎΠ² ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ (ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡΡ Π²Π΄Π²ΠΎΠ΅):

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Kubernetes ΠΈ рСсурсы CPU

Π’ Kubernetes рСсурсы CPU принято ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ Π² миллиядрах, Ρ‚.Π΅. Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ вСса бСрётся 0,001 ядра. (Π’ΠΎ ΠΆΠ΅ самоС Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Linux/cgroups Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ CPU share, хотя, Ссли Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½Π΅Π΅, Ρ‚ΠΎ 1000 миллиядСр = 1024 CPU shares.) K8s слСдит Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π½Π° сСрвСрС большС pod’ΠΎΠ², Ρ‡Π΅ΠΌ Π΅ΡΡ‚ΡŒ рСсурсов CPU для суммы вСсов всСх pod’ΠΎΠ².

Как это происходит? ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ сСрвСра Π² кластСр Kubernetes сообщаСтся, сколько Ρƒ Π½Π΅Π³ΠΎ доступно ядСр CPU. А ΠΏΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ pod’Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Kubernetes Π·Π½Π°Π΅Ρ‚, сколько ядСр потрСбуСтся этому pod’Ρƒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, pod Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ Π½Π° сСрвСр, Π³Π΄Π΅ ядСр достаточно.

Π§Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ request (Ρ‚.Π΅. Ρƒ pod’Π° Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ количСство Π½ΡƒΠΆΠ½Ρ‹Ρ… Π΅ΠΌΡƒ ядСр)? Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся, ΠΊΠ°ΠΊ Kubernetes Π²ΠΎΠΎΠ±Ρ‰Π΅ считаСт рСсурсы.

Π£ pod’Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈ request’Ρ‹ (ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ CFS), ΠΈ Π»ΠΈΠΌΠΈΡ‚Ρ‹ (ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ свСтофор?):

  • Если ΠΎΠ½ΠΈ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Ρ€Π°Π²Π½Ρ‹Π΅, Ρ‚ΠΎ pod’Ρƒ назначаСтся QoS-класс guaranteed. Π’Π°ΠΊΠΎΠ΅ количСство всСгда доступных для Π½Π΅Π³ΠΎ ядСр гарантируСтся.
  • Если request мСньшС Π»ΠΈΠΌΠΈΡ‚Π° β€” QoS-класс burstable. Π’.Π΅. ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ pod, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 1 ядро, ΠΎΠ΄Π½Π°ΠΊΠΎ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ являСтся для Π½Π΅Π³ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ: ΠΈΠ½ΠΎΠ³Π΄Π° pod ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ большС (ΠΊΠΎΠ³Π΄Π° Π½Π° сСрвСрС Π΅ΡΡ‚ΡŒ свободныС рСсурсы для этого).
  • Π•ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ QoS-класс best effort β€” ΠΊ Π½Π΅ΠΌΡƒ относятся Ρ‚Π΅ самыС pod’Ρ‹, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ request. РСсурсы ΠΈΠΌ Π²Ρ‹Π΄Π°ΡŽΡ‚ΡΡ Π² послСднюю ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

ΠŸΠ°ΠΌΡΡ‚ΡŒ

Π‘ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ситуация подобная, Π½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ иная β€” всё-Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° Ρƒ этих рСсурсов разная. Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΆΠ΅ аналогия Ρ‚Π°ΠΊΠΎΠ²Π°:

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ Π² памяти Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ request’Ρ‹. ΠŸΡƒΡΡ‚ΡŒ pod’Ρ‹ ΠΆΠΈΠ²ΡƒΡ‚ Π½Π° сСрвСрС, измСняя ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΠΎΠΊΠ° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ станСт Ρ‚Π°ΠΊΠΈΠΌ большим, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ закончится. Π’ этом случаС появляСтся OOM killer ΠΈ ΡƒΠ±ΠΈΠ²Π°Π΅Ρ‚ самый большой процСсс:

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Нас это Π½Π΅ всСгда устраиваСт, поэтому Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ процСссы для нас Π²Π°ΠΆΠ½Ρ‹ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±ΠΈΠ²Π°Ρ‚ΡŒΡΡ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ oom_score_adj.

ВСрнёмся ΠΊ QoS-классам CPU ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘ΠΌ аналогию со значСниями oom_score_adj, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΌΠΈ для pod’ΠΎΠ² ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ ΠΏΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΡŽ памяти:

  • Π‘Π°ΠΌΠΎΠ΅ Π½ΠΈΠ·ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ oom_score_adj Ρƒ pod’Π° β€” -998 β€” ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ pod Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠ±ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² ΡΠ°ΠΌΡƒΡŽ послСднюю ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, это guaranteed.
  • Π‘Π°ΠΌΠΎΠ΅ высокоС β€” 1000 β€” это best effort, Ρ‚Π°ΠΊΠΈΠ΅ pod’Ρ‹ ΡƒΠ±ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π½ΡŒΡˆΠ΅ всСх.
  • Для расчёта ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (burstable) Π΅ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°, ΡΡƒΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ сводится ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ большС pod запросил рСсурсов, Ρ‚Π΅ΠΌ мСньшС шансов, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΡƒΠ±ΡŒΡŽΡ‚.

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Вторая Β«ΠΊΡ€ΡƒΡ‚ΠΈΠ»ΠΊΠ°Β» β€” limit_in_bytes β€” для Π»ΠΈΠΌΠΈΡ‚ΠΎΠ². Π‘ Π½Π΅ΠΉ всё ΠΏΡ€ΠΎΡ‰Π΅: ΠΌΡ‹ просто Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ максимальноС количСство Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ памяти, ΠΈ здСсь (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ CPU) Π½Π΅Ρ‚ вопроса, Π² Ρ‡Ρ‘ΠΌ Π΅Ρ‘ (ΠΏΠ°ΠΌΡΡ‚ΡŒ) ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ.

Π˜Ρ‚ΠΎΠ³ΠΎ

ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ pod’Ρƒ Π² Kubernetes Π·Π°Π΄Π°ΡŽΡ‚ΡΡ requests ΠΈ limits β€” ΠΎΠ±Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° для CPU ΠΈ для памяти:

  1. Π½Π° основании requests Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Kubernetes, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ распрСдСляСт pod’Ρ‹ ΠΏΠΎ сСрвСрам;
  2. Π½Π° основании всСх ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² опрСдСляСтся QoS-класс pod’Π°;
  3. Π½Π° основании CPU requests Ρ€Π°ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ вСса;
  4. Π½Π° основании CPU requests настраиваСтся CFS-ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ;
  5. Π½Π° основании memory requests настраиваСтся OOM killer;
  6. Π½Π° основании CPU limits настраиваСтся «свСтофор»;
  7. Π½Π° основании memory limits настраиваСтся Π»ΠΈΠΌΠΈΡ‚ Π½Π° cgroup’Ρƒ.

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π’ Ρ†Π΅Π»ΠΎΠΌ эта ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° всС вопросы, ΠΊΠ°ΠΊ происходит основная Ρ‡Π°ΡΡ‚ΡŒ управлСния рСсурсами Π² Kubernetes.

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

K8s cluster-autoscaler

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ сСбС, Ρ‡Ρ‚ΠΎ вСсь кластСр ΡƒΠΆΠ΅ занят ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ создан Π½ΠΎΠ²Ρ‹ΠΉ pod. Пока pod Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ, ΠΎΠ½ висит Π² статусС Pending. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ всё-Ρ‚Π°ΠΊΠΈ появился, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ сСрвСр ΠΊ кластСру ΠΈΠ»ΠΈ ТС… ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ cluster-autoscaler, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдСлаСт это Π·Π° нас: Π·Π°ΠΊΠ°ΠΆΠ΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Ρƒ ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° (запросом ΠΏΠΎ API) ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ Π΅Ρ‘ ΠΊ кластСру, послС Ρ‡Π΅Π³ΠΎ pod Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½.

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ кластСра Kubernetes, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ (ΠΏΠΎ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Однако, ΠΊΠ°ΠΊ ΠΈ Π²Π΅Π·Π΄Π΅, здСсь Π½Π΅ Π±Π΅Π· Π½ΡŽΠ°Π½ΡΠΎΠ²β€¦

Пока ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ кластСра, всё Π±Ρ‹Π»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° кластСр стал ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ? ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΈΠ³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ pod’Ρ‹ (для освобоТдСния хостов) ΠΎΡ‡Π΅Π½ΡŒ тСхничСски слоТно ΠΈ Π΄ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎ рСсурсам. Π’ Kubernetes Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ совсСм Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

Рассмотрим кластСр ΠΈΠ· 3 сСрвСров, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ Deployment. Π£ Π½Π΅Π³ΠΎ 6 pod’ΠΎΠ²: сСйчас это ΠΏΠΎ 2 Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСрвСр. ΠœΡ‹ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· сСрвСров. Для этого Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ kubectl drain, которая:

  • Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ pod’Ρ‹ Π½Π° этот сСрвСр;
  • ΡƒΠ΄Π°Π»ΠΈΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ pod’Ρ‹ Π½Π° сСрвСрС.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Kubernetes слСдит Π·Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ΠΌ числа pod’ΠΎΠ² (6), ΠΎΠ½ просто пСрСсоздаст ΠΈΡ… Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»Π°Ρ…, Π½ΠΎ Π½Π΅ Π½Π° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΡƒΠΆΠ΅ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ нСдоступный для размСщСния Π½ΠΎΠ²Ρ‹Ρ… pod’ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰Π°Ρ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ° для Kubernetes.

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Однако ΠΈ здСсь Π΅ΡΡ‚ΡŒ нюанс. Π’ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ ситуации для StatefulSet (вмСсто Deployment) дСйствия Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½Ρ‹ΠΌΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас ΡƒΠΆΠ΅ stateful-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Ρ€ΠΈ pod’Π° с MongoDB, Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° какая-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° (Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΠ»ΠΈΡΡŒ ΠΈΠ»ΠΈ иная ошибка, Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ pod’Ρƒ). И ΠΌΡ‹ снова Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ сСрвСр. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚?

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

MongoDB ΠΌΠΎΠ³ Π±Ρ‹ ΡƒΠΌΠ΅Ρ€Π΅Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊΠ²ΠΎΡ€ΡƒΠΌ: для кластСра ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… инсталляций хотя Π±Ρ‹ Π΄Π²Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Однако этого Π½Π΅ происходит β€” благодаря PodDisruptionBudget. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ минимально Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… pod’ΠΎΠ². Зная, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· pod’ΠΎΠ² с MongoDB ΡƒΠΆΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Π², Ρ‡Ρ‚ΠΎ для MongoDB Π² PodDisruptionBudget установлСн minAvailable: 2, Kubernetes Π½Π΅ даст ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ pod.

Π˜Ρ‚ΠΎΠ³: для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ (Π° Π½Π° самом Π΄Π΅Π»Π΅ β€” пСрСсозданиС) pod’ΠΎΠ² ΠΏΡ€ΠΈ освобоТдСнии кластСра, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ PodDisruptionBudget.

Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Рассмотрим Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. Π•ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΊΠ°ΠΊ Deployment Π² Kubernetes. На Π΅Π³ΠΎ pod’Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡ… Ρ‚Ρ€ΠΈ) ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, Π° ΠΌΡ‹ Π² Π½ΠΈΡ… замСряСм Π½Π΅ΠΊΠΈΠΉ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (скаТСм, Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° CPU). Когда Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° возрастаСт, ΠΌΡ‹ это фиксируСм ΠΏΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ количСство pod’ΠΎΠ² для распрСдСлСния запросов.

БСгодня Π² Kubernetes это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ: настраиваСтся автоматичСскоС ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅/ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ количСства pod’ΠΎΠ² Π² зависимости ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ замСряСмых ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Π“Π»Π°Π²Π½Ρ‹Π΅ вопросы здСсь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ значСния (для принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ числа pod’ΠΎΠ²). Π˜Π·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠ΅:

ΠΠ²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°)

Как Π΄Π΅Π»Π°Ρ‚ΡŒ это тСхничСски β€” ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΈ Ρ‚.ΠΏ. β€” я ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассказывал Π² Π΄ΠΎΠΊΠ»Π°Π΄Π΅ ΠΏΡ€ΠΎ ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Kubernetes. А основной совСт для Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² β€” экспСримСнтируйтС!

Π•ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ USE (Utilization Saturation and Errors), смысл ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ. На основании Ρ‡Π΅Π³ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, php-fpm? На основании Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ worker’Ρ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ, β€” это utilization. А Ссли worker’Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈΡΡŒ ΠΈ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ β€” это ΡƒΠΆΠ΅ saturation. Оба этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ, Π° Π² зависимости ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

ВмСсто Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π£ Π΄ΠΎΠΊΠ»Π°Π΄Π° Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅: ΠΏΡ€ΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒ рСсурсы. Об этом я расскаТу Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… Ρ€ΠΎΠ»ΠΈΠΊΠ°Ρ… Π½Π° нашСм YouTube β€” ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ!

Π’ΠΈΠ΄Π΅ΠΎ ΠΈ слайды

Π’ΠΈΠ΄Π΅ΠΎ с выступлСния (44 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹):

ΠŸΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄Π°:

P.S.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Ρ‹ ΠΏΡ€ΠΎ Kubernetes Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com