์๋ ํ์ธ์ ๊ตฌ๋ ์๋, DevOps ์์๊ณผ ๊ธฐ์ ์ง์์ ์ ๋ฆฌํด์ ๊ณต์ ํด๋๋ฆฌ๋ DevOps ์ฌํ์ ์ํ ์์์ง์ ๋๋ค.
โ๏ธKubernetes ์ปจํ ์ด๋ ๋์์ธ ํจํด์ด๋?
๋์์ธ ํจํด์ ์ํํธ์จ์ด๋ฅผ ๋์์ธํ๋ ๊ณผ์ ์์ ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ ๋ํ ์ผ๋ฐ์ ์ธ ํด๊ฒฐ์ฑ ์ ์๋ฏธํฉ๋๋ค. ์ํํธ์จ์ด ๊ฐ๋ฐ ์ค์ ์์ฃผ ๋ง์ฃผ์น๋ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์์ง ์ ํ๋ณ๋ก ์ ๋ฆฌ๋ ๋์์ธ ํจํด์, ํนํ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ํด ๊ณ ์๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ๋ฐ์.
์ ํต์ ์ธ ์ํํธ์จ์ด ๊ฐ๋ฐ๋ฟ๋ง ์๋๋ผ, ์ปจํ ์ด๋ ํํ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ๋ ์ฌ์ฉํ ์ ์๋ ๋์์ธ ํจํด๋ ์๋ค๋ ์ฌ์ค, ์๊ณ ๊ณ์ จ๋์?
๊ทธ๋์ ์ค๋์, Kubernetes์์ ์ปจํ ์ด๋๋ฅผ ๋ฐฐํฌํ ๋ ํ์ฉ ๊ฐ๋ฅํ ๋ํ์ ์ธ ์ปจํ ์ด๋ ๋์์ธ ํจํด 4๊ฐ์ง๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.
๐์ปจํ ์ด๋ ๋์์ธ ํจํด ์์๋ณด๊ธฐ
์ฌ์ด๋์นด(Sidecar) ํจํด
์ฌ์ด๋์นด ํจํด์ ๊ธฐ์กด์ ์กด์ฌํ๋ ์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋๋ฅผ ์์ ํ์ง ์์ผ๋ฉด์๋, ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๊ฑฐ๋ ๋ชจ๋ํฐ๋ง๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๋ณ๋๋ก ์ถ๊ฐํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋๋ฐ์.
Kubernetes์ Pod ๋ด๋ถ์ ๊ธฐ์กด ์ปจํ ์ด๋ ์ธ๋ก ํ์ํ ๊ธฐ๋ฅ์ ์ํํ๋ ์ปจํ ์ด๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ด๋์นด ํจํด์ ๊ตฌํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์น์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋๊ฐ ๋์ ์ค์ธ Pod ๋ด์ ๋ก๊ทธ ์์ง๊ธฐ fluentd๋ฅผ ๋ณ๋ ์ปจํ ์ด๋๋ก ์ถ๊ฐํ ๋ค์, ๊ธฐ์กด์ ๋์ํ๋ ์น์๋ฒ์ ๋ก๊ทธ๋ฅผ fluentd ์ปจํ ์ด๋์์ ์์งํ๋ ์์ด์ฃ .
์ฐ๋ฐฐ์๋(Ambassador) ํจํด
์ฐ๋ฐฐ์๋ ํจํด์ Kubernetes์ ๋ฐฐํฌ๋ ์ปจํ ์ด๋์ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์ ๋ดํ๋ ๋ณ๋์ ์ปจํ ์ด๋๋ฅผ ๋๋ ํจํด์ธ๋ฐ์. ์ด ํจํด์ ์ ์ฉํ๋ฉด, ๋ณต์กํ ๋คํธ์ํฌ ํต์ ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๋ณ๋์ ์ปจํ ์ด๋๋ก ๋นผ๋ด๊ณ , ๊ธฐ์กด ์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณธ๋ ์ํํด์ผ ํ๋ ํต์ฌ ๊ธฐ๋ฅ์๋ง ์ง์คํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
๊ทธ๋์ ์ฐ๋ฐฐ์๋ ํจํด์ผ๋ก ์ถ๊ฐํ ์ปจํ ์ด๋๋ฅผ ํ๋ก์(Proxy) ์ปจํ ์ด๋๋ผ๊ณ ๋ ํ๋๋ฐ์. ์ธ๋ถ ํ๊ฒฝ๊ณผ ๋ด๋ถ ์๋ฒ ์ฌ์ด์์ ํต์ ์ด ์ค๊ณ ๊ฐ ์ ์๋ ๊ฐ๊ต ์ญํ ์ ํ๋ ํ๋ก์ ์๋ฒ์ ๋น์ทํ๊ฒ ๋์ํด์ ๊ทธ๋ ์ต๋๋ค.
Kubernetes ํ๊ฒฝ์์ ์ฐ๋ฐฐ์๋ ํจํด ๊ตฌํ์ด ๊ฐ๋ฅํ ์ด์ ๋, ๋์ผํ Pod ๋ด์์ ๋์ํ๋ ์ปจํ ์ด๋๋ ์๋ก Localhost๋ก ํต์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
HTTP ์น์๋ฒ๋ก ์์ฃผ ์ฌ์ฉ๋๋ Nginx๋ ์ฐ๋ฐฐ์๋ ํจํด์ผ๋ก ์ถ๊ฐํํ๊ธฐ ์ข์ ์ ํ๋ฆฌ์ผ์ด์ ์ค ํ๋์ ๋๋ค.
์ด๋ํฐ(Adapter) ํจํด
์ธ๋ถ์์ ์ฐ๊ฒฐ์ ๋ณ๋์ ์ปจํ ์ด๋์์ ์ ๋ดํ์ฌ ๊ฐ์ํ์ํค๋ ์ฐ๋ฐฐ์๋ ํจํด๊ณผ๋ ๋ฌ๋ฆฌ, ์ด๋ํฐ ํจํด์ ๊ธฐ์กด ์ปจํ ์ด๋๊ฐ ์ธ๋ถ๋ก ๋ณด๋ด๋ ๊ฒฐ๊ณผ๋ฌผ์ ํต์ผํํ๋ ๋ฐ์ ํ์ฉ๋ฉ๋๋ค.
ํนํ ์ด๋ํฐ ํจํด์ ๋ชจ๋ํฐ๋ง์ ์ํด ์ธ๋ถ ์๋น์ค์ ์ฐ๋ํ ๋ ์ธ๋ถ ์๋น์ค์์ ์๊ตฌํ๋ ์์์ด๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง์ถ๊ธฐ ์ํด ์ฌ์ฉ๋๋๋ฐ์. ๊ธฐ์กด์ ์ปจํ ์ด๋๋ ๊ทธ๋๋ก ๋๋ฉด์, ์ปจํ ์ด๋์์ ๋์ค๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ธ๋ถ ๊ท๊ฒฉ์ ๋ง์ถ๋ ๋ณ๋์ ์ปจํ ์ด๋๋ฅผ ๋์ผํ Pod ๋ด์ ๋๋ ๋ฐฉ์์ผ๋ก ์ด๋ํฐ ํจํด์ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ง์ฝ ์ปจํ ์ด๋๋ก ๋์ ์ค์ธ ๋ก๊ทธ ๋ฐ์ดํฐ ์ ์ฅ์ Elasticsearch์ ์ํ์ ๊ด๋ จ๋ ๋ก๊ทธ๋ฅผ ์ธ๋ถ ๋ชจ๋ํฐ๋ง ํด Prometheus ์๋น์ค์ ์ ์ฅํด์ผ ํ๋ค๋ฉด, ๋์ผํ Pod์ ๋ณ๋์ Prometheus Exporter ์ปจํ ์ด๋๋ฅผ ์ถ๊ฐํ์ฌ Prometheus ๊ท๊ฒฉ์ ๋ง๋ Elasticsearch์ ์ํ ๋ก๊ทธ๋ฅผ ๋ด๋ณด๋ผ ์ ์๋ ๊ฒ์ด์ฃ .
์ด๊ธฐํ ์ปจํ ์ด๋(Init Container) ํจํด
์ด๊ธฐํ ์ปจํ ์ด๋ ํจํด์ ๊ธฐ์กด ์ปจํ ์ด๋๊ฐ ์คํ๋๊ธฐ ์ ์ ํ์ํ ์์ ์ ๋ณ๋์ ์ปจํ ์ด๋์์ ์ํํ๋ ๋์์ธ ํจํด์ ๋๋ค.
Kubernetes์์ Pod์ ์คํ์ ์ ์ํ๋ Manifest์์ 'initContainers'๋ผ๋ ํ๋๋ก ์ด๊ธฐํ ์ปจํ ์ด๋ ํจํด์ ์ ์์ผ๋ก ์ง์ํ๊ณ ์๋๋ฐ์.
์๋ฅผ ๋ค์ด ๊ธฐ์กด ์ปจํ ์ด๋์ Elasticsearch ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ๋ ค๋ฉด '/usr/share' ๋ด ํด๋์ ์์ ๊ถ์ ๋ค๋ฅธ ์ฌ์ฉ์๋ก ๋ฐ๊ฟ์ผ ํ๋ ๊ฒฝ์ฐ, ๋ณ๋์ ์ด๊ธฐํ ์ปจํ ์ด๋์์ ํด๋น ์์ ์ ์ํํ ๋ค์ Elasticsearch ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์๋ ๊ฒ๋๋ค.
๐ญ๋ง์น๋ฉฐ...
์ด๋ฒ ์์์ง์์๋ ๋์์ธ ํจํด ํน์ง์ผ๋ก Kubernetes์์ ํ์ฉ ๊ฐ๋ฅํ ๋ํ์ ์ธ ์ปจํ ์ด๋ ๋์์ธ ํจํด 4๊ฐ์ง๋ฅผ ์ดํด๋ดค๋๋ฐ์.
ํน์ ์ด๋ฒ ๋ด์ฉ ๊ด๋ จํด์ ๋ ๊ถ๊ธํ ์ ์ด ์์ผ์๋ค๋ฉด ์๋ ๋ฉ์ผ๋ฆฌ ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์.๐
๊ทธ๋ผ, ๋ค์ ์์์ง์์ ๋ณด๋ค ์์ฐจ๊ณ ํฅ๋ฏธ๋ก์ด ๋ด์ฉ์ผ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค.
์ค๋๋ ๊ฐ์ฌํฉ๋๋ค, ๊ตฌ๋ ์๋ ๐บ
๐References
์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ธ์