TL; ΠΠ
- ΠΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ Π²ΠΈΡΠΎΠΊΠ° Π·Π°Π±Π΅Π»Π΅ΠΆΠ»ΠΈΠ²ΠΎΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΡΠ΅ ΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ΅, ΡΡΡΠΏΡΠΈΡΠ΅ ΠΈ ΠΏΡΠΈΠΌΠ°ΡΠ½ΠΈΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π½Π΅ ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ.
- ΠΠ° ΠΏΠΎΠ±ΡΠ·ΠΎ Π·Π°ΠΊΡΠ΅ΠΏΠ½ΡΠ²Π°ΡΠ΅ ΠΈ Π·Π³ΠΎΠ»Π΅ΠΌΠ΅Π½Π° Π΅Π»Π°ΡΡΠΈΡΠ½ΠΎΡΡ, Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΠΡΠΈΠ½ΡΠΈΠΏΠΎΡ Π·Π° Π²ΠΈΡΠΎΠΊΠ° Π½Π°Π±ΡΡΠ΄ΡΠ²Π°Π½ΠΎΡΡ (HOP).
- ΠΠ° Π½ΠΈΠ²ΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, NOP Π±Π°ΡΠ°: ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ°ΡΠ΅, Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ ΡΠ»Π΅Π΄Π΅ΡΠ΅, ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΡΠ°Π·ΡΠΌΠ½ΠΎΡΡ ΠΈ ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ/ΡΡΠ°Π½Π·ΠΈΡΠΈΡΠ°.
- ΠΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ΅ΠΊΠΎΠ²ΠΈ ΠΊΠ°ΠΊΠΎ Π΅Π»Π΅ΠΌΠ΅Π½Ρ Π½Π° ΠΠΠ’Π ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΎΡΡΠ‘ΠΎΠ½Π΄Π° ΠΈ livenessProbe ΠΡΠ±Π΅ΡΠ½Π΅ΡΠΈΡ.
Π¨ΡΠΎ Π΅ ΡΠ°Π±Π»ΠΎΠ½ Π·Π° Π·Π΄ΡΠ°Π²ΡΡΠ²Π΅Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°?
ΠΠΎΠ³Π° Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠ° Π΅ ΠΊΡΠΈΡΠΈΡΠ½Π° Π·Π° ΠΌΠΈΡΠΈΡΠ°ΡΠ° ΠΈ ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΡΡΠ°ΠΏΠ½Π°, ΠΌΠ½ΠΎΠ³Ρ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·ΠΌΠΈΡΠ»ΡΠ²Π° Π·Π° ΡΠ°ΠΊΠΎΠ² Π°ΡΠΏΠ΅ΠΊΡ ΠΊΠ°ΠΊΠΎ ΡΠΎΠ»Π΅ΡΠ°Π½ΡΠΈΡΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ. ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΡΠ΅ ΡΠΌΠ΅ΡΠ° Π·Π° ΡΠΎΠ»Π΅ΡΠ°Π½ΡΠ½Π° Π·Π° Π³ΡΠ΅ΡΠΊΠΈ Π°ΠΊΠΎ Π±ΡΠ·ΠΎ ΡΠ΅ ΠΎΠΏΠΎΡΠ°Π²ΠΈ ΠΎΠ΄ Π΄Π΅ΡΠ΅ΠΊΡ. Π’ΠΈΠΏΠΈΡΠ½Π° ΠΎΠ±Π»Π°ΠΊ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° - ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΡΠ΅ΠΊΠΎΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠ΅ ΡΡΠ°Π²Π° Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π΅Π½ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ. Π Π·Π° Π΄Π° Π±ΠΈΠ΄Π΅ΡΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ Π΄Π΅ΠΊΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° k8s Π΅ ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΡΡΠ°ΠΏΠ½Π° ΠΊΠΎΠ³Π° Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅Ρ, ΡΡΠ΅Π±Π° Π΄Π° ΡΠ»Π΅Π΄ΠΈΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΡΠ΅ΠΌΠΈ. ΠΠ΅ΡΡ Π½ΠΈΠ² Π΅ ΠΈ Π¨Π°Π±Π»ΠΎΠ½ΠΎΡ Π·Π° Π·Π΄ΡΠ°Π²ΡΡΠ²Π΅Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°. Π’Π°Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΊΠ°ΠΊΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ° ΡΠΎ k8s Π΄Π΅ΠΊΠ° Π΅ Π·Π΄ΡΠ°Π²Π°. ΠΠ²Π° Π½Π΅ Π΅ ΡΠ°ΠΌΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° Π·Π° ΡΠΎΠ° Π΄Π°Π»ΠΈ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ° ΡΠ°Π±ΠΎΡΠΈ, ΡΡΠΊΡ ΠΈ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΠΏΡΠΈΠΌΠ° ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° Π±Π°ΡΠ°ΡΠ°ΡΠ°. ΠΠΎΠ»ΠΊΡ ΠΏΠΎΠ²Π΅ΡΠ΅ Kubernetes Π·Π½Π°Π΅ Π·Π° Π·Π΄ΡΠ°Π²ΡΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ°, ΡΠΎΠ»ΠΊΡ ΠΏΠΎΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈ ΠΎΠ΄Π»ΡΠΊΠΈ Π½ΠΎΡΠΈ Π·Π° Π½Π°ΡΠΎΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΠΈ Π±Π°Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠΎΠ²Π°ΡΠΎΡ. Π’Π°ΠΊΠ°, ΠΡΠΈΠ½ΡΠΈΠΏΠΎΡ Π·Π° Π²ΠΈΡΠΎΠΊΠ° Π½Π°Π±ΡΡΠ΄ΡΠ²Π°Π½ΠΎΡΡ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π΄Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΈ Π½Π° Π±Π°ΡΠ°ΡΠ°ΡΠ° Π½Π°Π²ΡΠ΅ΠΌΠ΅Π½ΠΎ.
ΠΡΠΈΠ½ΡΠΈΠΏ Π½Π° Π²ΠΈΡΠΎΠΊΠ° Π½Π°Π±ΡΡΠ΄ΡΠ²Π°Π½ΠΎΡΡ (HOP)
ΠΡΠΈΠ½ΡΠΈΠΏΠΎΡ Π½Π° Π²ΠΈΡΠΎΠΊΠ° Π·Π°Π±Π΅Π»Π΅ΠΆΠ»ΠΈΠ²ΠΎΡΡ Π΅ Π΅Π΄Π΅Π½ ΠΎΠ΄
ΠΠΎΠ±ΡΠΎ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½Π°ΡΠ° ΠΎΠ±Π»Π°ΠΊ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π³ΠΈ Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ° ΡΠ²ΠΎΠΈΡΠ΅ Π³Π»Π°Π²Π½ΠΈ Π½Π°ΡΡΠ°Π½ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΈ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΡΠ΅ I/O ΠΏΡΠ΅Π½ΠΎΡΠΈ STDERR ΠΈ STDOUT. Π‘Π»Π΅Π΄ΡΠ²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΡΡΠ»ΡΠ³Π°, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ filebeat, logstash ΠΈΠ»ΠΈ fluentd, Π΄ΠΎΡΡΠ°Π²ΡΠ²Π°ΡΡΠΈ Π»ΠΎΠ³ΠΎΠ²ΠΈ Π΄ΠΎ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΡΠ»Π΅Π΄Π΅ΡΠ΅ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ Prometheus) ΠΈ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ (ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ ELK). ΠΠΈΡΠ°Π³ΡΠ°ΠΌΠΎΡ ΠΏΠΎΠ΄ΠΎΠ»Ρ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° ΠΊΠ°ΠΊΠΎ Π΅Π΄Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π²ΠΎ ΠΎΠ±Π»Π°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° ΡΠΏΠΎΡΠ΅Π΄ Π¨Π΅ΠΌΠ°ΡΠ° Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π·Π΄ΡΠ°Π²ΡΠ΅ΡΠΎ ΠΈ ΠΡΠΈΠ½ΡΠΈΠΏΠΎΡ Π·Π° Π²ΠΈΡΠΎΠΊΠ° Π½Π°Π±ΡΡΠ΄ΡΠ²Π°Π½ΠΎΡΡ.
ΠΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π·Π΄ΡΠ°Π²ΡΠ΅ΡΠΎ Π²ΠΎ ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ?
ΠΠ°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΊΡΡΠΈΡΠ°ΡΠ°, k8s Π³ΠΎ ΡΠ»Π΅Π΄ΠΈ ΡΡΠ°ΡΡΡΠΎΡ Π½Π° ΠΌΠ΅ΡΡΠ½ΠΊΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΎΡΠΈΡΠ΅ (
ΠΠΎ Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, k8s Π³ΠΎ ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ°. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠΈΠΏ Π½Π° Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°, ΠΊΡΠ±Π΅Π»Π΅ΡΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½ΠΎ ΡΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ. ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ Π΄Π΅ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π΅ Π·Π°ΠΏΡΠ΅Π½, ΡΠ΅ Π³ΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°. ΠΠΊΠΎ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ ΡΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°, Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π΅ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½Π° Π΄Π° ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΡΠ²Π° ΠΏΡΠΈ ΡΠ΅ΠΊΠΎΡΠ° Π³ΡΠ΅ΡΠΊΠ°, ΡΠΎΠ³Π°Ρ Π·Π΄ΡΠ°Π²ΡΡΠ²Π΅Π½Π°ΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π΅ ΡΠ΅ ΡΡΠΎ Π²ΠΈ ΡΡΠ΅Π±Π° Π·Π° Π΄Π° Π³ΠΎ ΡΠ»Π΅Π΄ΠΈΡΠ΅ NOP ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ Π·Π° Π·Π΄ΡΠ°Π²ΡΡΠ²Π΅Π½ ΡΠ΅ΡΡ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΡΠ΅ΡΠ° Π΅ ΡΡΠΎ Π½Π΅ ΡΠ΅ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°Π°Ρ ΡΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ ΡΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, k8s Π½ΡΠ΄ΠΈ 2 ΠΏΠΎΠ΄Π»Π°Π±ΠΎΠΊΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΡΠΎ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ°:
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