Най-Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π½Π° Kubernetes: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ

Най-Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π½Π° Kubernetes: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ

TL; DR

  • Π—Π° Π΄Π° сС постигнС висока видимост Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ микроуслугитС, рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΠΏΡŠΡ€Π²ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ са Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ.
  • Π—Π° ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΈ повишСна устойчивост прилоТСнията трябва Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° висока видимост (HOP).
  • На Π½ΠΈΠ²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, NOP изисква: ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ рСгистриранС, Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ наблюдСниС, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° разумност ΠΈ прослСдяванС Π½Π° производитСлност/ΠΏΡ€Π΅Ρ…ΠΎΠ΄.
  • Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π° NOR Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΠŸΡ€ΠΎΠ±Π° ΠΈ livenessProbe Kubernetes.

Какво Π΅ шаблон Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ?

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ Π·Π° мисията ΠΈ високо Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½ΠΎ Π΄Π° помислитС Π·Π° Ρ‚Π°ΠΊΡŠΠ² аспСкт ΠΊΠ°Ρ‚ΠΎ толСрантност към Π³Ρ€Π΅ΡˆΠΊΠΈ. Π•Π΄Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сС счита Π·Π° устойчиво Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Π°ΠΊΠΎ сС Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π° Π±ΡŠΡ€Π·ΠΎ слСд ΠΏΠΎΠ²Ρ€Π΅Π΄Π°. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎ ΠΎΠ±Π»Π°Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π° микроуслуги - ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ всСки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ сС поставя Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. И Π·Π° Π΄Π° стС сигурни, Ρ‡Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° k8s Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, трябва Π΄Π° слСдватС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π‘Ρ€Π΅Π΄ тях Π΅ ΡˆΠ°Π±Π»ΠΎΠ½ΡŠΡ‚ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ. Π’ΠΎΠΉ опрСдСля ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π°Π²Π° Π½Π° k8s, Ρ‡Π΅ Π΅ Π·Π΄Ρ€Π°Π²ΠΎ. Π’ΠΎΠ²Π° Π½Π΅ Π΅ само информация Π·Π° Ρ‚ΠΎΠ²Π° Π΄Π°Π»ΠΈ ΠΏΠΎΠ΄ΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π½ΠΎ ΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΈ отговаря Π½Π° заявки. ΠšΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Kubernetes Π·Π½Π°Π΅ Π·Π° Π·Π΄Ρ€Π°Π²Π΅Ρ‚ΠΎ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Π·Π΅ΠΌΠ° относно ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ балансиранСто Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ Π½Π° висока Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ позволява Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° отговаря Π½Π° заявки своСврСмСнно.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° висока Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ (HOP)

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ Π½Π° висока Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΈ прилоТСния. Π’ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° микроуслугитС услугитС Π½Π΅ сС интСрСсуват ΠΊΠ°ΠΊ сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ заявки (ΠΈ Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ), Π½ΠΎ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π΅ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ ΠΎΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‰ΠΈΡ‚Π΅ услуги. НапримСр, Π·Π° Π΄Π° удостовСри ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° HTTP заявка Π΄ΠΎ Π΄Ρ€ΡƒΠ³, ΠΎΡ‡Π°ΠΊΠ²Π°ΠΉΠΊΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ - Ρ‚ΠΎΠ²Π° Π΅ всичко. PythonJS ΡΡŠΡ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ заявката ΠΈ Python Flask ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ са ΠΊΠ°Ρ‚ΠΎ Ρ‡Π΅Ρ€Π½ΠΈ ΠΊΡƒΡ‚ΠΈΠΈ със скрито ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Π΅Π΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ NOP изисква всяка услуга Π΄Π° ΠΈΠ·Π»ΠΎΠΆΠΈ мноТСство ΠΊΡ€Π°ΠΉΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° API, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ ΠΊΠΎΠ»ΠΊΠΎ Π΅ Π·Π΄Ρ€Π°Π²Π°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π½Π΅ΠΉΠ½Π°Ρ‚Π° готовност ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° толСрантност към Π³Ρ€Π΅ΡˆΠΊΠΈ. Kubernetes изисква Ρ‚Π΅Π·ΠΈ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ, Π·Π° Π΄Π° обмисли слСдващитС ΡΡ‚ΡŠΠΏΠΊΠΈ Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ ΠΈ балансиранС Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ.

Π•Π΄Π½ΠΎ Π΄ΠΎΠ±Ρ€Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ΠΎ ΠΎΠ±Π»Π°Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ рСгистрира основнитС си ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ стандартнитС I/O ΠΏΠΎΡ‚ΠΎΡ†ΠΈ STDERR ΠΈ STDOUT. Π‘Π»Π΅Π΄Π²Π° спомагатСлна услуга, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ filebeat, logstash ΠΈΠ»ΠΈ fluentd, доставяща рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π΄ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° систСма Π·Π° наблюдСниС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Prometheus) ΠΈ систСма Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ (софтуСрСн ΠΏΠ°ΠΊΠ΅Ρ‚ ELK). Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΅Π΄Π½ΠΎ ΠΎΠ±Π»Π°Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ спорСд шаблона Π·Π° тСстванС Π½Π° Π·Π΄Ρ€Π°Π²Π΅Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° висока видимост.

Най-Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π½Π° Kubernetes: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ

Как Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ шаблона Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π·Π΄Ρ€Π°Π²Π΅Ρ‚ΠΎ Π² Kubernetes?

Извън кутията, k8s слСди ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈΡ‚Π΅ (Π Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ, ReplicaSets, DaemonSets, StatefulSets ΠΈ Ρ‚.Π½. ΠΈ Ρ‚.Π½.). Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ установи, Ρ‡Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ Π΅ ΠΏΠ°Π΄Π½Π°Π» ΠΏΠΎ някаква ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΡŠΡ‚ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° Π³ΠΎ рСстартира ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ прСмСсти Π½Π° Π΄Ρ€ΡƒΠ³ възСл. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π³Ρ€ΡƒΠΏΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠΎΠ±Ρ‰ΠΈ, Ρ‡Π΅ Π΅ Π³ΠΎΡ‚ΠΎΠ²Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π½ΠΎ самата тя Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°. НСка Π΄Π°Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Apache ΠΊΠ°Ρ‚ΠΎ ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€, инсталирали стС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π° няколко ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. Въй ΠΊΠ°Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, всички заявки към ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ отговарят с ΠΊΠΎΠ΄ 500 (Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π° ΡΡŠΡ€Π²ΡŠΡ€Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°). ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° доставката ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡˆΡƒΡˆΡƒΠ»ΠΊΠΈΡ‚Π΅ Π΄Π°Π²Π° ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚, Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ мислят Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ. Π©Π΅ опишСм Ρ‚Π°Π·ΠΈ Π½Π΅ΠΆΠ΅Π»Π°Π½Π° ситуация, ΠΊΠ°ΠΊΡ‚ΠΎ слСдва:

Най-Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π½Π° Kubernetes: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ

Π’ нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ k8s Π³ΠΎ ΠΏΡ€Π°Π²ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° функционалността. ΠŸΡ€ΠΈ Ρ‚ΠΎΠ·ΠΈ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° kubelet Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ провСрява ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° процСса Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅, Ρ‡Π΅ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π΅ спрял, Ρ‚ΠΎΠΉ Ρ‰Π΅ Π³ΠΎ рСстартира. Ако Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° Ρ‡Ρ€Π΅Π· просто рСстартиранС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π° Π΄Π° сС ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π° ΠΏΡ€ΠΈ всяка Π³Ρ€Π΅ΡˆΠΊΠ°, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° изправността Π½Π° процСса Π΅ всичко, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅, Π·Π° Π΄Π° слСдватС NOP ΠΈ шаблона Π·Π° тСстванС Π½Π° Π·Π΄Ρ€Π°Π²Π΅Ρ‚ΠΎ. ЕдинствСното ΠΆΠ°Π»ΠΊΠΎ Π΅, Ρ‡Π΅ Π½Π΅ всички Π³Ρ€Π΅ΡˆΠΊΠΈ сС Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°Ρ‚ Ρ‡Ρ€Π΅Π· рСстартиранС. Π’ Ρ‚ΠΎΠ·ΠΈ случай k8s ΠΏΡ€Π΅Π΄Π»Π°Π³Π° 2 ΠΏΠΎ-Π·Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с капсулата: livenessProbe ΠΈ Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΠŸΡ€ΠΎΠ±Π°.

LivenessProbe

По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° livenessProbe kubelet ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° 3 Π²ΠΈΠ΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ: Π½Π΅ само опрСдСля Π΄Π°Π»ΠΈ pod Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π½ΠΎ ΠΈ Π΄Π°Π»ΠΈ Π΅ Π³ΠΎΡ‚ΠΎΠ² Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΈ Π΄Π° отговаря Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎ Π½Π° заявки:

  • НастройтС HTTP заявка към Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°. ΠžΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° HTTP ΠΊΠΎΠ΄ Π·Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ 200 Π΄ΠΎ 399. Π’Π°ΠΊΠ° ΠΊΠΎΠ΄ΠΎΠ²Π΅Ρ‚Π΅ 5xx ΠΈ 4xx сигнализират, Ρ‡Π΅ ΠΏΠΎΠ΄ΡŠΡ‚ ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ.
  • Π—Π° Π΄Π° тСстватС pods с Π½Π΅-HTTP услуги (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ пощСнския ΡΡŠΡ€Π²ΡŠΡ€ Postfix), трябва Π΄Π° установитС TCP Π²Ρ€ΡŠΠ·ΠΊΠ°.
  • ИзпълнСниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΠΏΠΎΠ΄ (Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° сС счита Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½Π°, Π°ΠΊΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ Π·Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π΅ 0.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°. Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° дСфиниция Π½Π° pod ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° NodeJS ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ…Π²ΡŠΡ€Π»Ρ Π³Ρ€Π΅ΡˆΠΊΠ° 500 ΠΏΡ€ΠΈ HTTP заявки.Π—Π° Π΄Π° смС сигурни, Ρ‡Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ сС рСстартира ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Ρ‚Π°ΠΊΠ°Π²Π° Π³Ρ€Π΅ΡˆΠΊΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° livenessProbe:

apiVersion: v1
kind: Pod
metadata:
 name: node500
spec:
 containers:
   - image: magalix/node500
     name: node500
     ports:
       - containerPort: 3000
         protocol: TCP
     livenessProbe:
       httpGet:
         path: /
         port: 3000
       initialDelaySeconds: 5

Π’ΠΎΠ²Π° Π½Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ всяка Π΄Ρ€ΡƒΠ³Π° дСфиниция Π½Π° pod, Π½ΠΎ Π½ΠΈΠ΅ добавямС ΠΎΠ±Π΅ΠΊΡ‚ .spec.containers.livenessProbe... ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ httpGet ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΡŠΡ‚Ρ, към ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° HTTP GET заявката (Π² нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ²Π° Π΅ /, Π½ΠΎ Π² Π±ΠΎΠΉΠ½ΠΈΡ‚Π΅ сцСнарии ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ /api/v1/status). Π”Ρ€ΡƒΠ³ livenessProbe ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ initialDelaySeconds, ΠΊΠΎΠ΅Ρ‚ΠΎ инструктира опСрацията Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π±Ρ€ΠΎΠΉ сСкунди. ЗабавянСто Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° стартиранС ΠΈ ΠΏΡ€ΠΈ рСстартиранС Ρ‰Π΅ бъдС Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π·Π° извСстно Π²Ρ€Π΅ΠΌΠ΅.

Π—Π° Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ Ρ‚Π°Π·ΠΈ настройка към ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅:

kubectl apply -f pod.yaml

Π‘Π»Π΅Π΄ няколко сСкунди ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π°:

kubectl describe pods node500

Π’ края Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° Π½Π°ΠΌΠ΅Ρ€Π΅Ρ‚Π΅ Ρ‚ΠΎΠ²Π° Π΅ ΠΊΠΎΠ΅Ρ‚ΠΎ.

ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, livenessProbe ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π° HTTP GET заявка, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π³Ρ€Π΅ΡˆΠΊΠ° 500 (ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ) ΠΈ kubelet Π³ΠΎ рСстартира.

Ако сС Ρ‡ΡƒΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊ Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ NideJS, Π΅Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ app.js ΠΈ Dockerfile:

app.js

var http = require('http');

var server = http.createServer(function(req, res) {
    res.writeHead(500, { "Content-type": "text/plain" });
    res.end("We have run into an errorn");
});

server.listen(3000, function() {
    console.log('Server is running at 3000')
})

Π”ΠΎΠΊΠ΅Ρ€ Ρ„Π°ΠΉΠ»

FROM node
COPY app.js /
EXPOSE 3000
ENTRYPOINT [ "node","/app.js" ]

Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ Ρ‚ΠΎΠ²Π°: livenessProbe Ρ‰Π΅ рСстартира ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° само Π°ΠΊΠΎ Π½Π΅ успСС. Ако рСстартиранСто Π½Π΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π° Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°, която ΠΏΡ€Π΅Ρ‡ΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, kubelet няма Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ дСйствия Π·Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΠŸΡ€ΠΎΠ±Π°

readinessProbe Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° livenessProbes (GET заявки, TCP ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ изпълнСниС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ), с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° дСйствията Π·Π° отстраняванС Π½Π° нСизправности. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚, Π² ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚Π° Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°, Π½Π΅ сС рСстартира, Π½ΠΎ сС ΠΈΠ·ΠΎΠ»ΠΈΡ€Π° ΠΎΡ‚ входящия Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си, Ρ‡Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ изчислСния ΠΈΠ»ΠΈ Π΅ ΠΏΠΎΠ΄ голямо Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° рСакция. Π’ случай Π½Π° livenessProbe, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π·Π° наличност Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π° сС задСйства (Ρ‡Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° timeoutSeconds), слСд ΠΊΠΎΠ΅Ρ‚ΠΎ kubelet рСстартира ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠšΠΎΠ³Π°Ρ‚ΠΎ сС стартира, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° изпълнява Π·Π°Π΄Π°Ρ‡ΠΈ, изискващи рСсурси, ΠΈ сС рСстартира ΠΎΡ‚Π½ΠΎΠ²ΠΎ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ Π·Π° прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ сС нуТдаят ΠΎΡ‚ скорост Π½Π° рСакция. НапримСр, ΠΊΠΎΠ»Π°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π΅ Π½Π° ΠΏΡŠΡ‚Ρ, Ρ‡Π°ΠΊΠ° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€Π°, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ сС забавя - ΠΈ ΠΊΠΎΠ»Π°Ρ‚Π° ΠΏΠΎΠΏΠ°Π΄Π° Π² катастрофа.

НСка напишСм дСфиниция Π½Π° redinessProbe, която Ρ‰Π΅ Π·Π°Π΄Π°Π΄Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° GET заявка Π½Π° Π½Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΄Π²Π΅ сСкунди, Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° GET заявката слСд 5 сСкунди. Π€Π°ΠΉΠ»ΡŠΡ‚ pod.yaml трябва Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

apiVersion: v1
kind: Pod
metadata:
 name: nodedelayed
spec:
 containers:
   - image: afakharany/node_delayed
     name: nodedelayed
     ports:
       - containerPort: 3000
         protocol: TCP
     readinessProbe:
       httpGet:
         path: /
         port: 3000
       timeoutSeconds: 2

НСка Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΏΠΎΠ΄ с kubectl:

kubectl apply -f pod.yaml

НСка ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌΠ΅ няколко сСкунди ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ readinessProbe:

kubectl describe pods nodedelayed

Π’ края Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ някои ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π° са ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Ρ‚ΠΎΠ·ΠΈ.

ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, kubectl Π½Π΅ рСстартира ΠΌΠΎΠ΄ΡƒΠ»Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π°Π΄Ρ…Π²ΡŠΡ€Π»ΠΈ 2 сСкунди. ВмСсто Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠΉ ΠΎΡ‚ΠΌΠ΅Π½ΠΈ исканСто. ВходящитС ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ сС прСнасочват към Π΄Ρ€ΡƒΠ³ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ сСга, слСд ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ΄ΡŠΡ‚ Π΅ Ρ€Π°Π·Ρ‚ΠΎΠ²Π°Ρ€Π΅Π½, kubectl ΠΎΡ‚Π½ΠΎΠ²ΠΎ насочва заявкитС към Π½Π΅Π³ΠΎ: ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° GET заявкитС Π²Π΅Ρ‡Π΅ Π½Π΅ сС забавят.

Π—Π° сравнСниС ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ Π΅ модифицираният Ρ„Π°ΠΉΠ» app.js:

var http = require('http');

var server = http.createServer(function(req, res) {
   const sleep = (milliseconds) => {
       return new Promise(resolve => setTimeout(resolve, milliseconds))
   }
   sleep(5000).then(() => {
       res.writeHead(200, { "Content-type": "text/plain" });
       res.end("Hellon");
   })
});

server.listen(3000, function() {
   console.log('Server is running at 3000')
})

TL; DR
ΠŸΡ€Π΅Π΄ΠΈ появата Π½Π° ΠΎΠ±Π»Π°Ρ‡Π½ΠΈΡ‚Π΅ прилоТСния, рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ бяха основното срСдство Π·Π° наблюдСниС ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° изправността Π½Π° прилоТСнията. НямашС ΠΎΠ±Π°Ρ‡Π΅ срСдства Π΄Π° сС ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ ΠΊΠ°ΠΊΠ²ΠΈΡ‚ΠΎ ΠΈ Π΄Π° Π±ΠΈΠ»ΠΎ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‰ΠΈ дСйствия. РСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ са всС ΠΎΡ‰Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ днСс; Ρ‚Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΡΡŠΠ±Ρ€Π°Π½ΠΈ ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ Π΄ΠΎ систСма Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·Π²ΡŠΠ½Ρ€Π΅Π΄Π½ΠΈ ситуации ΠΈ Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. [Всичко Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π±Π΅Π· ΠΎΠ±Π»Π°Ρ‡Π½ΠΈ прилоТСния, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ monit, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ с k8s стана ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-лСсно :) – Π±Π΅Π»Π΅ΠΆΠΊΠ° Π½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°. ]

ДнСс ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈΡ‚Π΅ трябва Π΄Π° сС правят ΠΏΠΎΡ‡Ρ‚ΠΈ Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ прилоТСнията Π²Π΅Ρ‡Π΅ Π½Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ‡Π΅Ρ€Π½ΠΈ ΠΊΡƒΡ‚ΠΈΠΈ. НС, Ρ‚Π΅ трябва Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ ΠΊΡ€Π°ΠΉΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ позволяват Π½Π° систСмитС Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π΄Π° правят заявки ΠΈ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ Ρ†Π΅Π½Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° процСситС, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ€Π΅Π°Π³ΠΈΡ€Π°Ρ‚ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π’ΠΎΠ²Π° сС Π½Π°Ρ€ΠΈΡ‡Π° ΠΌΠΎΠ΄Π΅Π» Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½ Π½Π° тСста Π·Π° производитСлност, ΠΊΠΎΠΉΡ‚ΠΎ слСдва ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° висока видимост (HOP).

Kubernetes ΠΏΡ€Π΅Π΄Π»Π°Π³Π° 2 Π²ΠΈΠ΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Π·Π΄Ρ€Π°Π²Π΅Ρ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: readinessProbe ΠΈ livenessProbe. И Π΄Π²Π΅Ρ‚Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (HTTP GET заявки, TCP ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ изпълнСниС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ). Π’Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΏΠΎ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Π·Π΅ΠΌΠ°Ρ‚ Π² ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² подс. livenessProbe рСстартира ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с Π½Π°Π΄Π΅ΠΆΠ΄Π°Ρ‚Π°, Ρ‡Π΅ Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° няма Π΄Π° сС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈ, Π° readinessProbe ΠΈΠ·ΠΎΠ»ΠΈΡ€Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ΠΎΡ‚ входящ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ бъдС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π°.

ΠŸΡ€Π°Π²ΠΈΠ»Π½ΠΈΡΡ‚ Π΄ΠΈΠ·Π°ΠΉΠ½ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ трябва Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΈ Π΄Π²Π°Ρ‚Π° Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ Ρ‚Π΅ ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π°Π½Π½ΠΈ, особСно ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’ΠΎΠΉ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° трябва Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΊΡ€Π°ΠΉΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° API, ΠΊΠΎΠΈΡ‚ΠΎ прСдоставят Π½Π° систСмата Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ (Prometheus) Π²Π°ΠΆΠ½ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π·Π° Π·Π΄Ρ€Π°Π²Π΅Ρ‚ΠΎ.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€