Kubernetes์์ CI/CD๋ฅผ ๊ตฌํํ ๋์ ์ผ๋ฐ์ ์ธ ์กฐ๊ฑด: ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ํ ์ค์ง๋๊ธฐ ์ ์ ์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์๋ฝํ ์ ์์ด์ผ ํ๋ฉฐ, ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๊ธฐ์กด ์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๋ ๊ฒ์ ๋๋ค.
์ด ์กฐ๊ฑด์ ์ค์ํ๋ฉด ๋ฐฐํฌ ์ค์ ๊ฐ๋ ์ค์ง ์๊ฐ์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋งค์ฐ ์ธ๊ธฐ ์๋ ๋ฒ๋ค(NGINX ๋ฐ PHP-FPM ๋ฑ)์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ฐฐํฌํ ๋๋ง๋ค ์ค๋ฅ๊ฐ ๊ธ์ฆํ๋ ์ด๋ ค์์ ์ง๋ฉดํ ์ ์์ต๋๋ค.
์ด๋ก . ํฌ๋์ ์ํ ๋ฐฉ์
์ฐ๋ฆฌ๋ ์ด๋ฏธ Pod์ ์๋ช
์ฃผ๊ธฐ์ ๋ํด ์์ธํ ๊ฒ์ํ์ต๋๋ค.
๊ธฐ๋ณธ ์ ์ ๊ธฐ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํฌ๋๊ฐ ์ข ๋ฃ๋๋ฉด ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ๋ ์ ์ดํดํ๋ ค๋ฉด ๋ค์ ๋ค์ด์ด๊ทธ๋จ์ ์ดํด๋ณด์ธ์.
A1, B1 - ๋๋ก ์ํ์ ๋ํ ๋ณ๊ฒฝ์ฌํญ ์์
A2 - ์ถ๋ฐ SIGTERM
B2 - ์๋ํฌ์ธํธ์์ ํฌ๋ ์ ๊ฑฐ
B3 - ๋ณ๊ฒฝ ์ฌํญ ์์ (์๋ํฌ์ธํธ ๋ชฉ๋ก์ด ๋ณ๊ฒฝ๋จ)
B4 - iptables ๊ท์น ์
๋ฐ์ดํธ
์ฐธ๊ณ : ์๋ํฌ์ธํธ ํฌ๋ ์ญ์ ๋ฐ SIGTERM ์ ์ก์ ์์ฐจ์ ์ผ๋ก ๋ฐ์ํ์ง ์๊ณ ๋ณ๋ ฌ๋ก ๋ฐ์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Ingress๊ฐ ์
๋ฐ์ดํธ๋ ์๋ํฌ์ธํธ ๋ชฉ๋ก์ ์ฆ์ ์์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์๋ก์ด ์์ฒญ์ด ํฌ๋๋ก ์ ์ก๋๋ฉฐ, ์ด๋ก ์ธํด ํฌ๋ ์ข
๋ฃ ์ค์ 500 ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. (์ด ๋ฌธ์ ์ ๋ํ ์์ธํ ๋ด์ฉ์
- ์ฐ๊ฒฐ ๋ณด๋ด๊ธฐ: ์๋ต ํค๋๋ฅผ ๋ซ์ต๋๋ค(HTTP ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ด๋ จ๋ ๊ฒฝ์ฐ).
- ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒฝ์ฐ ๋ค์ ๋ฌธ์์์๋ ์ ์ ๊ธฐ๊ฐ์ด ๋๋ ๋๊น์ง ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ์๋ฃจ์ ์ ์ค๋ช ํฉ๋๋ค.
์ด๋ก . 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
โ ์ฐ์ํ ์ข ๋ฃ(์ฐ๋ฆฌ์๊ฒ ํ์ํ ๊ฒ).
๋๋จธ์ง ์ ํธ๋ ์ด ์์ ์ ํ์ํ์ง ์์ผ๋ฏ๋ก ๋ถ์์ ์๋ตํ๊ฒ ์ต๋๋ค. ํ๋ก์ธ์ค๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ข ๋ฃํ๋ ค๋ฉด ๋ค์ preStop ํํฌ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
lifecycle:
preStop:
exec:
command:
- /bin/kill
- -SIGQUIT
- "1"
์ผํ ๋ณด๋ฉด ์ด๊ฒ์ด ๋ ์ปจํ ์ด๋ ๋ชจ๋์์ ์ ์์ ์ธ ์ข ๋ฃ๋ฅผ ์ํํ๋ ๋ฐ ํ์ํ ์ ๋ถ์ ๋๋ค. ๊ทธ๋ฌ๋ ์์ ์ ์๊ฐ๋ณด๋ค ์ด๋ ต์ต๋๋ค. ๋ค์์ ์ ์์ ์ธ ์ข ๋ฃ๊ฐ ์๋ํ์ง ์์ ๋ฐฐํฌ ์ค์ ํ๋ก์ ํธ๋ฅผ ๋จ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋ ๋ ๊ฐ์ง ์ฌ๋ก์ ๋๋ค.
๊ดํ. ์ ์ ์ข ๋ฃ ์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์
NGINX
์ฐ์ , ๋ค์ ์ฌํญ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ ์ฉํฉ๋๋ค. ๋ช
๋ น์ ์คํํ๋ ๊ฒ ์ธ์๋ nginx -s quit
์ฃผ๋ชฉํ ๋งํ ๋จ๊ณ๊ฐ ํ๋ ๋ ์์ต๋๋ค. NGINX๊ฐ SIGQUIT ์ ํธ ๋์ SIGTERM์ ๊ณ์ ์ ์กํ์ฌ ์์ฒญ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ฃ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋น์ทํ ์ฌ๋ก๋ฅผ ์ฐพ์๋ณผ ์ ์๋๋ฐ, ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์๋ฅผ ๋ค์ด, ํ์ํ Ingress์ ๋ํ ์๋ต์์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ด์ฐฐํ ์ ์์ต๋๋ค.
๋ฐฐํฌ ์ ์ํ ์ฝ๋ ํ์๊ธฐ
์ด ๊ฒฝ์ฐ 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์ ์ฌ๋ฌ ๊ฐ์ง ๋ฒ๊ทธ ๋ณด๊ณ ์๊ฐ ์์ต๋๋ค(์:
๋ฌธ์ ์์ฒด๋ ์์ฉ ํ๋ก๊ทธ๋จ ์์ฒด์ ์ด๋ ์ ๋ ์์กดํ ์ ์์ผ๋ฉฐ ๋ชจ๋ํฐ๋ง ๋ฑ์์ ์์ฒด์ ์ผ๋ก ๋ํ๋์ง ์์ ์ ์๋ค๋ ์ ์ ๋ช
ํํ ํ ํ์๊ฐ ์์ต๋๋ค. ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋จผ์ ๊ฐ๋จํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ ์ค๋ฆ
๋๋ค. ๋ค์์ ์ฌ์ฉํ์ฌ 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์๋ง ์ ์ฉ๋๋ ๊ฒ์ด ์๋๋๋ค.. ๋ค๋ฅธ ์ธ์ด/ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ๋ ๋น์ทํ ์ํฉ์ด ์ด๋ค ์์ผ๋ก๋ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ(์: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ ์ ํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋๋ก ์ฝ๋๋ฅผ ๋ค์ ์์ฑ)์ผ๋ก ์ ์์ ์ธ ์ข ๋ฃ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ ์ค๋ช ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์๋ฆ๋ต์ง๋ ์์ ์๋ ์์ง๋ง ํจ๊ณผ๊ฐ ์์ต๋๋ค.
๊ดํ. ํฌ๋์ ์๋์ ํ์ธํ๊ธฐ ์ํ ๋ถํ ํ ์คํธ
๋ถํ ํ
์คํธ๋ ์ปจํ
์ด๋๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์
๋๋ค. ์ด ์ ์ฐจ๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋ ์ค์ ์ ํฌ ์กฐ๊ฑด์ ๋ ๊ฐ๊น์์ง๊ธฐ ๋๋ฌธ์
๋๋ค. ์์ ๊ถ์ฅ ์ฌํญ์ ํ
์คํธํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ณ๊ฒฝ์ฌํญ์ ๋จ๊ณ๋ณ๋ก ํ์ธํ์ธ์.. ์ ์์ ์ฌํญ์ ์ถ๊ฐํ ํ ํ ์คํธ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๊ฐ ๋ง์ง๋ง ์คํ๊ณผ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ๋์๋์ง ํ์ธํ์ธ์. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋นํจ์จ์ ์ธ ์๋ฃจ์ ์ ์๋ณํ๊ธฐ๊ฐ ์ด๋ ค์ฐ๋ฉฐ ์ฅ๊ธฐ์ ์ผ๋ก ํด๋ฅผ ๋ผ์น ์ ์์ต๋๋ค(์: ๋ฐฐํฌ ์๊ฐ ์ฆ๊ฐ).
๋ ๋ค๋ฅธ ๋์์ค๋ ์ข ๋ฃ ์ค์ ์ปจํ ์ด๋ ๋ก๊ทธ๋ฅผ ๋ณด๋ ๊ฒ์ ๋๋ค. ์ ์ ์ข ๋ฃ์ ๋ํ ์ ๋ณด๊ฐ ๊ฑฐ๊ธฐ์ ๊ธฐ๋ก๋์ด ์๋์? ๋ค๋ฅธ ๋ฆฌ์์ค(์: ์ธ์ 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
๋ฐฐํฌ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ์ ํน๋ณํ ๊ฒฝ์ฐ์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ํ์๋์ง ์์์ต๋๋ค(์ญ์ ์ค๋ฅ ์์).
๊ฒฐ๋ก
ํ๋ก์ธ์ค๋ฅผ ์ ์์ ์ผ๋ก ์ข ๋ฃํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ค์๊ณผ ๊ฐ์ ๋์์ด ํ์ํฉ๋๋ค.
- ๋ช ์ด ์ ๋ ๊ธฐ๋ค๋ฆฐ ํ ์ ์ฐ๊ฒฐ ์๋ฝ์ ์ค์งํฉ๋๋ค.
- ๋ชจ๋ ์์ฒญ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์์ฒญ์ ์คํํ์ง ์๋ ๋ชจ๋ ์ฐ๊ฒฐ ์ ์ง ์ฐ๊ฒฐ์ ๋ซ์ต๋๋ค.
- ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์๋ํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. Kubernetes ํ์ค์ ๋ฌธ์ ์ ๋ํ ํ ๊ฐ์ง ํด๊ฒฐ์ฑ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ช ์ด ๋์ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ์ ์ ์ง ํํฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ์ ์ ํ ๋งค๊ฐ๋ณ์์ ๋ํ ๋ฐฑ์๋ ๊ตฌ์ฑ ํ์ผ์ ์ฐ๊ตฌํฉ๋๋ค.
NGINX์ ์์์๋ ์ด๊ธฐ์ ์ข ๋ฃ ์ ํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ ๊ทธ๋ ๊ฒ ํ์ง ์์ ์ ์์์ ๋ถ๋ช ํ ๋ณด์ฌ์ค๋๋ค. ๋ฐ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ์ค์ 500 ์ค๋ฅ๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ํ ์ด๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ๋ ๊ด๋ฒ์ํ๊ฒ ๋ณผ ์ ์๊ณ ๋จ์ผ ํฌ๋๋ ์ปจํ ์ด๋์ ์ด์ ์ ๋ง์ถ์ง ์๊ณ ์ ์ฒด ์ธํ๋ผ๋ฅผ ์ ์ฒด์ ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
ํ ์คํธ ๋๊ตฌ๋ก Yandex.Tank๋ฅผ ๋ชจ๋ ๋ชจ๋ํฐ๋ง ์์คํ ๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค(์ด ๊ฒฝ์ฐ ํ ์คํธ๋ฅผ ์ํด Prometheus ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ์ฌ Grafana์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ต๋๋ค). ๋ฒค์น๋งํฌ๊ฐ ์์ฑํ ์ ์๋ ๊ณผ๋ถํ ์ํ์์๋ ์ ์์ ์ธ ์ข ๋ฃ ๋ฌธ์ ๊ฐ ๋ช ํํ๊ฒ ๋ํ๋๋ฉฐ, ๋ชจ๋ํฐ๋ง์ ํตํด ํ ์คํธ ์ค์ด๋ ํ ์คํธ ํ์ ์ํฉ์ ๋ ์์ธํ ๋ถ์ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ธฐ์ฌ์ ๋ํ ํผ๋๋ฐฑ์ ๋ํ ์๋ต์ผ๋ก, ์ฌ๊ธฐ์ NGINX Ingress์ ๊ด๋ จ๋ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ์ด ์ค๋ช ๋์ด ์๋ค๋ ์ ์ ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋ค์ ์๋ฆฌ์ฆ ์๋ฃ์์ ๊ณ ๋ คํ ์ ์๋ ๋ค๋ฅธ ์๋ฃจ์ ์ด ์์ต๋๋ค.
PS
๊ธฐํ K8s ํ ๋ฐ ์๋ น ์๋ฆฌ์ฆ:
- ยซ
NGINX Ingress์ ์ฌ์ฉ์ ์ ์ ์ค๋ฅ ํ์ด์ง "; - ยซ
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ธ๋ ํ ๋น ๋ฐ ๋ก๋ ์ ๋ณด "; - ยซ
๊ฐ๋ฐ ์ฌ์ดํธ์ ๋ํ ์ก์ธ์ค "; - ยซ
๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํธ์คํธ๋ฉ ์๋ ํฅ์ ".
์ถ์ฒ : habr.com