ืขืฆื•ืช ื•ื˜ืจื™ืงื™ื ืฉืœ Kubernetes: ืชื›ื•ื ื•ืช ืฉืœ ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ื‘-NGINX ื•-PHP-FPM

ืžืฆื‘ ื˜ื™ืคื•ืกื™ ื‘ืขืช ื”ื˜ืžืขืช CI/CD ื‘-Kubernetes: ื”ืืคืœื™ืงืฆื™ื” ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืžืกื•ื’ืœืช ืœื ืœืงื‘ืœ ื‘ืงืฉื•ืช ืœืงื•ื— ื—ื“ืฉื•ืช ืœืคื ื™ ื”ืคืกืงื” ืžื•ื—ืœื˜ืช, ื•ื”ื›ื™ ื—ืฉื•ื‘, ืœื”ืฉืœื™ื ื‘ื”ืฆืœื—ื” ื‘ืงืฉื•ืช ืงื™ื™ืžื•ืช.

ืขืฆื•ืช ื•ื˜ืจื™ืงื™ื ืฉืœ Kubernetes: ืชื›ื•ื ื•ืช ืฉืœ ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ื‘-NGINX ื•-PHP-FPM

ืขืžื™ื“ื” ื‘ืชื ืื™ ื–ื” ืžืืคืฉืจืช ืœืš ืœื”ืฉื™ื’ ืืคืก ื–ืžืŸ ื”ืฉื‘ืชื” ื‘ืžื”ืœืš ื”ืคืจื™ืกื”. ืขื ื–ืืช, ื’ื ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ื—ื‘ื™ืœื•ืช ืคื•ืคื•ืœืจื™ื•ืช ืžืื•ื“ (ื›ืžื• NGINX ื•-PHP-FPM), ืืชื” ื™ื›ื•ืœ ืœื”ื™ืชืงืœ ื‘ืงืฉื™ื™ื ืฉื™ื•ื‘ื™ืœื• ืœื’ืœ ืฉืœ ืฉื’ื™ืื•ืช ื‘ื›ืœ ืคืจื™ืกื”...

ืชึตืื•ึนืจึดื™ึธื”. ืื™ืš ื”ืชืจืžื™ืœ ื—ื™

ื›ื‘ืจ ืคืจืกืžื ื• ื‘ืคื™ืจื•ื˜ ืขืœ ืžื—ื–ื•ืจ ื”ื—ื™ื™ื ืฉืœ ืชืจืžื™ืœ ืžืืžืจ ื–ื”. ื‘ื”ืงืฉืจ ืฉืœ ื”ื ื•ืฉื ื”ื ื“ื•ืŸ, ืื ื• ืžืขื•ื ื™ื™ื ื™ื ื‘ื“ื‘ืจื™ื ื”ื‘ืื™ื: ื‘ืจื’ืข ืฉื”ืคื•ื“ ื ื›ื ืก ืœืžื“ื™ื ื” ืกื™ื•ื, ื‘ืงืฉื•ืช ื—ื“ืฉื•ืช ืžืคืกื™ืงื•ืช ืœื”ื™ืฉืœื— ืืœื™ื• (pod ื”ื•ืกืจ ืžืจืฉื™ืžืช ื ืงื•ื“ื•ืช ื”ืงืฆื” ืฉืœ ื”ืฉื™ืจื•ืช). ืœืคื™ื›ืš, ื›ื“ื™ ืœืžื ื•ืข ื”ืฉื‘ืชื” ื‘ืžื”ืœืš ื”ืคืจื™ืกื”, ืžืกืคื™ืง ืœื ื• ืœืคืชื•ืจ ืืช ื‘ืขื™ื™ืช ืขืฆื™ืจืช ื”ืืคืœื™ืงืฆื™ื” ื‘ืฆื•ืจื” ื ื›ื•ื ื”.

ื›ื“ืื™ ื’ื ืœื–ื›ื•ืจ ืฉืชืงื•ืคืช ื”ื—ืกื“ ื”ืžื•ื’ื“ืจืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื”ื™ื 30 ืฉื ื™ื•ืช: ืœืื—ืจ ืžื›ืŸ, ื”ืคื•ื“ ื™ื™ืกื’ืจ ื•ื”ืืคืœื™ืงืฆื™ื” ื—ื™ื™ื‘ืช ืœื”ืกืคื™ืง ืœืขื‘ื“ ืืช ื›ืœ ื”ื‘ืงืฉื•ืช ืœืคื ื™ ืชืงื•ืคื” ื–ื•. ืฉื™ื ืœื‘: ืœืžืจื•ืช ืฉื›ืœ ื‘ืงืฉื” ืฉืœื•ืงื—ืช ื™ื•ืชืจ ืž-5-10 ืฉื ื™ื•ืช ื”ื™ื ื›ื‘ืจ ื‘ืขื™ื™ืชื™ืช, ื•ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ื›ื‘ืจ ืœื ื™ืขื–ื•ืจ ืœื”...

ื›ื“ื™ ืœื”ื‘ื™ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืžื” ืงื•ืจื” ื›ืืฉืจ ืชืจืžื™ืœ ืžืกืชื™ื™ื, ืคืฉื•ื˜ ื”ืชื‘ื•ื ืŸ ื‘ืชืจืฉื™ื ื”ื‘ื:

ืขืฆื•ืช ื•ื˜ืจื™ืงื™ื ืฉืœ Kubernetes: ืชื›ื•ื ื•ืช ืฉืœ ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ื‘-NGINX ื•-PHP-FPM

A1, B1 - ืงื‘ืœืช ืฉื™ื ื•ื™ื™ื ืœื’ื‘ื™ ืžืฆื‘ ื”ืื—
A2 - ื™ืฆื™ืื” SIGTERM
B2 - ื”ืกืจืช ืชืจืžื™ืœ ืžื ืงื•ื“ื•ืช ื”ืงืฆื”
B3 - ืงื‘ืœืช ืฉื™ื ื•ื™ื™ื (ืจืฉื™ืžืช ื ืงื•ื“ื•ืช ื”ืงืฆื” ื”ืฉืชื ืชื”)
B4 - ืขื“ื›ื•ืŸ ื›ืœืœื™ iptables

ืฉื™ืžื• ืœื‘: ืžื—ื™ืงืช ื”ืคื•ื“ ืฉืœ ื ืงื•ื“ืช ื”ืงืฆื” ื•ืฉืœื™ื—ืช SIGTERM ืœื ืžืชืจื—ืฉืช ื‘ืจืฆืฃ, ืืœื ื‘ืžืงื‘ื™ืœ. ื•ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉ-Ingress ืœื ืžืงื‘ืœืช ืžื™ื“ ืืช ื”ืจืฉื™ืžื” ื”ืžืขื•ื“ื›ื ืช ืฉืœ ื ืงื•ื“ื•ืช ื”ืงืฆื”, ื‘ืงืฉื•ืช ื—ื“ืฉื•ืช ืžืœืงื•ื—ื•ืช ื™ื™ืฉืœื—ื• ืœืคื•ื“, ืžื” ืฉื™ื’ืจื•ื ืœืฉื’ื™ืืช 500 ื‘ืžื”ืœืš ืกื™ื•ื ื”ืคื•ื“ (ืœื—ื•ืžืจ ืžืคื•ืจื˜ ื™ื•ืชืจ ื‘ื ื•ืฉื ื–ื”, ืื ื• ืžึฐืชื•ึผืจื’ึธื). ื™ืฉ ืœืคืชื•ืจ ื‘ืขื™ื” ื–ื• ื‘ื“ืจื›ื™ื ื”ื‘ืื•ืช:

  • ืฉืœื— ื—ื™ื‘ื•ืจ: ืกื’ื•ืจ ืืช ื›ื•ืชืจื•ืช ื”ืชื’ื•ื‘ื” (ืื ื–ื” ื ื•ื’ืข ืœืืคืœื™ืงืฆื™ื™ืช HTTP).
  • ืื ืœื ื ื™ืชืŸ ืœื‘ืฆืข ืฉื™ื ื•ื™ื™ื ื‘ืงื•ื“, ืื–ื™ ื”ืžืืžืจ ื”ื‘ื ืžืชืืจ ืคืชืจื•ืŸ ืฉื™ืืคืฉืจ ืœื›ื ืœื˜ืคืœ ื‘ื‘ืงืฉื•ืช ืขื“ ืชื•ื ืชืงื•ืคืช ื”ื—ืกื“.

ืชึตืื•ึนืจึดื™ึธื”. ื›ื™ืฆื“ NGINX ื•-PHP-FPM ืžืคืกื™ืงื™ื ืืช ื”ืชื”ืœื™ื›ื™ื ืฉืœื”ื

nginx

ื ืชื—ื™ืœ ืขื NGINX, ืžื›ื™ื•ื•ืŸ ืฉื”ื›ืœ ืคื—ื•ืช ืื• ื™ื•ืชืจ ื‘ืจื•ืจ ืื™ืชื•. ื›ืฉืฆื•ืœืœื™ื ืœืชื•ืš ื”ืชื™ืื•ืจื™ื”, ืื ื• ืœืžื“ื™ื ืฉืœ-NGINX ื™ืฉ ืชื”ืœื™ืš ืžืืกื˜ืจ ืื—ื“ ื•ื›ืžื” "ืขื•ื‘ื“ื™ื" - ืืœื• ื”ื ืชื”ืœื™ื›ื™ื ื™ืœื“ื™ื ื”ืžืขื‘ื“ื™ื ื‘ืงืฉื•ืช ืฉืœ ืœืงื•ื—ื•ืช. ื ื™ืชื ืช ืืคืฉืจื•ืช ื ื•ื—ื”: ืฉื™ืžื•ืฉ ื‘ืคืงื•ื“ื” nginx -s <SIGNAL> ืœืกื™ื™ื ืชื”ืœื™ื›ื™ื ื‘ืžืฆื‘ ื›ื™ื‘ื•ื™ ืžื”ื™ืจ ืื• ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™. ื‘ืจื•ืจ ืฉื”ืื•ืคืฆื™ื” ื”ืื—ืจื•ื ื” ื”ื™ื ืฉืžืขื ื™ื™ื ืช ืื•ืชื ื•.

ื•ืื– ื”ื›ืœ ืคืฉื•ื˜: ืืชื” ืฆืจื™ืš ืœื”ื•ืกื™ืฃ preStop-hook ืคืงื•ื“ื” ืฉืชืฉืœื— ืื•ืช ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™. ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ื‘ืคืจื™ืกื”, ื‘ื‘ืœื•ืง ื”ืžื›ื•ืœื”:

       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, ื™ืฉ ืงืฆืช ืคื—ื•ืช ืžื™ื“ืข. ืื ืืชื” ืžืชืžืงื“ ื‘ ืžื“ืจื™ืš ืจืฉืžื™ ืœืคื™ PHP-FPM, ื–ื” ื™ื’ื™ื“ ืฉื”ืื•ืชื•ืช POSIX ื”ื‘ืื™ื ืžืชืงื‘ืœื™ื:

  1. SIGINT, SIGTERM - ื›ื™ื‘ื•ื™ ืžื”ื™ืจ;
  2. SIGQUIT - ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ (ืžื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื).

ื”ืื•ืชื•ืช ื”ื ื•ืชืจื™ื ืื™ื ื ื ื“ืจืฉื™ื ื‘ืžืฉื™ืžื” ื–ื•, ื•ืœื›ืŸ ื ืฉืžื™ื˜ ืืช ื”ื ื™ืชื•ื— ืฉืœื”ื. ื›ื“ื™ ืœืกื™ื™ื ืืช ื”ืชื”ืœื™ืš ื‘ืฆื•ืจื” ื ื›ื•ื ื”, ืชืฆื˜ืจืš ืœื›ืชื•ื‘ ืืช ื”-preStop Hook ื”ื‘ื:

        lifecycle:
          preStop:
            exec:
              command:
              - /bin/kill
              - -SIGQUIT
              - "1"

ื‘ืžื‘ื˜ ืจืืฉื•ืŸ, ื–ื” ื›ืœ ืžื” ืฉื ื“ืจืฉ ืœื‘ื™ืฆื•ืข ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ื‘ืฉื ื™ ื”ืžื›ื•ืœื•ืช. ืขื ื–ืืช, ื”ืžืฉื™ืžื” ืงืฉื” ื™ื•ืชืจ ืžืžื” ืฉื”ื™ื ื ืจืื™ืช. ืœื”ืœืŸ ืฉื ื™ ืžืงืจื™ื ืฉื‘ื”ื ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ืœื ืขื‘ื“ ื•ื’ืจื ืœืื™ ื–ืžื™ื ื•ืช ืœื˜ื•ื•ื— ืงืฆืจ ืฉืœ ื”ืคืจื•ื™ืงื˜ ื‘ืžื”ืœืš ื”ืคืจื™ืกื”.

ืชืจื’ื•ืœ. ื‘ืขื™ื•ืช ืืคืฉืจื™ื•ืช ืขื ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™

nginx

ืงื•ื“ื ื›ืœ, ื›ื“ืื™ ืœื–ื›ื•ืจ: ื‘ื ื•ืกืฃ ืœื‘ื™ืฆื•ืข ื”ืคืงื•ื“ื” nginx -s quit ื™ืฉ ืขื•ื“ ืฉืœื‘ ืื—ื“ ืฉืฉื•ื•ื” ืœืฉื™ื ืœื‘ ืืœื™ื•. ื ืชืงืœื ื• ื‘ื‘ืขื™ื” ืฉื‘ื” NGINX ืขื“ื™ื™ืŸ ื™ืฉืœื— ืืช SIGTERM ื‘ืžืงื•ื ืืช ื”ืื•ืช SIGQUIT, ืžื” ืฉื’ื•ืจื ืœื‘ืงืฉื•ืช ืœื ืœื”ืฉืœื™ื ื›ื”ืœื›ื”. ื ื™ืชืŸ ืœืžืฆื•ื ืžืงืจื™ื ื“ื•ืžื™ื, ืœืžืฉืœ, ื›ืืŸ. ืœืจื•ืข ื”ืžื–ืœ, ืœื ื”ืฆืœื—ื ื• ืœืงื‘ื•ืข ืืช ื”ืกื™ื‘ื” ื”ืกืคืฆื™ืคื™ืช ืœื”ืชื ื”ื’ื•ืช ื–ื•: ื”ื™ื” ื—ืฉื“ ืœื’ื‘ื™ ื’ืจืกืช NGINX, ืืš ื”ื•ื ืœื ืื•ืฉืจ. ื”ืกื™ืžืคื˜ื•ื ื”ื™ื” ืฉื”ื•ื“ืขื•ืช ื ืฆืคื• ื‘ื™ื•ืžื ื™ ื”ืžื›ื•ืœื” ืฉืœ NGINX "ืคืชื— ืฉืงืข ืžืก' 10 ืฉื ื•ืชืจ ื‘ื—ื™ื‘ื•ืจ 5", ืœืื—ืจ ืžื›ืŸ ื”ืชืจืžื™ืœ ื ืขืฆืจ.

ืื ื• ื™ื›ื•ืœื™ื ืœืจืื•ืช ื‘ืขื™ื” ื›ื–ื•, ืœืžืฉืœ, ืžื”ืชื’ื•ื‘ื•ืช ื‘-Ingress ืฉืื ื• ืฆืจื™ื›ื™ื:

ืขืฆื•ืช ื•ื˜ืจื™ืงื™ื ืฉืœ Kubernetes: ืชื›ื•ื ื•ืช ืฉืœ ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ื‘-NGINX ื•-PHP-FPM
ืื™ื ื“ื™ืงื˜ื•ืจื™ื ืฉืœ ืงื•ื“ื™ ืžืฆื‘ ื‘ื–ืžืŸ ื”ืคืจื™ืกื”

ื‘ืžืงืจื” ื–ื”, ืื ื• ืžืงื‘ืœื™ื ืจืง ืงื•ื“ ืฉื’ื™ืื” 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 (ืœืžืฉืœ ื›ืืŸ ะธ ื›ืืŸ), ื”ืžืชืืจ ื‘ืขื™ื” ื–ื•. ืื‘ืœ ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉืœื ืชืจืื” ืฉื•ื ื“ื‘ืจ ื‘ื™ื•ืžื ื™ื: PHP-FPM ืชื›ืจื™ื– ืขืœ ื”ืฉืœืžืช ื”ืชื”ืœื™ืš ืฉืœื• ืœืœื ืฉื’ื™ืื•ืช ืื• ื”ื•ื“ืขื•ืช ืฆื“ ืฉืœื™ืฉื™.

ื›ื“ืื™ ืœื”ื‘ื”ื™ืจ ืฉื”ื‘ืขื™ื” ืขืฆืžื” ืขืฉื•ื™ื” ืœื”ื™ื•ืช ืชืœื•ื™ื” ื‘ืžื™ื“ื” ืคื—ื•ืชื” ืื• ื™ื•ืชืจ ื‘ืืคืœื™ืงืฆื™ื” ืขืฆืžื” ื•ืื•ืœื™ ืœื ืชืชื‘ื˜ื, ืœืžืฉืœ, ื‘ื ื™ื˜ื•ืจ. ืื ืืชื” ื ืชืงืœ ื‘ื–ื”, ืชื—ื™ืœื” ืขื•ืœื” ื‘ืจืืฉ ืคืชืจื•ืŸ ืคืฉื•ื˜: ื”ื•ืกืฃ ื•ื• PreStop ืขื sleep(30). ื–ื” ื™ืืคืฉืจ ืœืš ืœื”ืฉืœื™ื ืืช ื›ืœ ื”ื‘ืงืฉื•ืช ืฉื”ื™ื• ืงื•ื“ื ืœื›ืŸ (ื•ืื ื—ื ื• ืœื ืžืงื‘ืœื™ื ื—ื“ืฉื•ืช, ืžืื– pod ื›ื‘ืจ ืžืกื•ื’ืœ ืกื™ื•ื), ื•ืื—ืจื™ 30 ืฉื ื™ื•ืช ื”ืคื•ื“ ืขืฆืžื• ื™ืกืชื™ื™ื ื‘ืื•ืช SIGTERM.

ืžืชื‘ืจืจ ื›ื™ lifecycle ืขื‘ื•ืจ ื”ืžื™ื›ืœ ื™ื™ืจืื” ื›ืš:

    lifecycle:
      preStop:
        exec:
          command:
          - /bin/sleep
          - "30"

ืขื ื–ืืช, ื‘ืฉืœ 30 ื”ืฉื ื™ื•ืช sleep ืื ื—ื ื• ื‘ืชื•ืงืฃ ืื ื• ื ื’ื‘ื™ืจ ืืช ื–ืžืŸ ื”ืคืจื™ืกื”, ืžื›ื™ื•ื•ืŸ ืฉื›ืœ ืคื•ื“ ื™ืกืชื™ื™ื ืžื™ื ื™ืžื•ื 30 ืฉื ื™ื•ืช, ื•ื–ื” ืจืข. ืžื” ื ื™ืชืŸ ืœืขืฉื•ืช ื‘ื ื™ื“ื•ืŸ?

ื ืคื ื” ืืœ ื”ื’ื•ืจื ื”ืื—ืจืื™ ืœื‘ื™ืฆื•ืข ื™ืฉื™ืจ ืฉืœ ื”ื‘ืงืฉื”. ื‘ืžืงืจื” ืฉืœื ื• ื–ื” ื›ืŸ PHP-FPMืืฉืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืื™ื ื• ืžืคืงื— ืขืœ ื‘ื™ืฆื•ืข ืชื”ืœื™ื›ื™ ื”ืฆืืฆื ืฉืœื•: ืชื”ืœื™ืš ื”ืžืืกื˜ืจ ืžืกืชื™ื™ื ื‘ืื•ืคืŸ ืžื™ื™ื“ื™. ืืชื” ื™ื›ื•ืœ ืœืฉื ื•ืช ื”ืชื ื”ื’ื•ืช ื–ื• ื‘ืืžืฆืขื•ืช ื”ื”ื ื—ื™ื” process_control_timeout, ื”ืžืฆื™ื™ืŸ ืืช ืžื’ื‘ืœื•ืช ื”ื–ืžืŸ ืœืชื”ืœื™ื›ื™ ืฆืืฆื ืœื”ืžืชื™ืŸ ืœืื•ืชื•ืช ืžื”ืžืืกื˜ืจ. ืื ืชื’ื“ื™ืจ ืืช ื”ืขืจืš ืœ-20 ืฉื ื™ื•ืช, ื–ื” ื™ื›ืกื” ืืช ืจื•ื‘ ื”ืฉืื™ืœืชื•ืช ื”ืคื•ืขืœื•ืช ื‘ืžื™ื›ืœ ื•ื™ืขืฆื•ืจ ืืช ืชื”ืœื™ืš ื”ืžืืกื˜ืจ ืœืื—ืจ ื”ืฉืœืžืชืŸ.

ืขื ื”ื™ื“ืข ื”ื–ื”, ื‘ื•ืื• ื ื—ื–ื•ืจ ืœื‘ืขื™ื” ื”ืื—ืจื•ื ื” ืฉืœื ื•. ื›ืืžื•ืจ, Kubernetes ืื™ื ื” ืคืœื˜ืคื•ืจืžื” ืžื•ื ื•ืœื™ื˜ื™ืช: ืชืงืฉื•ืจืช ื‘ื™ืŸ ืžืจื›ื™ื‘ื™ื” ื”ืฉื•ื ื™ื ืœื•ืงื—ืช ื–ืžืŸ ืžื”. ื–ื” ื ื›ื•ืŸ ื‘ืžื™ื•ื—ื“ ื›ืืฉืจ ืื ื• ื‘ื•ื—ื ื™ื ืืช ื”ืคืขื•ืœื” ืฉืœ Ingresses ื•ืจื›ื™ื‘ื™ื ืงืฉื•ืจื™ื ืื—ืจื™ื, ืฉื›ืŸ ืขืงื‘ ืขื™ื›ื•ื‘ ื›ื–ื” ื‘ื–ืžืŸ ื”ืคืจื™ืกื” ืงืœ ืœืงื‘ืœ ื’ืœ ืฉืœ 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 ืžืฉืžืฉ ืจืง ื›"ืจืฉืช ื‘ื™ื˜ื—ื•ืŸ" ื‘ืžืงืจื” ืฉืœ ืคื™ื’ื•ืจ.

ื‘ืื•ืคืŸ ื›ืœืœื™ ื”ื”ืชื ื”ื’ื•ืช ื”ืžืชื•ืืจืช ื•ื”ืคืชืจื•ืŸ ื”ืžืชืื™ื ืœื ื—ืœื™ื ืจืง ืขืœ PHP-FPM. ืžืฆื‘ ื“ื•ืžื” ืขืœื•ืœ ืœื”ื™ื•ื•ืฆืจ ื‘ื“ืจืš ื–ื• ืื• ืื—ืจืช ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืฉืคื•ืช/ืžืกื’ืจื•ืช ืื—ืจื•ืช. ืื ืื™ื ืš ื™ื›ื•ืœ ืœืชืงืŸ ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ื‘ื“ืจื›ื™ื ืื—ืจื•ืช - ืœืžืฉืœ, ืขืœ ื™ื“ื™ ื›ืชื™ื‘ื” ืžื—ื“ืฉ ืฉืœ ื”ืงื•ื“ ื›ืš ืฉื”ืืคืœื™ืงืฆื™ื” ืชืขื‘ื“ ื ื›ื•ืŸ ืืช ืื•ืชื•ืช ืกื™ื•ื - ืชื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ืฉื™ื˜ื” ื”ืžืชื•ืืจืช. ื–ื” ืื•ืœื™ ืœื ื”ื›ื™ ื™ืคื”, ืื‘ืœ ื–ื” ืขื•ื‘ื“.

ืชืจื’ื•ืœ. ื‘ื“ื™ืงืช ืขื•ืžืก ืœื‘ื“ื™ืงืช ืคืขื•ืœืช ื”ืคื•ื“

ื‘ื“ื™ืงืช ืขื•ืžืกื™ื ื”ื™ื ืื—ืช ื”ื“ืจื›ื™ื ืœื‘ื“ื•ืง ืื™ืš ื”ืžื™ื›ืœ ืขื•ื‘ื“, ืฉื›ืŸ ื”ืœื™ืš ื–ื” ืžืงืจื‘ ืื•ืชื• ืœืชื ืื™ ืœื—ื™ืžื” ืืžื™ืชื™ื™ื ื›ืืฉืจ ืžืฉืชืžืฉื™ื ืžื‘ืงืจื™ื ื‘ืืชืจ. ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื”ื”ืžืœืฆื•ืช ืœืขื™ืœ, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ Yandex.Tankom: ื–ื” ืžื›ืกื” ืืช ื›ืœ ื”ืฆืจื›ื™ื ืฉืœื ื• ื‘ืฆื•ืจื” ืžื•ืฉืœืžืช. ืœื”ืœืŸ ื˜ื™ืคื™ื ื•ื”ืžืœืฆื•ืช ืœื‘ื™ืฆื•ืข ื‘ื“ื™ืงื•ืช ืขื ื“ื•ื’ืžื” ื‘ืจื•ืจื” ืžื ื™ืกื™ื•ื ื ื• ื”ื•ื“ื•ืช ืœื’ืจืคื™ื ืฉืœ Grafana ื•-Yandex.Tank ืขืฆืžื”.

ื”ื“ื‘ืจ ื”ื›ื™ ื—ืฉื•ื‘ ื›ืืŸ ื”ื•ื ืœื‘ื“ื•ืง ืฉื™ื ื•ื™ื™ื ืฆืขื“ ืื—ืจ ืฆืขื“. ืœืื—ืจ ื”ื•ืกืคืช ืชื™ืงื•ืŸ ื—ื“ืฉ, ื”ืคืขืœ ืืช ื”ื‘ื“ื™ืงื” ื•ื‘ื“ื•ืง ืื ื”ืชื•ืฆืื•ืช ื”ืฉืชื ื• ื‘ื”ืฉื•ื•ืื” ืœืจื™ืฆื” ื”ืื—ืจื•ื ื”. ืื—ืจืช, ื™ื”ื™ื” ืงืฉื” ืœื–ื”ื•ืช ืคืชืจื•ื ื•ืช ืœื ื™ืขื™ืœื™ื, ื•ื‘ื˜ื•ื•ื— ื”ืืจื•ืš ื–ื” ื™ื›ื•ืœ ืจืง ืœื”ื–ื™ืง (ืœืžืฉืœ, ืœื”ื’ื“ื™ืœ ืืช ื–ืžืŸ ื”ืคืจื™ืกื”).

ื ื™ื•ืื ืก ื ื•ืกืฃ ื”ื•ื ืœื”ืกืชื›ืœ ืขืœ ื™ื•ืžื ื™ ื”ืžื›ื•ืœื” ื‘ืžื”ืœืš ืกื™ื•ืžื•. ื”ืื ื ืจืฉื ืฉื ืžื™ื“ืข ืขืœ ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™? ื”ืื ื™ืฉ ืฉื’ื™ืื•ืช ื‘ื™ื•ืžื ื™ื ื‘ืขืช ื’ื™ืฉื” ืœืžืฉืื‘ื™ื ืื—ืจื™ื (ืœื“ื•ื’ืžื”, ืœืžื™ื›ืœ PHP-FPM ืกืžื•ืš)? ืฉื’ื™ืื•ืช ื‘ืืคืœื™ืงืฆื™ื” ืขืฆืžื” (ื›ืžื• ื‘ืžืงืจื” ืฉืœ NGINX ืฉืชื•ืืจ ืœืขื™ืœ)? ืื ื™ ืžืงื•ื•ื” ืฉื”ืžื™ื“ืข ื”ืžื‘ื•ื ืžืžืืžืจ ื–ื” ื™ืขื–ื•ืจ ืœืš ืœื”ื‘ื™ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืžื” ืงื•ืจื” ืœืžื™ื›ืœ ื‘ืžื”ืœืš ืกื™ื•ืžื•.

ืื–, ืจื™ืฆืช ื”ืžื‘ื—ืŸ ื”ืจืืฉื•ื ื” ื”ืชืงื™ื™ืžื” ืœืœื lifecycle ื•ืœืœื ื”ื ื—ื™ื•ืช ื ื•ืกืคื•ืช ืขื‘ื•ืจ ืฉืจืช ื”ื™ื™ืฉื•ืžื™ื (process_control_timeout ื‘-PHP-FPM). ืžื˜ืจืช ื‘ื“ื™ืงื” ื–ื• ื”ื™ื™ืชื” ืœื–ื”ื•ืช ืืช ื”ืžืกืคืจ ื”ืžืฉื•ืขืจ ืฉืœ ืฉื’ื™ืื•ืช (ื•ื”ืื ืงื™ื™ืžื•ืช). ื›ืžื• ื›ืŸ, ืžืžื™ื“ืข ื ื•ืกืฃ, ื›ื“ืื™ ืœื“ืขืช ืฉื–ืžืŸ ื”ืคืจื™ืกื” ื”ืžืžื•ืฆืข ืฉืœ ื›ืœ ืคื•ื“ ื”ื™ื” ื›-5-10 ืฉื ื™ื•ืช ืขื“ ืฉื”ื•ื ื”ื™ื” ืžื•ื›ืŸ ืœื—ืœื•ื˜ื™ืŸ. ื”ืชื•ืฆืื•ืช ื”ืŸ:

ืขืฆื•ืช ื•ื˜ืจื™ืงื™ื ืฉืœ Kubernetes: ืชื›ื•ื ื•ืช ืฉืœ ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ื‘-NGINX ื•-PHP-FPM

ืœื•ื— ื”ืžื™ื“ืข ืฉืœ Yandex.Tank ืžืฆื™ื’ ืขืœื™ื™ื” ืฉืœ 502 ืฉื’ื™ืื•ืช, ืฉื”ืชืจื—ืฉื• ื‘ื–ืžืŸ ื”ืคืจื™ืกื” ื•ื ืžืฉื›ื• ื‘ืžืžื•ืฆืข ืขื“ 5 ืฉื ื™ื•ืช. ื›ื›ืœ ื”ื ืจืื” ื–ื” ื”ื™ื” ื‘ื’ืœืœ ืฉื‘ืงืฉื•ืช ืงื™ื™ืžื•ืช ืœืคื•ื“ ื”ื™ืฉืŸ ื‘ื•ื˜ืœื• ื›ืืฉืจ ื”ื•ื ื”ื•ืคืกืง. ืœืื—ืจ ืžื›ืŸ, ื”ื•ืคื™ืขื• 503 ืฉื’ื™ืื•ืช, ืฉื”ื™ื™ืชื” ืชื•ืฆืื” ืฉืœ ืงื•ื ื˜ื™ื™ื ืจ NGINX ืฉื”ื•ืคืกืง, ืฉื’ื ื”ืคื™ืœ ื—ื™ื‘ื•ืจื™ื ื‘ื’ืœืœ ื”-backend (ืžื” ืฉืžื ืข ืž-Ingress ืœื”ืชื—ื‘ืจ ืืœื™ื•).

ื‘ื•ื ื ืจืื” ืื™ืš process_control_timeout ื‘-PHP-FPM ื™ืขื–ื•ืจ ืœื ื• ืœื—ื›ื•ืช ืœื”ืฉืœืžืช ืชื”ืœื™ื›ื™ ืฆืืฆื, ื›ืœื•ืžืจ. ืœืชืงืŸ ืฉื’ื™ืื•ืช ื›ืืœื”. ืคืจื™ืก ืžื—ื“ืฉ ื‘ืืžืฆืขื•ืช ื”ื ื—ื™ื” ื–ื•:

ืขืฆื•ืช ื•ื˜ืจื™ืงื™ื ืฉืœ Kubernetes: ืชื›ื•ื ื•ืช ืฉืœ ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ื‘-NGINX ื•-PHP-FPM

ืื™ืŸ ืขื•ื“ ืฉื’ื™ืื•ืช ื‘ืžื”ืœืš ื”ืคืจื™ืกื” ื”-500! ื”ืคืจื™ืกื” ืžื•ืฆืœื—ืช, ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ืขื•ื‘ื“.

ืขื ื–ืืช, ื›ื“ืื™ ืœื–ื›ื•ืจ ืืช ื”ื‘ืขื™ื” ื‘ืงื•ื ื˜ื™ื™ื ืจื™ื ืฉืœ Ingress, ืื—ื•ื– ืงื˜ืŸ ืฉืœ ืฉื’ื™ืื•ืช ื‘ื”ืŸ ืื ื• ืขืฉื•ื™ื™ื ืœืงื‘ืœ ืขืงื‘ ืคื™ื’ื•ืจ ื–ืžืŸ. ื›ื“ื™ ืœื”ื™ืžื ืข ืžื”ื, ื›ืœ ืžื” ืฉื ื•ืชืจ ื”ื•ื ืœื”ื•ืกื™ืฃ ืžื‘ื ื” ืื™ืชื• sleep ื•ื—ื–ื•ืจ ืขืœ ื”ืคืจื™ืกื”. ืขื ื–ืืช, ื‘ืžืงืจื” ื”ืกืคืฆื™ืคื™ ืฉืœื ื•, ืœื ื ืจืื• ืฉื™ื ื•ื™ื™ื (ืฉื•ื‘, ืœืœื ืฉื’ื™ืื•ืช).

ืžืกืงื ื”

ื›ื“ื™ ืœืกื™ื™ื ืืช ื”ืชื”ืœื™ืš ื‘ื—ืŸ, ืื ื• ืžืฆืคื™ื ืœื”ืชื ื”ื’ื•ืช ื”ื‘ืื” ืžื”ืืคืœื™ืงืฆื™ื”:

  1. ื”ืžืชืŸ ืžืกืคืจ ืฉื ื™ื•ืช ื•ืื– ื”ืคืกืง ืœืงื‘ืœ ื—ื™ื‘ื•ืจื™ื ื—ื“ืฉื™ื.
  2. ื”ืžืชืŸ ืขื“ ืฉื›ืœ ื”ื‘ืงืฉื•ืช ื™ืฉืœื™ืžื• ื•ืกื’ืจื• ืืช ื›ืœ ื—ื™ื‘ื•ืจื™ Keepalive ืฉืื™ื ื ืžื‘ืฆืขื™ื ื‘ืงืฉื•ืช.
  3. ืกื™ื™ื ืืช ื”ืชื”ืœื™ืš ืฉืœืš.

ืขื ื–ืืช, ืœื ื›ืœ ื”ื™ื™ืฉื•ืžื™ื ื™ื›ื•ืœื™ื ืœืขื‘ื•ื“ ื‘ืฆื•ืจื” ื–ื•. ืคืชืจื•ืŸ ืื—ื“ ืœื‘ืขื™ื” ื‘ืžืฆื™ืื•ืช ืฉืœ Kubernetes ื”ื•ื:

  • ื”ื•ืกืคืช ื•ื• ืœืคื ื™ ืขืฆื™ืจื” ืฉื™ื—ื›ื” ืžืกืคืจ ืฉื ื™ื•ืช;
  • ืœื•ืžื“ ืืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœ backend ืฉืœื ื• ืขื‘ื•ืจ ื”ืคืจืžื˜ืจื™ื ื”ืžืชืื™ืžื™ื.

ื”ื“ื•ื’ืžื” ืขื NGINX ืžื‘ื”ื™ืจื” ืฉืืคื™ืœื• ืืคืœื™ืงืฆื™ื” ืฉื‘ื”ืชื—ืœื” ืฆืจื™ื›ื” ืœืขื‘ื“ ืื•ืชื•ืช ืกื™ื•ื ื‘ืฆื•ืจื” ื ื›ื•ื ื” ืขืฉื•ื™ื” ืฉืœื ืœืขืฉื•ืช ื–ืืช, ื•ืœื›ืŸ ื—ื™ื•ื ื™ ืœื‘ื“ื•ืง 500 ืฉื’ื™ืื•ืช ื‘ืžื”ืœืš ืคืจื™ืกืช ื”ืืคืœื™ืงืฆื™ื”. ื–ื” ื’ื ืžืืคืฉืจ ืœื”ืกืชื›ืœ ืขืœ ื”ื‘ืขื™ื” ื‘ืฆื•ืจื” ืจื—ื‘ื” ื™ื•ืชืจ ื•ืœื ืœื”ืชืžืงื“ ื‘ืคื•ื“ ืื• ืงื•ื ื˜ื™ื™ื ืจ ื‘ื•ื“ื“, ืืœื ืœื”ืกืชื›ืœ ืขืœ ื›ืœ ื”ืชืฉืชื™ืช ื›ืžื›ืœื•ืœ.

ื›ื›ืœื™ ื‘ื“ื™ืงื”, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-Yandex.Tank ื‘ืฉื™ืœื•ื‘ ืขื ื›ืœ ืžืขืจื›ืช ื ื™ื˜ื•ืจ (ื‘ืžืงืจื” ืฉืœื ื•, ื”ื ืชื•ื ื™ื ื ืœืงื—ื• ืž-Grafana ืขื Prometheus backend ืขื‘ื•ืจ ื”ื‘ื“ื™ืงื”). ื‘ืขื™ื•ืช ืขื ื›ื™ื‘ื•ื™ ื—ื™ื ื ื™ ื ืจืื•ืช ื‘ื‘ื™ืจื•ืจ ืชื—ืช ืขื•ืžืกื™ื ื›ื‘ื“ื™ื ืฉื”ืžื“ื“ ื™ื›ื•ืœ ืœื™ืฆื•ืจ, ื•ื”ื ื™ื˜ื•ืจ ืขื•ื–ืจ ืœื ืชื— ืืช ื”ืžืฆื‘ ื‘ื™ืชืจ ืคื™ืจื•ื˜ ื‘ืžื”ืœืš ื”ื‘ื“ื™ืงื” ืื• ืื—ืจื™ื”.

ื‘ืชื’ื•ื‘ื” ืœืžืฉื•ื‘ ืขืœ ื”ืžืืžืจ: ืจืื•ื™ ืœื”ื–ื›ื™ืจ ืฉื”ื‘ืขื™ื•ืช ื•ื”ืคืชืจื•ื ื•ืช ืžืชื•ืืจื™ื ื›ืืŸ ื‘ื™ื—ืก ืœ-NGINX Ingress. ืœืžืงืจื™ื ืื—ืจื™ื, ื™ืฉื ื ืคืชืจื•ื ื•ืช ื ื•ืกืคื™ื, ืื•ืชื ืื ื• ืขืฉื•ื™ื™ื ืœืฉืงื•ืœ ื‘ื—ื•ืžืจื™ื ื”ื‘ืื™ื ืฉืœ ื”ืกื“ืจื”.

ื .ื‘.

ืื—ืจ ืžืกื“ืจืช ื”ื˜ื™ืคื™ื ื•ื”ื˜ืจื™ืงื™ื ืฉืœ K8s:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”