Kubernetes ํŒ๊ณผ ์š”๋ น: NGINX ๋ฐ PHP-FPM์˜ ์šฐ์•„ํ•œ ์ข…๋ฃŒ ๊ธฐ๋Šฅ

Kubernetes์—์„œ CI/CD๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ์˜ ์ผ๋ฐ˜์ ์ธ ์กฐ๊ฑด: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์™„์ „ํžˆ ์ค‘์ง€๋˜๊ธฐ ์ „์— ์ƒˆ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•  ์ˆ˜ ์—†์–ด์•ผ ํ•˜๋ฉฐ, ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ธฐ์กด ์š”์ฒญ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Kubernetes ํŒ๊ณผ ์š”๋ น: NGINX ๋ฐ PHP-FPM์˜ ์šฐ์•„ํ•œ ์ข…๋ฃŒ ๊ธฐ๋Šฅ

์ด ์กฐ๊ฑด์„ ์ค€์ˆ˜ํ•˜๋ฉด ๋ฐฐํฌ ์ค‘์— ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งค์šฐ ์ธ๊ธฐ ์žˆ๋Š” ๋ฒˆ๋“ค(NGINX ๋ฐ PHP-FPM ๋“ฑ)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋ฐฐํฌํ•  ๋•Œ๋งˆ๋‹ค ์˜ค๋ฅ˜๊ฐ€ ๊ธ‰์ฆํ•˜๋Š” ์–ด๋ ค์›€์— ์ง๋ฉดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ก . ํฌ๋“œ์˜ ์ƒํ™œ ๋ฐฉ์‹

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ Pod์˜ ์ˆ˜๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ. ๊ณ ๋ ค ์ค‘์ธ ์ฃผ์ œ์˜ ๋งฅ๋ฝ์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ์‚ฌํ•ญ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ๋“œ๊ฐ€ ์ƒํƒœ์— ๋“ค์–ด๊ฐ€๋Š” ์ˆœ๊ฐ„ ์ข…๋ฃŒ ์ค‘, ์ƒˆ๋กœ์šด ์š”์ฒญ์ด ๋” ์ด์ƒ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(ํฌ๋“œ ์‚ญ์ œ๋จ ์„œ๋น„์Šค์˜ ๋์  ๋ชฉ๋ก์—์„œ). ๋”ฐ๋ผ์„œ ๋ฐฐํฌ ์ค‘ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ค‘์ง€ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์œ ์˜ˆ ๊ธฐ๊ฐ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 30 ์ดˆ: ์ดํ›„์—๋Š” Pod๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด ๊ธฐ๊ฐ„ ์ „์— ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์‹œ๊ฐ„์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์˜: 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 ํ›„ํฌ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์–ผํ• ๋ณด๋ฉด ์ด๊ฒƒ์ด ๋‘ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‘์—์„œ ์ •์ƒ์ ์ธ ์ข…๋ฃŒ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž‘์—…์€ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ •์ƒ์ ์ธ ์ข…๋ฃŒ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•„ ๋ฐฐํฌ ์ค‘์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹จ๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ ๋‘ ๊ฐ€์ง€ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

๊ด€ํ–‰. ์ •์ƒ ์ข…๋ฃŒ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ

NGINX

์šฐ์„ , ๋‹ค์Œ ์‚ฌํ•ญ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ nginx -s quit ์ฃผ๋ชฉํ• ๋งŒํ•œ ๋‹จ๊ณ„๊ฐ€ ํ•˜๋‚˜ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. NGINX๊ฐ€ SIGQUIT ์‹ ํ˜ธ ๋Œ€์‹  SIGTERM์„ ๊ณ„์† ์ „์†กํ•˜์—ฌ ์š”์ฒญ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์™„๋ฃŒ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ์‚ฌ๋ก€๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—. ์•ˆํƒ€๊น๊ฒŒ๋„ ์ด๋Ÿฌํ•œ ๋™์ž‘์˜ ๊ตฌ์ฒด์ ์ธ ์ด์œ ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. NGINX ๋ฒ„์ „์— ๋Œ€ํ•œ ์˜ํ˜น์ด ์žˆ์—ˆ์ง€๋งŒ ํ™•์ธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ฆ์ƒ์€ NGINX ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ์—์„œ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ด€์ฐฐ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. "์—ฐ๊ฒฐ 10์— ๋‚จ์•„ ์žˆ๋Š” ์—ด๋ฆฐ ์†Œ์ผ“ #5", ๊ทธ ํ›„ ํฌ๋“œ๊ฐ€ ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•„์š”ํ•œ Ingress์— ๋Œ€ํ•œ ์‘๋‹ต์—์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ํŒ๊ณผ ์š”๋ น: NGINX ๋ฐ PHP-FPM์˜ ์šฐ์•„ํ•œ ์ข…๋ฃŒ ๊ธฐ๋Šฅ
๋ฐฐํฌ ์‹œ ์ƒํƒœ ์ฝ”๋“œ ํ‘œ์‹œ๊ธฐ

์ด ๊ฒฝ์šฐ Ingress ์ž์ฒด์—์„œ 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 ์˜ค๋ฅ˜๊ฐ€ ๋” ์ด์ƒ ๊ด€์ฐฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.

๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์—์„œ ์–ด๋–ค ์ค‘์ง€ ์‹ ํ˜ธ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š”์ง€, preStop ํ›„ํฌ๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋–ค ๋ชจ์Šต์ธ์ง€ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ์ด๊ฒƒ์— ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

PHP-FPM... ๊ทธ๋ฆฌ๊ณ  ๋”

PHP-FPM์˜ ๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ข…๋ฃŒํ•˜๋ฏ€๋กœ ๋ฐฐํฌ ๋ฐ ๊ธฐํƒ€ ์ž‘์—… ์ค‘์— 502 ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 2005๋…„ ์ดํ›„๋ถ€ํ„ฐ bugs.php.net์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์—ฌ๊ธฐ์— ะธ ์—ฌ๊ธฐ์—), ์ด ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋กœ๊ทธ์—๋Š” ์•„๋ฌด ๊ฒƒ๋„ ํ‘œ์‹œ๋˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. PHP-FPM์€ ์˜ค๋ฅ˜๋‚˜ ์ œXNUMX์ž ์•Œ๋ฆผ ์—†์ด ํ”„๋กœ์„ธ์Šค ์™„๋ฃŒ๋ฅผ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

๋ฌธ์ œ ์ž์ฒด๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์— ์–ด๋Š ์ •๋„ ์˜์กดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ์—์„œ ์ž์ฒด์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๋ช…ํ™•ํžˆ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋จผ์ € ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฆ…๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ preStop ํ›„ํฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. sleep(30). ์ด๋ฅผ ํ†ตํ•ด ์ด์ „์˜ ๋ชจ๋“  ์š”์ฒญ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ํฌ๋“œ ์ดํ›„๋กœ ์ƒˆ๋กœ์šด ์š”์ฒญ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.) ์ด๋ฏธ ํ•  ์ˆ˜ ์žˆ๋Š” ์ข…๋ฃŒ ์ค‘), 30์ดˆ ํ›„์— Pod ์ž์ฒด๊ฐ€ ์‹ ํ˜ธ๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. SIGTERM.

๊ทธ๊ฒƒ์€ ๋ฐํ˜€ ๊ทธ lifecycle ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ์–‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

ํ•˜์ง€๋งŒ 30์ดˆ๋ผ๋Š” ์‹œ๊ฐ„ ๋•Œ๋ฌธ์— sleep ์šฐ๋ฆฌ ๊ฐ•ํ•˜๊ฒŒ ๊ฐ ํฌ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฏ€๋กœ ๋ฐฐํฌ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ์˜ 30์ดˆ, ๋‚˜์˜๋‹ค. ์ด์— ๋Œ€ํ•ด ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง์ ‘ ์‹คํ–‰์„ ๋‹ด๋‹นํ•˜๋Š” ๋‹น์‚ฌ์ž๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ๋Š” PHP-FPM์–ด๋Š ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.: ๋งˆ์Šคํ„ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฆ‰์‹œ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. process_control_timeout, ์ด๋Š” ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งˆ์Šคํ„ฐ์˜ ์‹ ํ˜ธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„ ์ œํ•œ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์„ 20์ดˆ๋กœ ์„ค์ •ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋Œ€๋ถ€๋ถ„์˜ ์ฟผ๋ฆฌ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋ฉฐ ์ฟผ๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋งˆ์Šคํ„ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

์ด ์ง€์‹์„ ๋ฐ”ํƒ•์œผ๋กœ ๋งˆ์ง€๋ง‰ ๋ฌธ์ œ๋กœ ๋Œ์•„๊ฐ€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด Kubernetes๋Š” ๋ชจ๋†€๋ฆฌ์‹ ํ”Œ๋žซํผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ํ†ต์‹ ์—๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. Ingress ๋ฐ ๊ธฐํƒ€ ๊ด€๋ จ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ž‘๋™์„ ๊ณ ๋ คํ•  ๋•Œ ์ด๋Š” ํŠนํžˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ ์‹œ ์ด๋Ÿฌํ•œ ์ง€์—ฐ์œผ๋กœ ์ธํ•ด 500๊ฐœ์˜ ์˜ค๋ฅ˜๊ฐ€ ๊ธ‰์ฆํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์—…์ŠคํŠธ๋ฆผ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„ ์ƒํ˜ธ ์ž‘์šฉ์˜ "์‹œ๊ฐ„ ์ง€์—ฐ"์€ XNUMX์ดˆ ๋ฏธ๋งŒ์œผ๋กœ ๋งค์šฐ ์งง์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ, ์ „์ฒด์ ์œผ๋กœ ์ด๋ฏธ ์–ธ๊ธ‰ํ•œ ์ง€์‹œ์–ด๋กœ process_control_timeout ๋‹ค์Œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. lifecycle:

lifecycle:
  preStop:
    exec:
      command: ["/bin/bash","-c","/bin/sleep 1; kill -QUIT 1"]

์ด ๊ฒฝ์šฐ ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์ง€์—ฐ์„ ๋ณด์ƒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. sleep ๋ฐฐํฌ ์‹œ๊ฐ„๋„ ํฌ๊ฒŒ ๋Š˜๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ 30์ดˆ์™€ XNUMX์ดˆ์˜ ์ฐจ์ด๊ฐ€ ๋ˆˆ์— ๋Œ๊นŒ์š”?.. ์‚ฌ์‹ค์€ 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 ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฐ๊ณผ์˜€์œผ๋ฉฐ ๋ฐฑ์—”๋“œ๋กœ ์ธํ•ด ์—ฐ๊ฒฐ๋„ ๋Š์–ด์กŒ์Šต๋‹ˆ๋‹ค(Ingress์˜ ์—ฐ๊ฒฐ์ด ์ฐจ๋‹จ๋จ).

์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๋ณด์ž process_control_timeout PHP-FPM์—์„œ๋Š” ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ์ •์ •ํ•˜์‹ญ์‹œ์˜ค. ๋‹ค์Œ ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ๋ฐฐํฌํ•˜์„ธ์š”.

Kubernetes ํŒ๊ณผ ์š”๋ น: NGINX ๋ฐ PHP-FPM์˜ ์šฐ์•„ํ•œ ์ข…๋ฃŒ ๊ธฐ๋Šฅ

500๋ฒˆ์งธ ๋ฐฐํฌ์—๋Š” ๋” ์ด์ƒ ์˜ค๋ฅ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค! ๋ฐฐํฌ๊ฐ€ ์„ฑ๊ณตํ•˜๊ณ  ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‹œ๊ฐ„ ์ง€์—ฐ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ๋น„์œจ์˜ ์˜ค๋ฅ˜์ธ Ingress ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฌธ์ œ๋ฅผ ๊ธฐ์–ตํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‚จ์€ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. sleep ๋ฐฐํฌ๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ์˜ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(์—ญ์‹œ ์˜ค๋ฅ˜ ์—†์Œ).

๊ฒฐ๋ก 

ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ช‡ ์ดˆ ์ •๋„ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์ƒˆ ์—ฐ๊ฒฐ ์ˆ˜๋ฝ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ชจ๋“  ์š”์ฒญ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์š”์ฒญ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ์—ฐ๊ฒฐ ์œ ์ง€ ์—ฐ๊ฒฐ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.
  3. ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. Kubernetes ํ˜„์‹ค์˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ช‡ ์ดˆ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‚ฌ์ „ ์ •์ง€ ํ›„ํฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ ์ ˆํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ฐฑ์—”๋“œ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์—ฐ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

NGINX์˜ ์˜ˆ์—์„œ๋Š” ์ดˆ๊ธฐ์— ์ข…๋ฃŒ ์‹ ํ˜ธ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋„ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ๋ถ„๋ช…ํžˆ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์ค‘์— 500 ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ๋” ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ๋‹จ์ผ ํฌ๋“œ๋‚˜ ์ปจํ…Œ์ด๋„ˆ์— ์ดˆ์ ์„ ๋งž์ถ”์ง€ ์•Š๊ณ  ์ „์ฒด ์ธํ”„๋ผ๋ฅผ ์ „์ฒด์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋กœ Yandex.Tank๋ฅผ ๋ชจ๋“  ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด Prometheus ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Grafana์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค). ๋ฒค์น˜๋งˆํฌ๊ฐ€ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์—์„œ๋Š” ์ •์ƒ์ ์ธ ์ข…๋ฃŒ ๋ฌธ์ œ๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚˜๋ฉฐ, ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ ์ค‘์ด๋‚˜ ํ…Œ์ŠคํŠธ ํ›„์— ์ƒํ™ฉ์„ ๋” ์ž์„ธํžˆ ๋ถ„์„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์‚ฌ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ, ์—ฌ๊ธฐ์— NGINX Ingress์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ์ฑ…์ด ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์„ ์–ธ๊ธ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ ์‹œ๋ฆฌ์ฆˆ ์ž๋ฃŒ์—์„œ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

PS

๊ธฐํƒ€ K8s ํŒ ๋ฐ ์š”๋ น ์‹œ๋ฆฌ์ฆˆ:

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€