Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Kubernetes: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности

Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Kubernetes: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности

TL;DR

  • Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ высокой Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ микросСрвисов, ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΌΠ°Π»ΠΎ.
  • Для Π±ΠΎΠ»Π΅Π΅ быстрого восстановлСния ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ отказоустойчивости прилоТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ высокой Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ΠΈ (HOP, High Observability Principle).
  • На ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для НОР трСбуСтся: Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ΅ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности ΠΈ трассировки ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ/ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ².
  • Π’ качСствС элСмСнта НОР ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ readinessProbe ΠΈ livenessProbe Kubernetes.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π¨Π°Π±Π»ΠΎΠ½ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности?

Когда ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΡˆΡŒ критичСски Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΈ высокодоступноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚Π°ΠΊΠΎΠΌ аспСктС, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ считаСтся отказоустойчивым, Ссли ΠΎΠ½ΠΎ быстро восстанавливаСтся послС ΠΎΡ‚ΠΊΠ°Π·Π°. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ микросСрвисов – ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ помСщаСтся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. А для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° k8s высокодоступно, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΡˆΡŒ кластСр, Π½Π°Π΄ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ шаблонам. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… – Π¨Π°Π±Π»ΠΎΠ½ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности. Он опрСдСляСт, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сообщаСт k8s ΠΎ своСй работоспособности. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ информация ΠΎ Ρ‚ΠΎΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ pod, Π° Π΅Ρ‰Π΅ ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ запросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° Π½ΠΈΡ…. Π§Π΅ΠΌ большС Kubernetes Π·Π½Π°Π΅Ρ‚ ΠΎ работоспоспособности pod’Π°, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡƒΠΌΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ балансировкС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ высокой Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ своСврСмСнно ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° запросы.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ высокой Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ΠΈ (НОР)

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ высокой Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ΠΈ – это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² проСктирования ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ микросСврисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ сСрвисам Π±Π΅Π·Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡ… запрос обрабатываСтся (ΠΈ это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ), Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΠΎΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… сСрвисов. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ посылаСт Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ запрос HTTP, оТидая ΠΎΡ‚Π²Π΅Ρ‚Π° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ – Π²ΠΎΡ‚ ΠΈ всС. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ запрос ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ PythonJS, Π° ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ – Python Flask. ΠšΠΎΠ½Ρ‚ΠΉΠ½Π΅Ρ€Ρ‹ Π΄Ρ€ΡƒΠ³ для Π΄Ρ€ΡƒΠ³Π° – Ρ‡Ρ‚ΠΎ Ρ‡Π΅Ρ€Π½Ρ‹Π΅ ящики со скрытым содСрТимым. Однако ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ НОР Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСрвис раскрывал нСсколько ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ API, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…, насколько ΠΎΠ½ работоспособСн, Π° Ρ‚Π°ΠΊΠΆΠ΅ состояниС Π΅Π³ΠΎ готовности ΠΈ отказоустойчивости. Π­Ρ‚ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Kubernetes, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги ΠΏΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ балансировкС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π“Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ спроСктированноС ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΡƒΠ΅Ρ‚ свои основныС события ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ стандартныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° STDERR ΠΈ STDOUT. Π‘Π»Π΅Π΄ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСрвис, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ filebeat, logstash ΠΈΠ»ΠΈ fluentd, Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ систСму ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Prometheus) ΠΈ систСму сбора ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² (Π½Π°Π±ΠΎΡ€ ПО ELK). На схСмС Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠ΅ΠΆΠ½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² соотвСтствии с Π¨Π°Π±Π»ΠΎΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности ΠΈ ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ высокой Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ΠΈ.

Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Kubernetes: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности

Как ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π¨Π°Π±Π»ΠΎΠ½ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности Π² Kubernetes?

Из ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ k8s ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ состояниС pod’ов ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² (Deployments, ReplicaSets, DaemonSets, StatefulSets ΠΈ ΠΏΡ€ΠΎΡ‡., ΠΏΡ€ΠΎΡ‡.). ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ², Ρ‡Ρ‚ΠΎ pod ΠΏΠΎ Π½Π΅ΠΊΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΡƒΠΏΠ°Π», ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ пытаСтся ΠΎΡ‚Ρ€Π΅ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π΄ΡƒΠ»ΠΈΡ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ·Π΅Π». Однако pod ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° сам ΠΏΡ€ΠΈ этом Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π² качСствС Π²Π΅Π±-сСрвСра Apache, Π²Ρ‹ установили ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π° нСсколько pod’ов кластСра. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±Ρ‹Π»Π° настроСна Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ – всС запросы ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ ΠΊΠΎΠ΄ΠΎΠΌ 500 (внутрСнняя ошибка сСрвСра). ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ поставки ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° состояния pod`ΠΎΠ² Π΄Π°Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ½Π°Ρ‡Π΅. Π­Ρ‚Ρƒ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΌΡ‹ опишСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Kubernetes: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ k8s выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ работоспособности. Π’ этом Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ kubelet постоянно провСряСт состояниС процСсса Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Π‘Ρ‚ΠΎΠΈΡ‚ Π΅ΠΌΡƒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ процСсс встал, ΠΈ ΠΎΠ½ Π΅Π³ΠΎ рСстартит. Если ошибка устраняСтся простым пСрСзапуском прилоТСния, Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° спроСктирована Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ любой ошибкС, Ρ‚ΠΎΠ³Π΄Π° Π²Π°ΠΌ для слСдования НОР ΠΈ Π¨Π°Π±Π»ΠΎΠ½Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности достаточно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности процСсса. Π–Π°Π»ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ всС ошибки ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ пСрСзапуском. На этот случай k8s ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ 2 Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… способа выявлСния Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ pod’Π°: livenessProbe ΠΈ readinessProbe.

LivenessProbe

Π’ΠΎ врСмя livenessProbe kubelet выполняСт 3 Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ: Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ выясняСт, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ pod, Π½ΠΎ ΠΈ Π³ΠΎΡ‚ΠΎΠ² Π»ΠΈ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° запросы:

  • Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ HTTP-запрос ΠΊ pod’Ρƒ. ΠžΡ‚Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ HTTP-ΠΊΠΎΠ΄ ΠΎΡ‚Π²Π΅Ρ‚Π° Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 200 Π΄ΠΎ 399. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ΄Ρ‹ 5Ρ…Ρ… ΠΈ 4Ρ…Ρ… ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ pod’Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΡƒΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ процСсс Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.
  • Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ pod’ΠΎΠ² с Π½Π΅-HTTP сСрвисами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвСр Postfix), Π½Π°Π΄ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ TCP-связь.
  • ИсполнСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для pod’Π° (Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° считаСтся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ, Ссли ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ – 0.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ pod’Π° содСрТит NodeJS ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π° HTTP-запросы Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ 500. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ пСрСзапускаСтся, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 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

Бпустя нСсколько сСкунд ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ содСрТимоС pod’Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

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')
})

Dockerfile

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

Π’Π°ΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π²ΠΎΡ‚ Π½Π° Ρ‡Ρ‚ΠΎ: livenessProbe пСрСзапустит ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π΅. Если пСрСзапуск Π½Π΅ исправит ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΌΠ΅ΡˆΠ°ΡŽΡ‰ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, kubelet Π½Π΅ смоТСт ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΌΠ΅Ρ€Ρ‹ для устранСния нСисправности.

readinessProbe

readinessProbe Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ livenessProbes (GET-запросы, Π’Π‘Π  связи ΠΈ исполнСниС ΠΊΠΎΠΌΠ°Π½Π΄), Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ дСйствий ΠΏΠΎ ΡƒΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ нСисправностСй. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ зафиксирован сбой, Π½Π΅ пСрСзапускаСтся, Π° изолируСтся ΠΎΡ‚ входящСго Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² выполняСт ΠΌΠ½ΠΎΠ³ΠΎ вычислСний ΠΈΠ»ΠΈ подвСргаСтся тяТСлой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ вырастаСт врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° запросы. Π’ случаС 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

Π Π°Π·Π²Π΅Ρ€Π½Π΅ΠΌ pod с kubectl:

kubectl apply -f pod.yaml

Π’Ρ‹ΠΆΠ΄Π΅ΠΌ ΠΏΠ°Ρ€Ρƒ сСкунд, Π° ΠΏΠΎΡ‚ΠΎΠΌ глянСм, ΠΊΠ°ΠΊ сработала readinessProbe:

kubectl describe pods nodedelayed

Π’ ΠΊΠΎΠ½Ρ†Π΅ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ событий Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Π²ΠΎΡ‚ этому.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, kubectl Π½Π΅ стал ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ pod, ΠΊΠΎΠ³Π΄Π° врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ прСвысило 2 сСкунды. ВмСсто этого ΠΎΠ½ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΠ» запрос. ВходящиС связи ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ pod’Ρ‹.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° с pod’Π° снята лишняя Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, 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 это стало Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ πŸ™‚ – ΠΏΡ€ΠΈΠΌ.Ρ€Π΅Π΄. ]

БСгодня ΠΆΠ΅ исправлСния приходится Π²Π½ΠΎΡΠΈΡ‚ΡŒ Ρ‡ΡƒΡ‚ΡŒ Π»ΠΈ Π½Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, поэтому прилоТСния большС Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π΅Ρ€Π½Ρ‹ΠΌΠΈ ящиками. НСт, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ систСмам ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Ρ†Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ состоянии процСссов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² случаС нСобходимости Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ. Π­Ρ‚ΠΎ называСтся Π¨Π°Π±Π»ΠΎΠ½ проСктирования ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ высокой Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ΠΈ (НОР).

Kubernetes ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ 2 Π²ΠΈΠ΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности: readinessProbe ΠΈ livenessProbe. Оба ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ (HTTP GET запросы, Π’Π‘Π -связи ΠΈ исполнСниС ΠΊΠΎΠΌΠ°Π½Π΄). ΠžΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΊΠΈ Π² pod’Π°Ρ…. livenessProbe пСрСзапускаСт ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² Π½Π°Π΄Π΅ΠΆΠ΄Π΅, Ρ‡Ρ‚ΠΎ ошибка большС Π½Π΅ повторится, Π° readinessProbe ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ pod ΠΎΡ‚ входящСго Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° – Π΄ΠΎ устранСния ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΊΠΈ.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ прилоТСния Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ Ρ‚ΠΎΡ‚, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΈΠ΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ собирали достаточно Π΄Π°Π½Π½Ρ‹Ρ…, особСнно ΠΊΠΎΠ³Π΄Π° создана ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ситуация. Оно Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ API, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠ΅ систСмС ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° (Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Prometheus) Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ состояния работоспособности.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ