TL;DR
- Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΌΠ΅ΡΡΠΈΠΊ ΠΌΠ°Π»ΠΎ.
- ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠ³ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΡΠΈΠ½ΡΠΈΠΏ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΠΈ (HOP, High Observability Principle).
- ΠΠ° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΠΠ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ: Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ΅ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ/ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ².
- Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΠΠ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ readinessProbe ΠΈ livenessProbe Kubernetes.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π¨Π°Π±Π»ΠΎΠ½ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ?
ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΡΠ΅ΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΈ Π²ΡΡΠΎΠΊΠΎΠ΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΎ ΡΠ°ΠΊΠΎΠΌ Π°ΡΠΏΠ΅ΠΊΡΠ΅, ΠΊΠ°ΠΊ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΡΠΌ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π±ΡΡΡΡΠΎ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΊΠ°Π·Π°. Π’ΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² β ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. Π Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° k8s Π²ΡΡΠΎΠΊΠΎΠ΄ΠΎΡΡΡΠΏΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΡΠ΅ΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ, Π½Π°Π΄ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ. Π‘ΡΠ΅Π΄ΠΈ Π½ΠΈΡ β Π¨Π°Π±Π»ΠΎΠ½ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ. ΠΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ k8s ΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ. ΠΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ pod, Π° Π΅ΡΠ΅ ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π½Π° Π½ΠΈΡ . Π§Π΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Kubernetes Π·Π½Π°Π΅Ρ ΠΎ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ pod’Π°, ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠΌΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ°ΡΠΈΠΊΠ° ΠΈ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠ΅ Π½Π°Π³ΡΡΠ·ΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΡΠΈΠ½ΡΠΈΠΏ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π° Π·Π°ΠΏΡΠΎΡΡ.
ΠΡΠΈΠ½ΡΠΈΠΏ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΠΈ (ΠΠΠ )
ΠΡΠΈΠ½ΡΠΈΠΏ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΠΈ β ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ·
ΠΡΠ°ΠΌΠΎΡΠ½ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»ΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° STDERR ΠΈ STDOUT. Π‘Π»Π΅Π΄ΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ filebeat, logstash ΠΈΠ»ΠΈ fluentd, Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Ρ Π² ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Prometheus) ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠ° ΠΆΡΡΠ½Π°Π»ΠΎΠ² (Π½Π°Π±ΠΎΡ ΠΠ ELK). ΠΠ° ΡΡ Π΅ΠΌΠ΅ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠ΅ΠΆΠ½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π¨Π°Π±Π»ΠΎΠ½ΠΎΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΈ ΠΡΠΈΠ½ΡΠΈΠΏΠΎΠΌ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΠΈ.
ΠΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π¨Π°Π±Π»ΠΎΠ½ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π² Kubernetes?
ΠΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ k8s ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ podβΠΎΠ² ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² (
Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ k8s Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ. Π ΡΡΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ kubelet ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅. Π‘ΡΠΎΠΈΡ Π΅ΠΌΡ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΡΠ°Π», ΠΈ ΠΎΠ½ Π΅Π³ΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡ. ΠΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° ΡΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π° ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅, ΡΠΎΠ³Π΄Π° Π²Π°ΠΌ Π΄Π»Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΠΠ ΠΈ Π¨Π°Π±Π»ΠΎΠ½Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ°Π»Ρ ΡΠΎΠ»ΡΠΊΠΎ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΡΡΡΠ°Π½ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠΎΠΌ. ΠΠ° ΡΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ k8s ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ 2 Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΈΡ
ΡΠΏΠΎΡΠΎΠ±Π° Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ Π² ΡΠ°Π±ΠΎΡΠ΅ pod’Π°:
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