ΠΠ°Ρ˜Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° Kubernetes: здравствСни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ

ΠΠ°Ρ˜Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° Kubernetes: здравствСни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ

TL; Π”Π 

  • Π—Π° Π΄Π° сС постигнС висока забСлСТливост Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ микросСрвиситС, Ρ‚Ρ€ΡƒΠΏΡ†ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ°Ρ€Π½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π½Π΅ сС Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ.
  • Π—Π° ΠΏΠΎΠ±Ρ€Π·ΠΎ Π·Π°ΠΊΡ€Π΅ΠΏΠ½ΡƒΠ²Π°ΡšΠ΅ ΠΈ Π·Π³ΠΎΠ»Π΅ΠΌΠ΅Π½Π° Сластичност, Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚ ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΡ‚ Π·Π° висока набљудуваност (HOP).
  • На Π½ΠΈΠ²ΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, NOP Π±Π°Ρ€Π°: ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π΅Π²ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ€Π°ΡšΠ΅, Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ слСдСњС, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° разумност ΠΈ слСдСњС Π½Π° пСрформанси/Ρ‚Ρ€Π°Π½Π·ΠΈΡ†ΠΈΡ˜Π°.
  • ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ‚Π΅ Ρ‡Π΅ΠΊΠΎΠ²ΠΈ ΠΊΠ°ΠΊΠΎ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π° НИВИ подготвСностБонда ΠΈ livenessProbe ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚ΠΈΡ.

Π¨Ρ‚ΠΎ Π΅ шаблон Π·Π° здравствСна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°?

Кога Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Ρ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° која Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° Π·Π° ΠΌΠΈΡΠΈΡ˜Π°Ρ‚Π° ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ достапна, ΠΌΠ½ΠΎΠ³Ρƒ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° сС размислува Π·Π° Ρ‚Π°ΠΊΠΎΠ² аспСкт ΠΊΠ°ΠΊΠΎ Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ†ΠΈΡ˜Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° сС смСта Π·Π° Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ‚Π½Π° Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π°ΠΊΠΎ Π±Ρ€Π·ΠΎ сС ΠΎΠΏΠΎΡ€Π°Π²ΠΈ ΠΎΠ΄ Π΄Π΅Ρ„Π΅ΠΊΡ‚. Π’ΠΈΠΏΠΈΡ‡Π½Π° ΠΎΠ±Π»Π°ΠΊ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° користи микросСрвис Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° - ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ сСкоја ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° сС става Π²ΠΎ посСбСн ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€. И Π·Π° Π΄Π° Π±ΠΈΠ΄Π΅Ρ‚Π΅ сигурни Π΄Π΅ΠΊΠ° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° k8s Π΅ ΠΌΠ½ΠΎΠ³Ρƒ достапна ΠΊΠΎΠ³Π° Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Ρ‚Π΅ кластСр, Ρ‚Ρ€Π΅Π±Π° Π΄Π° слСдитС ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ шСми. ΠœΠ΅Ρ“Ρƒ Π½ΠΈΠ² Π΅ ΠΈ Π¨Π°Π±Π»ΠΎΠ½ΠΎΡ‚ Π·Π° здравствСна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°. Π’Π°Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° ΠΊΠ°ΠΊΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π° со k8s Π΄Π΅ΠΊΠ° Π΅ Π·Π΄Ρ€Π°Π²Π°. Ова Π½Π΅ Π΅ само ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π° Π·Π° Ρ‚ΠΎΠ° Π΄Π°Π»ΠΈ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, Ρ‚ΡƒΠΊΡƒ ΠΈ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ° ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π° Π½Π° Π±Π°Ρ€Π°ΡšΠ°Ρ‚Π°. ΠšΠΎΠ»ΠΊΡƒ повСќС Kubernetes Π·Π½Π°Π΅ Π·Π° Π·Π΄Ρ€Π°Π²Ρ˜Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π°, Ρ‚ΠΎΠ»ΠΊΡƒ ΠΏΠΎΠΏΠ°ΠΌΠ΅Ρ‚Π½ΠΈ ΠΎΠ΄Π»ΡƒΠΊΠΈ носи Π·Π° Π½Π°ΡΠΎΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ΠΎΡ‚ ΠΈ Π±Π°Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ‚ΠΎΠ²Π°Ρ€ΠΎΡ‚. Π’Π°ΠΊΠ°, ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΡ‚ Π·Π° висока набљудуваност ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΄Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Π±Π°Ρ€Π°ΡšΠ°Ρ‚Π° Π½Π°Π²Ρ€Π΅ΠΌΠ΅Π½ΠΎ.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° висока набљудуваност (HOP)

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

Π”ΠΎΠ±Ρ€ΠΎ Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Π½Π°Ρ‚Π° ΠΎΠ±Π»Π°ΠΊ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π³ΠΈ Π΅Π²ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ€Π° своитС Π³Π»Π°Π²Π½ΠΈ настани ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΈ стандарднитС I/O прСноси STDERR ΠΈ STDOUT. Π‘Π»Π΅Π΄ΡƒΠ²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° услуга, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ filebeat, logstash ΠΈΠ»ΠΈ fluentd, Π΄ΠΎΡΡ‚Π°Π²ΡƒΠ²Π°Ρ˜ΡœΠΈ Π»ΠΎΠ³ΠΎΠ²ΠΈ Π΄ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ систСм Π·Π° слСдСњС (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Prometheus) ΠΈ систСм Π·Π° ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈ (софтвСрски ΠΏΠ°ΠΊΠ΅Ρ‚ ELK). Π”ΠΈΡ˜Π°Π³Ρ€Π°ΠΌΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ Π΅Π΄Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π²ΠΎ ΠΎΠ±Π»Π°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° спорСд Π¨Π΅ΠΌΠ°Ρ‚Π° Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π·Π΄Ρ€Π°Π²Ρ˜Π΅Ρ‚ΠΎ ΠΈ ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΡ‚ Π·Π° висока набљудуваност.

ΠΠ°Ρ˜Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° Kubernetes: здравствСни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ

Како Π΄Π° сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π·Π΄Ρ€Π°Π²Ρ˜Π΅Ρ‚ΠΎ Π²ΠΎ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ?

Надвор ΠΎΠ΄ ΠΊΡƒΡ‚ΠΈΡ˜Π°Ρ‚Π°, k8s Π³ΠΎ слСди статусот Π½Π° ΠΌΠ΅ΡˆΡƒΠ½ΠΊΠΈΡ‚Π΅ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΎΡ€ΠΈΡ‚Π΅ (Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ°, ReplicaSets, DaemonSets, StatefulSets ΠΈΡ‚Π½., ΠΈΡ‚Π½.). ΠžΡ‚ΠΊΠ°ΠΊΠΎ ΠΎΡ‚ΠΊΡ€ΠΈ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π° ΠΏΠ°Π΄Π½Π°Π»Π° ΠΏΠΎΡ€Π°Π΄ΠΈ нСкоја ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΎΡ€ΠΎΡ‚ сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π° Π΄Π° Π³ΠΎ рСстартира ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ прСмСсти Π²ΠΎ Π΄Ρ€ΡƒΠ³ јазол. Π‘Π΅ΠΏΠ°ΠΊ, ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΡ˜Π°Π²ΠΈ Π΄Π΅ΠΊΠ° Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π½ΠΎ самиот Ρ‚ΠΎΡ˜ Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°. Π”Π° Π΄Π°Π΄Π΅ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π²Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° користи Apache ΠΊΠ°ΠΊΠΎ Π²Π΅Π±-сСрвСр, ја инсталиравтС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ‚Π° Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ ΠΎΠ΄ кластСрот. Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΅ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π°, ситС Π±Π°Ρ€Π°ΡšΠ° Π΄ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Π°Ρ‚ со ΠΊΠΎΠ΄ 500 (Π³Ρ€Π΅ΡˆΠΊΠ° Π½Π° Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ΅Π½ сСрвСр). ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° испораката, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° статусот Π½Π° ΠΌΠ΅ΡˆΡƒΠ½ΠΊΠΈΡ‚Π΅ Π΄Π°Π²Π° ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚, Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ размислуваат ΠΏΠΎΠΈΠ½Π°ΠΊΡƒ. Оваа нСсакана ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Π° ќС ја опишСмС Π½Π° слСдниов Π½Π°Ρ‡ΠΈΠ½:

ΠΠ°Ρ˜Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° Kubernetes: здравствСни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ

Π’ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, k8s Π³ΠΎ ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° функционалноста. Π’ΠΎ овој Ρ‚ΠΈΠΏ Π½Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, ΠΊΡƒΠ±Π΅Π»Π΅Ρ‚ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚ΠΈΠ½ΡƒΠΈΡ€Π°Π½ΠΎ ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°Ρ‚Π° Π½Π° процСсот Π²ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚. ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС Ρ€Π°Π·Π±Π΅Ρ€Π΅ Π΄Π΅ΠΊΠ° процСсот Π΅ Π·Π°ΠΏΡ€Π΅Π½, ќС Π³ΠΎ рСстартира. Ако Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π΅ΡˆΠΈ со Сдноставно Ρ€Π΅ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π΅ Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Π½Π° Π΄Π° сС исклучува ΠΏΡ€ΠΈ сСкоја Π³Ρ€Π΅ΡˆΠΊΠ°, Ρ‚ΠΎΠ³Π°Ρˆ здравствСната ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° процСсот Π΅ сС ΡˆΡ‚ΠΎ Π²ΠΈ Ρ‚Ρ€Π΅Π±Π° Π·Π° Π΄Π° Π³ΠΎ слСдитС NOP ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚ Π·Π° здравствСн тСст. ЕдинствСната ΡˆΡ‚Π΅Ρ‚Π° Π΅ ΡˆΡ‚ΠΎ Π½Π΅ сС Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°Π°Ρ‚ ситС Π³Ρ€Π΅ΡˆΠΊΠΈ со Ρ€Π΅ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΡšΠ΅. Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, k8s Π½ΡƒΠ΄ΠΈ 2 ΠΏΠΎΠ΄Π»Π°Π±ΠΎΠΊΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ со ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π°: livenessProbe ΠΈ подготвСностБонда.

LivenessProbe

Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° livenessProbe kubelet Π²Ρ€ΡˆΠΈ 3 Ρ‚ΠΈΠΏΠ° Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ: Π½Π΅ само ΡˆΡ‚ΠΎ ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π° Π΄Π°Π»ΠΈ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, Ρ‚ΡƒΠΊΡƒ ΠΈ Π΄Π°Π»ΠΈ Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π΄Π° ΠΏΡ€ΠΈΠΌΠ° ΠΈ соодвСтно Π΄Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Π±Π°Ρ€Π°ΡšΠ°Ρ‚Π°:

  • ΠŸΠΎΡΡ‚Π°Π²Π΅Ρ‚Π΅ Π±Π°Ρ€Π°ΡšΠ΅ Π·Π° HTTP Π½Π° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π°. ΠžΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΌΠΎΡ€Π° Π΄Π° содрТи ΠΊΠΎΠ΄ Π·Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ HTTP Π²ΠΎ опсСг ΠΎΠ΄ 200 Π΄ΠΎ 399. Π’Π°ΠΊΠ°, ΡˆΠΈΡ„Ρ€ΠΈΡ‚Π΅ 5xx ΠΈ 4xx сигнализираат Π΄Π΅ΠΊΠ° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π° ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΈΠ°ΠΊΠΎ процСсот Ρ€Π°Π±ΠΎΡ‚ΠΈ.
  • Π—Π° Π΄Π° Π³ΠΈ тСстиратС ΠΏΠΎΠ΄ΠΎΠ²ΠΈΡ‚Π΅ со услуги ΠΊΠΎΠΈ Π½Π΅ сС HTTP (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСрвСрот Π·Π° ΠΏΠΎΡˆΡ‚Π° Postfix), Ρ‚Ρ€Π΅Π±Π° Π΄Π° воспоставитС TCP врска.
  • Π˜Π·Π²Ρ€ΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° pod (Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ½ΠΎ). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° сС смСта Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½Π° Π°ΠΊΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ Π·Π° ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π΅ 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 ΠΊΠΎΠΈ Π±Π΅Π° користСни:

Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°.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 Ρ€Π°Π±ΠΎΡ‚ΠΈ слично ΠΊΠ°ΠΊΠΎ livenessProbes (GET Π±Π°Ρ€Π°ΡšΠ°, TCP ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ), освСн Π·Π° Π΄Π΅Ρ˜ΡΡ‚Π²Π° Π·Π° ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚ Π²ΠΎ кој Π΅ ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Π½ Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΡ‚ Π½Π΅ сС рСстартира, Ρ‚ΡƒΠΊΡƒ Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ ΠΎΠ΄ Π΄ΠΎΡ˜Π΄ΠΎΠ²Π½ΠΈΠΎΡ‚ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜. ЗамислСтС Π΄Π΅ΠΊΠ° Π΅Π΄Π΅Π½ ΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ Π²Ρ€ΡˆΠΈ ΠΌΠ½ΠΎΠ³Ρƒ прСсмСтки ΠΈΠ»ΠΈ Π΅ ΠΏΠΎΠ΄ Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅, ΡˆΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΡƒΠ²Π° Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°ΡšΠ΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€. Π’ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π½Π° livenessProbe, сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° достапноста Π½Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΎΡ‚ (ΠΏΡ€Π΅ΠΊΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° timeoutSeconds), ΠΏΠΎ ΡˆΡ‚ΠΎ ΠΊΡƒΠ±Π΅Π»Π΅Ρ‚ΠΎΡ‚ Π³ΠΎ рСстартира ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚. Кога ќС сС стартува, ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚ ΠΏΠΎΡ‡Π½ΡƒΠ²Π° Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Π·Π°Π΄Π°Ρ‡ΠΈ со ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΈ рСсурси ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сС рСстартира. Ова ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠΈ ΠΈΠΌ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π±Ρ€Π·ΠΈΠ½Π° Π½Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ» Π΄ΠΎΠ΄Π΅ΠΊΠ° Π΅ Π½Π° ΠΏΠ°Ρ‚ Ρ‡Π΅ΠΊΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ ΠΎΠ΄ сСрвСрот, ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π΅ ΠΎΠ΄Π»ΠΎΠΆΠ΅Π½ - ΠΈ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΎΡ‚ Π²Π»Π΅Π³ΡƒΠ²Π° Π²ΠΎ Π½Π΅ΡΡ€Π΅ΡœΠ°.

АјдС Π΄Π° напишСмС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π° Π·Π° 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 Π½Π΅ Π³ΠΎ Ρ€Π΅ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΡˆΠ΅ ΠΏΠΎΠ΄ΠΎΡ‚ ΠΊΠΎΠ³Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π°Π΄ΠΌΠΈΠ½Π° 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; Π”Π 
ΠŸΡ€Π΅Π΄ ΠΏΠΎΡ˜Π°Π²Π°Ρ‚Π° Π½Π° ΠΎΠ±Π»Π°ΠΊ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅, Π»ΠΎΠ³ΠΎΠ²ΠΈΡ‚Π΅ Π±Π΅Π° ΠΏΡ€ΠΈΠΌΠ°Ρ€Π½ΠΎ срСдство Π·Π° слСдСњС ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π·Π΄Ρ€Π°Π²Ρ˜Π΅Ρ‚ΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅. Π‘Π΅ΠΏΠ°ΠΊ, нСмашС срСдства Π΄Π° сС ΠΏΡ€Π΅Π·Π΅ΠΌΠ°Ρ‚ ΠΊΠ°ΠΊΠ²ΠΈ Π±ΠΈΠ»ΠΎ ΠΊΠΎΡ€Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΌΠ΅Ρ€ΠΊΠΈ. Π”Π½Π΅Π²Π½ΠΈΡ†ΠΈΡ‚Π΅ сС сè ΡƒΡˆΡ‚Π΅ корисни ΠΈ дСнСс; Ρ‚ΠΈΠ΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС собСрат ΠΈ Π΄Π° сС испратат Π΄ΠΎ систСм Π·Π° ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΈΡ‚Π½ΠΈ ситуации ΠΈ Π΄ΠΎΠ½Π΅ΡΡƒΠ²Π°ΡšΠ΅ ΠΎΠ΄Π»ΡƒΠΊΠΈ. [Π‘Π΅Ρ‚ΠΎ ΠΎΠ²Π° моТСшС Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π±Π΅Π· ΠΎΠ±Π»Π°ΠΊ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ΠΌΠΎΠ½ΠΈΡ‚, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ со k8 стана ΠΌΠ½ΠΎΠ³Ρƒ полСсно :) – забСлСшка Π½Π° ΡƒΡ€Π΅Π΄Π½ΠΈΠΊΠΎΡ‚. ]

ДСнСс, ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΏΡ€Π°Π²Π°Ρ‚ рСчиси Π²ΠΎ Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ повСќС Π½Π΅ ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ Ρ†Ρ€Π½ΠΈ ΠΊΡƒΡ‚ΠΈΠΈ. НС, Ρ‚ΠΈΠ΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π°Π°Ρ‚ ΠΊΡ€Π°Ρ˜Π½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΡˆΡ‚ΠΎ ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°Π°Ρ‚ Π½Π° систСмитС Π·Π° слСдСњС Π΄Π° Π±Π°Ρ€Π°Π°Ρ‚ ΠΈ собираат Π²Ρ€Π΅Π΄Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°Ρ‚Π° Π½Π° процСситС Π·Π° Π΄Π° ΠΌΠΎΠΆΠ°Ρ‚ вСднаш Π΄Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π°Ρ‚ Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ. Ова сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π° ΠΌΠΎΠ΄Π΅Π» Π·Π° дизајн Π½Π° тСст Π·Π° ΠΈΠ·Π²Π΅Π΄Π±Π°, кој Π³ΠΎ слСди ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΡ‚ Π½Π° висока набљудуваност (HOP).

Kubernetes стандардно Π½ΡƒΠ΄ΠΈ 2 Ρ‚ΠΈΠΏΠ° здравствСни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ: ReadinessProbe ΠΈ livenessProbe. И Π΄Π²Π΅Ρ‚Π΅ користат исти Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (Π±Π°Ρ€Π°ΡšΠ° HTTP GET, TCP ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ). Π’ΠΈΠ΅ сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ ΠΎΠ΄Π»ΡƒΠΊΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π³ΠΈ носат ΠΊΠ°ΠΊΠΎ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ Π²ΠΎ ΠΌΠ΅ΡˆΡƒΠ½ΠΊΠΈΡ‚Π΅. livenessProbe Π³ΠΎ рСстартира ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚ со Π½Π°Π΄Π΅ΠΆ Π΄Π΅ΠΊΠ° Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° Π½Π΅ΠΌΠ° Π΄Π° сС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈ, Π° readinessProbe Π³ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π° ΠΎΠ΄ Π΄ΠΎΡ˜Π΄ΠΎΠ²Π½ΠΈΠΎΡ‚ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ сС Ρ€Π΅ΡˆΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚.

ΠŸΡ€Π°Π²ΠΈΠ»Π½ΠΈΠΎΡ‚ дизајн Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° Π΄Π²Π°Ρ‚Π° Π²ΠΈΠ΄Π° Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ Π΄Π° сС осигура Π΄Π΅ΠΊΠ° Ρ‚ΠΈΠ΅ собираат Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, особСно ΠΊΠΎΠ³Π° Π΅ исклучок. Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΡ‚Π΅ ΠΊΡ€Π°Ρ˜Π½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° API ΠΊΠΎΠΈ ΠΌΡƒ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°Π°Ρ‚ Π½Π° систСмот Π·Π° слСдСњС (ΠŸΡ€ΠΎΠΌΠ΅Ρ‚Π΅ΡƒΡ) Π²Π°ΠΆΠ½ΠΈ здравствСни ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€