CI/CD á Kubernetes ááľáĽ á˛á°áá á á¨á°ááá° áááłáĄ á áááŹá˝á áá á áá á¨ááá á ááľ á á˛áľ á¨á°áá á áĽáŤááá˝á á áááá á ááťá á áá áľ áĽá á¨ááá á áá á°áá ááŁáŽášá á á°áłáŤ áááł áá ááá á áá áľá˘
áá
áá áááł ááá á á á°á°ááŤá áľ áá áᎠááá áĽáá˛áŤáłáŠ ááá
áľáááłá. ááá ááᣠá áŁá áłáá áĽá
áá˝á (áĽáá° NGINX áĽá PHP-FPM) á áá ááá áľ áá áĽááłáᣠá áĽáŤááłááą áá°ááŤáľ áĽá áľá
á°áśá˝á á¨ááŤáľá¨áľá á˝ááŽá˝ ááŤááĽáááľ áá˝ááá˘
á˛ááŞ. ááľ áĽáá´áľ áĽáá°ááá
áá°á á˛á áľá ááľ á¨ááááľ áá°áľ á áááá á áłáľáááá˘
áĽáá˛áá ááŁáŞá á¨áĽáááł áá áááá ááľáłááľ á ááĽááľ
ááľ á˛áŤáá áá áĽáá°ááá á á á°áťá ááá¨áłáľ á¨áá¨á°ááá ááľá áááá¨áąá˘
A1, B1 - áľá ááľáá áááł áááŚá˝á ááá á
A2 - áááť SIGTERM
B2 - á¨áŤá ááĽáŚá˝ áá ááľ ááľáááľ
B3 - áááŚá˝á ááá á (á¨áá¨á¨áť ááĽáŚá˝ áááá á°áááŻá)
B4 - ᨠiptables á°ááŚá˝á áŤááá
áĽáŁááá áŤáľá°ááᥠá¨áá¨á¨áť ááĽáĽ ááľ áá°á¨á áĽá SIGTERM ááá á á
á°á á°á¨á°á á áá°ááᣠááá áá á áľáአááᢠáĽá á˘ááá¨áľ á¨á°áťáťááá á¨áá¨á¨áť ááĽáĽ áááá áá˛áŤáá áŁáááá á ᣠá¨á°áá áá˝ á¨ááᥠá áłá˛áľ áĽáŤááá˝ áá° ááľ áááŤá ᣠáá
á á ááľ ááĽá፠áá 500 áľá
á°áľ áŤáľá¨áľáá ᢠ(á áá
ááłá áá áá áá áááá áá¨á áĽá
- áááááľ ááᥠá ááá˝ áŤáľááá˝ áá (áá á¨á¤á˝á˛á˛á áá°áá áŞáŤá á¨áááá¨áľ á¨áá)á˘
- á áŽáą áá áááŚá˝á ááľá¨á á¨áááťá á¨áá á¨áááĽáá ááŁáĽá áĽáľá¨ á¸áá áá ááĽá፠áľá¨áľ áĽáŤááá˝á áááľáŹáľ á¨ááŤáľá˝áááľá áááľá áááááá˘
á˛ááŞ. NGINX áĽá PHP-FPM áá°áłá¸áá áĽáá´áľ áĽáá°ááŤáááĄ
NGINX
á NGINX áĽáááá ᣠááááŤáąá ááá ááá á¨á áá ááá áŤáá° ááá
áľáááᢠáá° ááľá ááłáĄ áľáááŁáŁ NGINX á ááľ áá áá°áľ áĽá á ááŤáł âá°áŤá°áá˝â áĽááłáá áĽáááŤáá - áĽááá
á¨á°áá á áĽáŤááá˝á á¨ááŤáľáŹáą á¨áá
áá°áśá˝ áá¸áᢠááš á ááŤá ááá§á: áľáááá á áá áá nginx -s <SIGNAL>
áá°áśá˝á á ááĽááľ á ááááľ ááá á ááŤáá á¨ááááľ áááł áŤáááĄá˘ áĽáá á¨ááľá á á¨áá¨á¨áťá á ááŤá áĽáá°áá ááá˝ ááá˘
á¨á፠ááá ááá ááá áá: áá° áá áá¨áá áŤáľáááááłá
lifecycle:
preStop:
exec:
command:
- /usr/sbin/nginx
- -s
- quit
á ááᣠááą á˛ááᣠá 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 áá áŤáá áľááááľ áááľá áá? ááá áááľ áŤáá ááááľ áĽáá´áľ áŤáľá°áááłá? áĽáľá˛ áĽáááá°áá˘
PHP-FPM
á PHP-FPM áááłáŁ áľáá˝ áŤáá° áá¨á á áᢠáľáŠá¨áľ áŤá°á¨áá
-
SIGINT
,SIGTERM
- á ááĽááľ ááááľ; -
SIGQUIT
- á¨ááŤáá ááááľ (á¨áááááá)á˘
á áá á°ááŁá ááľáĽ á¨ááŠáľ ááááśá˝ á áŤáľáááá, áľááá áľááłááŤá¸áá áĽáá°ááá. áá°áąá á áľááá áááá¨áĽáŁ á¨áá¨á°ááá á áľá ááá ááá á ááá áŤáľáááááłáá˘
lifecycle:
preStop:
exec:
command:
- /bin/kill
- -SIGQUIT
- "1"
á á áá°áá áĽááł, á áááąá ááŤáŁáá˝ ááľáĽ áááľ áŤáá ááááľ ááá¨ááá á¨ááŤáľáááá áá áĽáť áá. ááá áĽáá áĽáŤá á¨áááľáá á¨á áá á¨áŁáľ áá. á¨áá á áłá˝ á á¸á ááááľ áŤáá°áŤáŁá¸á áĽá á á°á°ááŤá áľ áá áľ ááŽáááą áá áá áá áĽááłááá áŤá°á¨ááŁá¸á áááľ ááłáŽá˝ á áá˘
á°ááááąá˘ á á¸á ááááľ ááá á¨áá˝á á˝ááŽá˝
NGINX
á ááááŞáŤ á°á¨á, ááľáłááľ á áá áá: áľáááá á¨ááľáá¸á á á°á¨á᪠nginx -s quit
áľáŠá¨áľ áá°á á á¨ááᣠá ááľ á°á¨á᪠á°á¨á á á. NGINX á ááá á¨SIGQUIT ááááľ ááá
SIGTERM á¨áááá áľ á˝áá á ááĽáááᣠáá
á áĽáŤááá˝ á áľááá áĽááłáá ááá á áľáááᢠá°ááłáłá ááłáŽá˝ ááá áá˝áá, áááłá,
áĽáá°áá á áááľ á˝ááá áá¨áľ áĽáá˝áááᣠáááłáᣠá áááááá ááá˘áŤ áá áŤááľ ááážá˝áĄ-
á áá°ááŠá áľ áá á¨áááł áŽáśá˝ á áááŤážá˝
á áá á ááŁáᣠá¨á˘ááá¨áľ áĽáŤáą 503 á¨áľá á°áľ áŽáľ áĽáť áĽááá áááᥠáá° 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 áľá á°áą á¨á áá á áá á áááłá¨áą áá.
á°ááłáłá á˝áá áŤáá áááľ, á áá áŤáááŤá ááľáĽ áá á¨ááá፠ááááľ áĽá á áá áĽáá°ááá áĽá á¨ááŹáľ ááá፠ááá áá á áľááá áá áĽáá°áááľá ááá á áá áá. ááááŤáą á áá ááľáĽ á áľááá ááá áá˝áá.
PHP-FPM... áĽá á°á¨ááŞ
á PHP-FPM áá áŤáá á˝áá á áĽááą ááááťá-á¨ááá˝ áá°áśá˝á áĽáľáŞá¨ááľ á áá áĽá
á, áŤáááŁá¸áá, ááá
á áá 502 áľá
á°áśá˝ á áá°ááŤáľ áĽá á ááá˝ áľáŤáá˝ áá á¨áá¨á°áąáľ. á¨2005 ááᎠá bugs.php.net áá á ááŤáł á¨áłá፠áŞáááśá˝ á á (áááłááĄ
á˝áአá áŤáą á áŤáą á áááŹá˝á áá á áĽááąá áá á áľáá áá፠áĽáá°áá˝á áĽá áĽáŤáąá ááŤáłá áĽáá°ááá˝á áááłá á ááľáľá ááľáĽ ááá˝ ááľá¨á á°áᢠááᢠáŤáá áá
ááááŞáŤ ááá áŤá áááľá áá° á áĽááŽá
áááŁáᥠá preStop ááá á á¨áá sleep(30)
. á¨áá
á ááľ á¨áá áŠáľá áááá áĽáŤááá˝ áĽáá˛áŤá áá
á ááá
áľáááłá (áĽá á áłá˛áśá˝á á ááá áá ᣠá¨ááľ áá ááťá ááá¨áĽ), áĽá ᨠ30 á°á¨ááľ á áá ááą áŤáą á ááááľ áŤá áá SIGTERM
.
áĽáá° áĽáááą áá lifecycle
ááŤáŁá áĽáá°áá
áááľáá
lifecycle:
preStop:
exec:
command:
- /bin/sleep
- "30"
ááá áĽáá á 30 á°á¨ááľ ááááŤáľ sleep
áĽá áá á áĽááąááľ áĽáŤááłááą ááľ áľáááá¨áĽ á¨áá°ááŤáąá áá áĽáá¨ááŤáá áá
á°á 30 á°á¨ááľ, áá
á ááĽá áá. á áá
áá áá áá°á¨á áá˝áá?
ááľáá áŤá ááĽá°á á áááá á°á áŤá áá°áá á áŤá áĽáááľá˘ á áĽá áááł áá PHP-FPM, áĽáąá á ááŁáŞááľ á¨ááá áá°áśá˝ á áááá á áááŁá ááá˘á¨ááľá°á áá°áą áá˛áŤáá ááá¨áŁá. áááŞáŤáá á°á á
áá áá
á áŁá
᪠ááá¨á áá˝ááᢠprocess_control_timeout
, áá
á á¨áá áá°áśá˝ á¨ááłá á¨ááᥠááááśá˝á ááá á á
á¨áá áá°áŚá˝á ááááťá. áĽá´áąá áá° 20 á°á¨ááľ áŤáľáááĄáľ, áá
á ááŤáŁá ááľáĽ á¨áááąáľá á áĽáááášá áĽáŤááá˝ áá¸ááá áĽá áĽáá°á¨á¨áą áááá áá°áľ áŤááá.
á áá áĽáááľ áá° áá¨á¨áťá á˝ááŤá˝á áĽááááľá˘ áĽáá°á°á áá°á, Kubernetes á ááľ áá á ááľá¨á á áá°áá: á ááľáĄ á¨á°ááŤáŠ áááá˝ ááŤá¨á áááŁáŁáľ á¨á°áá°á áá áááľáłá. á á°ááá ᨠIngresses áĽá ááá˝ á°ááá á áŤááľá á á áŤá áľááľáĽ áá áĽáááľ áá ᣠááááŤáąá á á°á°ááŠá áľ áá áĽáá°áá áŁá áááá¨áľ ááááŤáľ ᨠ500 áľá á°áśá˝á áááááľ ááá áľáááᢠáááłá ᣠáĽáŤáá áá°áá áá°áá á ááá á°á¨á áá áľá á°áľ áá¨á°áľ áá˝áá áŁááá áá á ááĽá¨ áááŽá˝ ááŤá¨á áŤáá âá¨áá áááá¨áľâ á áŁá á áá áá - á¨á ááľ á°á¨ááľ á áłá˝á˘
áľááá
, á á á
ááá áá°á á˛á á¨á°á áá°á áááŞáŤ áá process_control_timeout
ááá¨á°ááľ áááŁáłáá˝ áá áá áá˝áá lifecycle
:
lifecycle:
preStop:
exec:
command: ["/bin/bash","-c","/bin/sleep 1; kill -QUIT 1"]
á áá
á ááŁá á áľáĽáá áááá¨áąá áĽááŤáłááᢠsleep
áĽá á¨áá°ááŤáąá áá á á¨áá°á áááł á áá¨ááŠ: á 30 á°á¨ááľ áĽá á á ááľ ááŤá¨á á¨ááłá ááŠááľ á á? ... á áĽáááą, áĽáą áá. process_control_timeout
á lifecycle
á áááá¨áľ áá áĽáá° "á¨á°á
áááľ áá¨áĽ" áĽáť áĽá
á áá áááá.
á á á ááá á˛ááአáĄáĄ á¨á°ááá¸á áŁá ᪠áĽá á°ááłá áááľá á PHP-FPM áá áĽáť á áá°áá á¨áá°áŤáá˘. ááá˝ ááááá˝á/ááááá˝á á˛á áá á°ááłáłá áááł á ááľ ááá áá ááá á áá˝ááᢠááá áááľ áŤáá ááááľ á ááá˝ ááááśá˝ ááľá°áŤá¨á áŤááťá - áááłá ᣠá áááŹá˝á á¨ááá¨áŤ ááááśá˝á á áľááá áĽáá˛áŤá¨ááá áŽáąá áĽáá°áá á ááá - á¨á°ááá¸áá áá´ áá áá áá˝ááᢠá áŁá ááá áááá áá˝áá, áá áá°áŤá.
á°ááááąá˘ á¨ááłáá á á áŤá ááá¨ááἠáá¨áŤá ááŤá
áá
á á°áŤá á°á áááá˝ áŁá˘áŤáá á˛áá á áá° áĽááá°á á¨áá፠áááłáá˝ áľáááŤááá á á¨áááľ ááá°á˝ ááŤáŁá áĽáá´áľ áĽáá°áá°áŤ ááá¨ááἠá ááą ááááľ áá. á¨áá á¨á°á ááąáľá áááŽá˝ áááá¨á, áá áá áá˝áá
áĽáá á áŁá á áľáááá ááá áá áááŚá˝á á°á¨á á á°á¨á áŤá¨áááĄ. á á˛áľ áĽáá áŤá¨á á áá áá°ááá áŤááą áĽá áá¤áśáš á¨áá¨á¨áťá áŠáŤ áá á˛áááአáĽáá°á°áá¨áŠ áááá¨áąá˘ á áá áááŤ, áá¤áłá áŤááá áááľááá˝á ááá¨áľ á áľá¸á᪠áááá, áĽá á á¨á á áá ááľáĽ ááłáą áĽáť áá (áááłá, á¨áá°ááŤáąá áá áá¨ááŤá).
ááá ááŠááľ á°áá á ááá áá á¨áĽá ááŤá˘áŤ áááἠááľáłááťáá˝á áááá¨áľ áá. áľá ááá áááľ áŤáá ááááľ áá¨á áĽá፠á°áááá§á? ááá˝ ááĽááśá˝á (áááłá áá° áá¨á¤áľ áá¤á˝á-á¤ááá¤á ááŤáŁ) á˛á°ááą á áááἠááľáłááťáá˝ ááľáĽ áľá á°áśá˝ á á? á áá°áá áŞáŤá ááľáĽ áľá á°áśá˝ (á¨áá áĽáá°á°ááá¸á á NGINX áááł)? á áá á˝áá ááľáĽ áŤáá á¨ááá˘áŤ áá¨á ááŤáŁá á ááá¨áĽá áľ áá áá áĽáá°ááá á á á°áťá ááá¨áłáľ áá¨áłááłá áĽáŹ á°áľá á á°áááá.
áľááá
, á¨ááááŞáŤá á¨áá°á áŠáŤ áŤááą á°áŤááˇá lifecycle
áĽá ááá°áá áŞáŤá á áááá áŤá á°á¨á᪠áááŞáŤáá˝ (process_control_timeout
á PHP-FPM)ᢠá¨áá
áá¨áŤ á áá áááłááá á¨áľá
á°áśá˝ áĽááľ (áĽá áááŤá¸áá) ááá¨áľ ááᢠáĽáá˛áá á¨á°á¨á᪠áá¨á ááĽáŤááłááą ááľ á ááŤá á¨áá°ááŤáľ áá áá á áá ááá áĽáľáŞáá áľá¨áľ á¨5-10 á°á¨ááľ áŤá
á áĽáá°áá á ááá
á ááŚáľá˘ áá¤áśáš á¨áá¨á°ááľ áá¸ááĄ-
ᨠYandex.Tank áá¨á ááá á á°á°áŤá áľ áá á¨á°á¨á°á° áĽá á á ááŤá áĽáľá¨ 502 á°á¨ááľ á¨ááá ᨠ5 áľá
á°áśá˝á ááĽááľ áŤáłáŤá. áá
ááá á¨áťáá áá áŽáá ááľ ááŁá áĽáŤááá˝ á ááá¨áĽá áľ áá á ááá¨áĄ ááááŤáľ ááᢠá¨áá
á áá, 503 áľá
á°áśá˝ áłáá°áá, áá
á á¨ááá ᨠNGINX áŽáá´ááá áá¤áľ áá, áĽáąá á°áá á áááŁá ááááŤáľ áááááśá˝á á ááá§á (áá
á Ingress á¨áą áá áĽááłáááá áá¨áááá).
áĽáá´áľ áĽáá°áá áĽáá process_control_timeout
á PHP-FPM ááľáĽ á¨áá
áá°áśá˝á áĽáľáŞá ááá
áĽááľáá áĽá
áá¨áłáá, áááľá. áĽáá°áá
áŤá áľá
á°áśá˝á áá¨á. áá
áá áááŞáŤ á áá áá áĽáá°áá áŤá°ááŠáĄ-
á 500 áá áá°ááŤáľ áá
áľ ááá á°á¨á᪠áľá
á°áśá˝ á¨áá! áá°ááŤáą á¨á°áłáŤ ááᣠááá áááľ áŤáá á¨ááááľ áľáŤ ááá˘
ááá áá, á áá áááá¨áľ ááááŤáľ áááá áá¸á á¨ááá˝áá¸á á ááľá°á ááśá áľá
á°áśá˝ ᨠIngress áŽáá´áááŽá˝ áá áŤááá ááłá ááľáłááľ á áá áá. áĽááąá áááľáááľ, á¨áá¨áá ááá
á áá¨á áĽáť áá sleep
áĽá áá°ááŤáąá ááľáááľ. ááá ááᣠá áĽá áááłáŁ ááá áááŚá˝ á ááłáŠá (áĽáá°ááᣠááá áľá
á°áśá˝ á¨áá)á˘
áá°áá°ááŤ
áá°áąá á ááŤáá áááł áááá¨áĽáŁ á¨áá°áá áŞáŤá á¨áá¨á°ááá áŁá ᪠áĽáá áĽáááá˘
- áĽááľ á°á¨ááśá˝ áá áĽá áĽá á¨á፠á á˛áľ áááááśá˝á ááá á áŤááá˘
- ááá áĽáŤááá˝ áĽáľáŞáŤá áá á áľá¨áľ áá áĽá áĽá áááá áĽáŤááá˝á á¨ááŤáľáá˝á áááá á¨ááĽáł áááááśá˝á áááá˘
- áá°áľá á á¨ááľá˘
ááá áá, ááá áá°áá áŞáŤáá˝ á áá ááááľ áá አá áá˝áá. á áŠá áááľáľ áĽáááłáá˝ ááľáĽ áá˝áአá ááľ áááľá á¨áá¨á°áá áá-
- áĽááľ á°á¨ááśá˝ á¨áá áĽá á áľá-ááá፠ááá á áá¨áá;
- áá°áá˘á áááááá˝ á¨áá á¨ááᣠá ááááŞáŤ ááá á ááĽááľ.
ᨠNGINX áá áŤáá ááłá á ááááŞáŤ á¨ááá¨áŤ ááááśá˝á á áľááá ááŤááľ áŤáá áľ áá°áá áŞáŤ áĽááłá áá á ááŤá°áá áĽáá°áá˝á ááá˝ áŤá°ááááᣠáľááá á áááá¨áťá áá áľ 500 áľá á°áśá˝á ááá°á˝ á áŁá á áľááá ááᢠáá á°áá á˝ááŠá á áľááľ áĽáá˛ááá¨áą áĽá á á ááľ ááľ ááá áŽáá´ááá áá áĽááłáŤá°áŠáŠ áŤáľá˝áááłá, ááá áá á á ááá áá á¨á° áááśá˝á á á á ááá áááá¨áą.
áĽáá° ááá¨áŞáŤ ááłáŞáŤ Yandex.Tanká á¨ááááá á¨ááľáľá áľáááľ áá á áá°áŁá á áá áá áá˝áá (á áĽá áááł áá¨á á¨ááŤáá á¨á°áá°á°á á¨ááŽáá˛á¨áľ ááᣠááá¨áŤ áá)ᢠá á¸á ááááľ áá áŤá á˝ááŽá˝ á¤áá˝ááá á ááŤáááŠáľ á¨áŁáľ á¸ááá˝ ááľáĽ á ááá˝ á¨ááłáŠ áá¸áᣠáĽá ááľáľá á áá°á áá áľ ááá á áá áŤááá áááł á á áá ááá°áá°á áá¨áłáá˘
á á áááš áá ááá°á á á áľá°áŤá¨áľ-á˝ááŽáš áĽá áááľááá˝ áĽáá ᨠNGINX Ingress áá á¨á°áááš áááá¸áá ááĽááľ á°áᢠáá. áááá˝ ááłáŽá˝, ááá˝ áááľááá˝ á á, á áá¨á°ááľ á°á¨áłáłá ááłááśá˝ ááľáĽ ááááá¨á°á áĽáá˝ááá.
PS
á¨K8s á°á¨áłáłá áááŽá˝ áĽá áá´áá˝ ááá˝áĄ-
- ÂŤ
áĽá á¨áľá á°áľ áážá˝ á NGINX Ingress ááľáĽ "; - ÂŤ
áľá á áááá˝ áľááľá áĽá á áľá áá°áá áŞáŤ áá áľáááľ áááśá˝ "; - ÂŤ
á¨á´áŞ áŁá˘áŤáá˝ ááłá¨áť "; - ÂŤ
ááľáá á¨ááἠááłáá˝ á¨áĄáľ áá°áŞáŤá ááá á Âť.
ááá: hab.com