Π’ΠΈΠΏΠΎΠ²ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ CI/CD Π² Kubernetes: ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ, Π° ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ β ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°ΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅.
Π‘ΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΡΡΠΈΡΡ Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΠΏΠ»ΠΎΡ. ΠΠ΄Π½Π°ΠΊΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
ΡΠ²ΡΠ·ΠΎΠΊ (Π²ΡΠΎΠ΄Π΅ NGINX ΠΈ PHP-FPM) ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ Π²ΡΠΏΠ»Π΅ΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Π΅ΠΏΠ»ΠΎΠ΅β¦
Π’Π΅ΠΎΡΠΈΡ. ΠΠ°ΠΊ ΠΆΠΈΠ²ΡΡ pod
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ podβΠ° ΠΌΡ ΡΠΆΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ
Π’Π°ΠΊΠΆΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ grace period ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π΅Π½
Π§ΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° pod Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΡΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡ Π΅ΠΌΡ:
Π1, B1 β ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΏΠΎΠ΄Π°
A2 β ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ SIGTERM
B2 β Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ podβΠ° ΠΈΠ· endpoints
B3 β ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ ΡΠΏΠΈΡΠΎΠΊ endpoints)
B4 β ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ» iptables
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ endpoint podβΠ° ΠΈ ΠΏΠΎΡΡΠ»ΠΊΠ° SIGTERM ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π½Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. Π ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ingress ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Endpoints Π½Π΅ ΡΡΠ°Π·Ρ, Π² pod Π±ΡΠ΄ΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ 500 ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΠΌΠΈΠ½Π°ΡΠΈΠΈ podβΠ° (Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΏΠΎ ΡΡΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΌΡ
- ΠΡΠΏΡΠ°Π²Π»ΡΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ ΠΎΡΠ²Π΅ΡΠ° Connection: close (Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ HTTP-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ).
- ΠΡΠ»ΠΈ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²Π½ΠΎΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄, ΡΠΎ Π΄Π°Π»Π΅Π΅ Π² ΡΡΠ°ΡΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π·Π°ΠΏΡΠΎΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° graceful period.
Π’Π΅ΠΎΡΠΈΡ. ΠΠ°ΠΊ NGINX ΠΈ PHP-FPM Π·Π°Π²Π΅ΡΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ
NGINX
ΠΠ°ΡΠ½Π΅ΠΌ Ρ NGINX, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ Π½ΠΈΠΌ Π²ΡΠ΅ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ. ΠΠΎΠ³ΡΡΠ·ΠΈΠ²ΡΠΈΡΡ Π² ΡΠ΅ΠΎΡΠΈΡ, ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ, ΡΡΠΎ Ρ NGINX Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΌΠ°ΡΡΠ΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Β«Π²ΠΎΡΠΊΠ΅ΡΠΎΠ²Β» β ΡΡΠΎ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ. ΠΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΡΠ΄ΠΎΠ±Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ: Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ nginx -s <SIGNAL>
Π·Π°Π²Π΅ΡΡΠ°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π»ΠΈΠ±ΠΎ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ fast shutdown, Π»ΠΈΠ±ΠΎ Π² graceful shutdown. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
ΠΠ°Π»ΡΡΠ΅ Π²ΡΡ ΠΏΡΠΎΡΡΠΎ: ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²
lifecycle:
preStop:
exec:
command:
- /usr/sbin/nginx
- -s
- quit
Π’Π΅ΠΏΠ΅ΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ podβΠ° Π² Π»ΠΎΠ³Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° NGINX ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
2018/01/25 13:58:31 [notice] 1#1: signal 3 (SIGQUIT) received, shutting down
2018/01/25 13:58:31 [notice] 11#11: gracefully shutting down
Π ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΡΠΎ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ: NGINX ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ±ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΠΏΡΠΎΡΠ΅ΠΌ, Π½ΠΈΠΆΠ΅ Π΅ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈΠ·-Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ nginx -s quit
ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ.
Π Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ Ρ NGINX Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΈ: ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΏΠΎ Π»ΠΎΠ³Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ.
ΠΠ°ΠΊ ΠΎΠ±ΡΡΠΎΡΡ Π΄Π΅Π»Π° Ρ PHP-FPM? ΠΠ°ΠΊ ΠΎΠ½ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ graceful shutdown? ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ.
PHP-FPM
Π ΡΠ»ΡΡΠ°Π΅ Ρ PHP-FPM ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅. ΠΡΠ»ΠΈ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π°
-
SIGINT
,SIGTERM
β fast shutdown; -
SIGQUIT
β graceful shutdown (ΡΠΎ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ).
ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ Π² Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΡΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡ ΡΠ°Π·Π±ΠΎΡ ΠΎΠΏΡΡΡΠΈΠΌ. ΠΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ preStop-Ρ ΡΠΊ:
lifecycle:
preStop:
exec:
command:
- /bin/kill
- -SIGQUIT
- "1"
ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΡΠΎ Π²ΡΡ, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ graceful shutdown Π² ΠΎΠ±ΠΎΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ . Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π·Π°Π΄Π°ΡΠ° ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ. ΠΠ°Π»Π΅Π΅ ΡΠ°Π·ΠΎΠ±ΡΠ°Π½Ρ Π΄Π²Π° ΡΠ»ΡΡΠ°Ρ, Π² ΠΊΠΎΡΠΎΡΡΡ graceful shutdown Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π» ΠΈ Π²ΡΠ·ΡΠ²Π°Π» ΠΊΡΠ°ΡΠΊΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΠΏΠ»ΠΎΡ.
ΠΡΠ°ΠΊΡΠΈΠΊΠ°. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ graceful shutdown
NGINX
Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ: ΠΏΠΎΠΌΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ nginx -s quit
Π΅ΡΡΡ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΡΠ°ΠΏ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° NGINX Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΠ³Π½Π°Π»Π° SIGQUIT Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ» SIGTERM, ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΡ Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°Π»ΠΈΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ. ΠΠΎΡ
ΠΎΠΆΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ ΡΠ°ΠΊΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ ΠΎΡΠ²Π΅ΡΠ°ΠΌ Π½Π° Π½ΡΠΆΠ½ΠΎΠΌ Π½Π°ΠΌ Ingressβe:
ΠΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΡΡΠ°ΡΡΡ-ΠΊΠΎΠ΄ΠΎΠ² Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π΄Π΅ΠΏΠ»ΠΎΡ
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠ°ΠΊ ΡΠ°Π· 503 ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΎΡ ΡΠ°ΠΌΠΎΠ³ΠΎ Ingress: ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ NGINX, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΡ ΡΠΆΠ΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½. ΠΡΠ»ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² Π»ΠΎΠ³ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Ρ NGINX, Π² Π½ΠΈΡ β ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
[alert] 13939#0: *154 open socket #3 left in connection 16
[alert] 13939#0: *168 open socket #6 left in connection 13
ΠΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΏ-ΡΠΈΠ³Π½Π°Π»Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ: ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°Π΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΡΡΡ 503 ΠΎΡΠΈΠ±ΠΊΠ°.
ΠΡΠ»ΠΈ Π²Ρ Π²ΡΡΡΠ΅ΡΠΈΠ»ΠΈΡΡ Ρ ΠΏΠΎΡ ΠΎΠΆΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Π΅ΡΡΡ ΡΠΌΡΡΠ» ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠΎΠΏ-ΡΠΈΠ³Π½Π°Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ ΠΈ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ preStop-Ρ ΡΠΊ. ΠΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π° ΠΊΡΠΎΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°Π· Π² ΡΡΠΎΠΌ.
PHP-FPMβ¦ ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ PHP-FPM ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ: ΠΎΠ½ Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΡΠ΅Ρ ΠΈΡ
, ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ 502-Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΠΏΠ»ΠΎΡ ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠ° bugs.php.net Ρ 2005 Π³ΠΎΠ΄Π° Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
Π‘ΡΠΎΠΈΡ ΡΡΠΎΡΠ½ΠΈΡΡ, ΡΡΠΎ ΡΠ°ΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π² ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π½Π΅ ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π΅. ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠ΅ ΠΆΠ΅ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΠ΅ΡΡ Ρ Π½Π΅ΠΉ, ΡΠΎ Π½Π° ΡΠΌ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ workaround: Π΄ΠΎΠ±Π°Π²ΠΈΡΡ preStop-Ρ
ΡΠΊ ΡΠΎ sleep(30)
. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π·Π°Π²Π΅ΡΡΠΈΡΡ Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ (Π° Π½ΠΎΠ²ΡΠ΅ ΠΌΡ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ pod ΡΠΆΠ΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Terminating), Π° ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ 30 ΡΠ΅ΠΊΡΠ½Π΄ ΡΠ°ΠΌ pod Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠΌ SIGTERM
.
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ lifecycle
Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
lifecycle:
preStop:
exec:
command:
- /bin/sleep
- "30"
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΈΠ·-Π·Π° ΡΠΊΠ°Π·Π°Π½ΠΈΡ 30-ΡΠ΅ΠΊΡΠ½Π΄Π½ΠΎΠ³ΠΎ sleep
ΠΌΡ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠΌ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΠΏΠ»ΠΎΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΡΠΉ pod Π±ΡΠ΄Π΅Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ 30 ΡΠ΅ΠΊΡΠ½Π΄, ΡΡΠΎ ΠΏΠ»ΠΎΡ
ΠΎ. Π§ΡΠΎ Ρ ΡΡΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ?
ΠΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ ΡΡΠΎΡΠΎΠ½Π΅, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ΅ΠΉ Π·Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ PHP-FPM, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ²ΠΎΠΈΡ
child-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²: ΠΌΠ°ΡΡΠ΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΡΠ΅ΡΡΡ ΡΡΠ°Π·Ρ ΠΆΠ΅. ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ process_control_timeout
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π»ΠΈΠΌΠΈΡΡ Π΄Π»Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΎΡ ΠΌΠ°ΡΡΠ΅ΡΠ° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ. ΠΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² 20 ΡΠ΅ΠΊΡΠ½Π΄, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠΊΡΠΎΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ², Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅, ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΈΡ
Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΠ΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½.
Π‘ ΡΡΠΈΠΌ Π·Π½Π°Π½ΠΈΠ΅ΠΌ Π²Π΅ΡΠ½ΡΠΌΡΡ ΠΊ Π½Π°ΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅. ΠΠ°ΠΊ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ, Kubernetes Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ: Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ ΡΠ°Π±ΠΎΡΡ IngressβΠΎΠ² ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΌΠ΅ΠΆΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠ·-Π·Π° ΡΠ°ΠΊΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π΄Π΅ΠΏΠ»ΠΎΡ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΠΏΠ»Π΅ΡΠΊ 500-Ρ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° ΠΊ upstreamβΡ, Π½ΠΎ ΡΠ°ΠΌ Β«Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π»Π°Π³Β» Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ β ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΠΊΡΠ½Π΄Ρ.
ΠΠΎΡΡΠΎΠΌΡ, Π² ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ Ρ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ process_control_timeout
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π΄Π»Ρ lifecycle
:
lifecycle:
preStop:
exec:
command: ["/bin/bash","-c","/bin/sleep 1; kill -QUIT 1"]
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡΡΠ΅ΠΌ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ sleep
ΠΈ ΡΠΈΠ»ΡΠ½ΠΎ Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΠΏΠ»ΠΎΡ: Π²Π΅Π΄Ρ Π·Π°ΠΌΠ΅ΡΠ½Π° ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ 30 ΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ ΠΈ ΠΎΠ΄Π½ΠΎΠΉ?.. ΠΠΎ ΡΡΡΠΈ Β«ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π±ΠΎΡΡΒ» Π½Π° ΡΠ΅Π±Ρ Π±Π΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ process_control_timeout
, Π° lifecycle
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π»ΠΈΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Β«ΠΏΠΎΠ΄ΡΡΡΠ°Ρ
ΠΎΠ²ΠΊΠΈΒ» Π½Π° ΡΠ»ΡΡΠ°ΠΉ Π»Π°Π³Π°.
ΠΠΎΠΎΠ±ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ workaround ΠΊΠ°ΡΠ°ΡΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ PHP-FPM. Π‘Ρ ΠΎΠΆΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π΄ΡΡΠ³ΠΈΡ Π―Π/ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ². ΠΡΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ graceful shutdown β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΎ ΡΠΈΠ³Π½Π°Π»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ, β ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ±. ΠΡΡΡΡ ΠΎΠ½ Π½Π΅ ΡΠ°ΠΌΡΠΉ ΠΊΡΠ°ΡΠΈΠ²ΡΠΉ, Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΡΠ°ΠΊΡΠΈΠΊΠ°. ΠΠ°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΡ podβΠ°
ΠΠ°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ°Π΅Ρ ΠΊ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ Π±ΠΎΠ΅Π²ΡΠΌ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌ, ΠΊΠΎΠ³Π΄Π° Π½Π° ΡΠ°ΠΉΡ Π·Π°Ρ
ΠΎΠ΄ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ. ΠΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΡ
Π²ΡΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ
Π‘Π°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ Π·Π΄Π΅ΡΡ β ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΡΠ°ΠΏΠ½ΠΎ. ΠΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΌΠΎΡΡΠΈΡΠ΅, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ Π»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΡΠΎΡΠ»ΡΠΌ Π·Π°ΠΏΡΡΠΊΠΎΠΌ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ Π²ΡΡΠ²ΠΈΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π° Π² ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π²ΠΎΠ²ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°Π²ΡΠ΅Π΄ΠΈΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΠΏΠ»ΠΎΡ).
ΠΡΡΠ³ΠΎΠΉ Π½ΡΠ°Π½Ρ β ΡΠΌΠΎΡΡΠΈΡΠ΅ Π»ΠΎΠ³ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°ΡΠΈΠΈ. Π€ΠΈΠΊΡΠΈΡΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ°ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ graceful shutdown? ΠΡΡΡ Π»ΠΈ Π² Π»ΠΎΠ³Π°Ρ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊ ΡΠΎΡΠ΅Π΄Π½Π΅ΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ PHP-FPM)? ΠΡΠΈΠ±ΠΊΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΠΊΠ°ΠΊ Π² ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΡΠ»ΡΡΠ°Π΅ Ρ NGINX)? ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π²Π²ΠΎΠ΄Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π»ΡΡΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΡΡΠΎ ΠΆΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠ°ΠΊ, ΠΏΠ΅ΡΠ²ΡΠΉ Π·Π°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΠ» Π±Π΅Π· lifecycle
ΠΈ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (process_control_timeout
Π² PHP-FPM). Π¦Π΅Π»ΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° Π±ΡΠ»ΠΎ Π²ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΎΡΠΈΠ±ΠΎΠΊ (ΠΈ Π΅ΡΡΡ Π»ΠΈ ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅). Π’Π°ΠΊΠΆΠ΅ ΠΈΠ· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π½Π°ΡΡ, ΡΡΠΎ ΡΡΠ΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΠΏΠ»ΠΎΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π° ΡΠΎΡΡΠ°Π²Π»ΡΠ»ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 5-10 ΡΠ΅ΠΊΡΠ½Π΄ Π΄ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΠΉ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ°ΠΊΠΎΠ²Ρ:
ΠΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Π―Π½Π΄Π΅ΠΊΡ.Π’Π°Π½ΠΊΠ° Π²ΠΈΠ΄Π΅Π½ Π²ΡΠΏΠ»Π΅ΡΠΊ 502 ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π΄Π΅ΠΏΠ»ΠΎΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΡΡ Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ Π΄ΠΎ 5 ΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π°Π»ΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΊ ΡΡΠ°ΡΠΎΠΌΡ podβΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π»ΡΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ 503 ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΡΠΎ ΡΡΠ°Π»ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° NGINX, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΠΎΡΠ²Π°Π» ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈΠ·-Π·Π° Π±ΡΠΊΠ΅Π½Π΄Π° (ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ ΠΊ Π½Π΅ΠΌΡ Π½Π΅ ΡΠΌΠΎΠ³ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ Ingress).
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ process_control_timeout
Π² PHP-FPM ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΌ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ child-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², Ρ.Π΅. ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠΎΠ²ΡΠΎΡΠ½ΡΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΡΠΆΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ:
ΠΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΠΏΠ»ΠΎΡ 500-Ρ
ΠΎΡΠΈΠ±ΠΎΠΊ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ! ΠΠ΅ΠΏΠ»ΠΎΠΉ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, graceful shutdown ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎΠΈΡ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ Ingress-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ, Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΡΠ΅Π½Ρ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΊΠΎΡΠΎΡΡΡ
ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ·-Π·Π° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π»Π°Π³Π°. Π§ΡΠΎΠ±Ρ ΠΈΡ
ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ, ΠΎΡΡΠ°Π΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠΎ sleep
ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ Π΄Π΅ΠΏΠ»ΠΎΠΉ. ΠΠΏΡΠΎΡΠ΅ΠΌ, Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅ Π±ΡΠ»ΠΎ Π²ΠΈΠ΄Π½ΠΎ (ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠ½ΠΎΠ²Π° Π½Π΅Ρ).
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ:
- ΠΠΆΠΈΠ΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
- ΠΠΎΠΆΠ΄Π°ΡΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ Π·Π°ΠΊΡΡΡΡ Π²ΡΠ΅ keepalive-ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ.
- ΠΠ°Π²Π΅ΡΡΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.
ΠΠ΄Π½Π°ΠΊΠΎ Π½Π΅ Π²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΌΠ΅ΡΡ ΡΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΡΠ΅Π°Π»ΠΈΡΡ Kubernetes ΡΠ²Π»ΡΠ΅ΡΡΡ:
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΡΠΊΠ° pre-stop, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄;
- ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π½Π°ΡΠ΅Π³ΠΎ Π±ΡΠΊΠ΅Π½Π΄Π° Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
ΠΡΠΈΠΌΠ΅Ρ Ρ NGINX ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΈΠ³Π½Π°Π»Ρ ΠΊ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ 500 ΠΎΡΠΈΠ±ΠΎΠΊ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΠΏΠ»ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΈΡΠ΅ ΠΈ Π½Π΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ podβΠ΅ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅, Π° ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° Π²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π² ΡΠ΅Π»ΠΎΠΌ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π―Π½Π΄Π΅ΠΊΡ.Π’Π°Π½ΠΊ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ Π»ΡΠ±ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ ΡΠ΅ΡΡΠ° Π±ΡΠ°Π»ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Grafana Ρ Π±ΡΠΊΠ΅Π½Π΄ΠΎΠΌ Π² Π²ΠΈΠ΄Π΅ Prometheus). ΠΡΠΎΠ±Π»Π΅ΠΌΡ Ρ graceful shutdown Ρ ΠΎΡΠΎΡΠΎ Π²ΠΈΠ΄Π½Ρ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΈΡ Π½Π°Π³ΡΡΠ·ΠΊΠ°Ρ , ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ benchmark, Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π΄Π΅ΡΠ°Π»ΡΠ½Π΅Π΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΡΡΠ°.
ΠΡΠ²Π΅ΡΠ°Ρ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠ²ΡΠ·Ρ ΠΏΠΎ ΡΡΠ°ΡΡΠ΅: ΡΡΠΎΠΈΡ ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ ΠΏΡΡΠΈ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π΄Π΅ΡΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ NGINX Ingress. ΠΠ»Ρ Π΄ΡΡΠ³ΠΈΡ ΡΠ»ΡΡΠ°Π΅Π² Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°Ρ ΡΠΈΠΊΠ»Π°.
P.S.
ΠΡΡΠ³ΠΎΠ΅ ΠΈΠ· ΡΠΈΠΊΠ»Π° K8s tips & tricks:
- Β«
ΠΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π² NGINX Ingress Β»; - Β«
Π Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠ·Π»ΠΎΠ² ΠΈ ΠΎ Π½Π°Π³ΡΡΠ·ΠΊΠ°Ρ Π½Π° Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Β»; - Β«
ΠΠΎΡΡΡΠΏ ΠΊ dev-ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ°ΠΌ Β»; - Β«
Π£ΡΠΊΠΎΡΡΠ΅ΠΌ bootstrap Π±ΠΎΠ»ΡΡΠΈΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com