Kubeadm - 100-hours-a-week/9-team-Devths-WIKI GitHub Wiki

๋ชฉ์ฐจ (ํŽผ์น˜๊ธฐ/์ ‘๊ธฐ)

1. ๋„์ž… ๋ฐฐ๊ฒฝ ๋ฐ ๊ฐ€์„ค: ์™œ Kubernetes(Kubeadm)์ธ๊ฐ€

Devths ์„œ๋น„์Šค๋Š” ๊ฐœ์ธ ํฌํŠธํด๋ฆฌ์˜ค ๊ธฐ๋ฐ˜ ์ฑ„์šฉ ํ”Œ๋žซํผ์œผ๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ, ์ฑ„ํŒ…, AI ์ฑ—๋ด‡, ์บ˜๋ฆฐ๋” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ๋‹ค์ˆ˜์˜ ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋จ.

์ดˆ๊ธฐ์—๋Š” Docker ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค์™€ AWS Auto Scaling Group์„ ํ™œ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ๋‹จ์œ„ ํ™•์žฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์กฐ(V2)๋กœ ์šด์˜ํ•จ.

๊ทธ๋Ÿฌ๋‚˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…๊ณผ AI ์ถ”๋ก ์ด ๊ฒฐํ•ฉ๋œ ์„œ๋น„์Šค ํŠน์„ฑ์ƒ ํŠธ๋ž˜ํ”ฝ ์ŠคํŒŒ์ดํฌ ๋Œ€์‘, ๋ฐฐํฌ ์•ˆ์ •์„ฑ, ๋ฆฌ์†Œ์Šค ํšจ์œจ์„ฑ ์ธก๋ฉด์—์„œ ์ธํ”„๋ผ ๊ตฌ์กฐ์  ํ•œ๊ณ„๊ฐ€ ๋ฐœ์ƒํ•จ.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ ๋‹จ์œ„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ์ธ Kubernetes๋ฅผ ๋„์ž…ํ•˜๊ณ , kubeadm ๊ธฐ๋ฐ˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง์ ‘ ๊ตฌ์ถ•ํ•˜์—ฌ ์„œ๋น„์Šค ํ™•์žฅ์„ฑ๊ณผ ์šด์˜ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•จ.


1.1 ASG ๊ธฐ๋ฐ˜ ๋ถ„๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค(V2) ํ™˜๊ฒฝ์˜ ํ•œ๊ณ„

๊ธฐ์กด ์ธํ”„๋ผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์šด์˜๋จ.

  • Frontend (Next.js)
  • Backend API (Spring Boot)
  • Chat Server (WebSocket)
  • AI API (FastAPI /)

๊ฐ ์„œ๋น„์Šค๋Š” ๋…๋ฆฝ์ ์ธ EC2 Auto Scaling Group์œผ๋กœ ์šด์˜๋˜์–ด ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์‹œ ์ธ์Šคํ„ด์Šค ๋‹จ์œ„ ํ™•์žฅ์„ ์ˆ˜ํ–‰ํ•จ.

ํ•˜์ง€๋งŒ ์ด ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋จ.

VM ๋‹จ์œ„ ํ™•์žฅ์˜ ๊ตฌ์กฐ์  ์ง€์—ฐ

Auto Scaling Group์„ ํ†ตํ•œ ํ™•์žฅ์€ EC2 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ โ†’ OS ๋ถ€ํŒ… โ†’ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰๊นŒ์ง€ ์ตœ์†Œ 3~5๋ถ„์ด ์†Œ์š”๋จ.

์‹ค์‹œ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ์ŠคํŒŒ์ดํฌ ์ƒํ™ฉ์—์„œ๋Š” ์ฆ‰๊ฐ์ ์ธ ํ™•์žฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ์„œ๋น„์Šค ์ง€์—ฐ์ด๋‚˜ ์žฅ์• ๋กœ ์ด์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ.


๋น„ํšจ์œจ์ ์ธ ์ž์› ํ™•์žฅ

AI ์„œ๋น„์Šค๋Š” ํ‰์‹œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด 80% ์ด์ƒ์„ ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ง‘์•ฝ์  ์›Œํฌ๋กœ๋“œ์ž„.

์ปจํ…Œ์ด๋„ˆ ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋„ ์ „์ฒด EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋น„์šฉ๊ณผ ์ž์› ํšจ์œจ์ด ํฌ๊ฒŒ ์ €ํ•˜๋จ.


๋ฐฐํฌ ์‹œ ์—ฐ๊ฒฐ ๋‹จ์ ˆ ๋ฌธ์ œ

๊ธฐ์กด ๋ฐฉ์‹์—์„œ๋Š” ์ธ์Šคํ„ด์Šค ๊ต์ฒด๋‚˜ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ ๊ณผ์ •์—์„œ ๊ธฐ์กด ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋จ.

ํŠนํžˆ WebSocket ๊ธฐ๋ฐ˜ ์ฑ„ํŒ…์ด๋‚˜ AI ์ŠคํŠธ๋ฆฌ๋ฐ ์‘๋‹ต์˜ ๊ฒฝ์šฐ ๋ฐฐํฌ ์‹œ ์‚ฌ์šฉ์ž ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ์„œ๋น„์Šค ์„ฑ์žฅ ์ดํ›„ ์šด์˜ ์•ˆ์ •์„ฑ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ์ปจํ…Œ์ด๋„ˆ ๋‹จ์œ„ ์ž๋™ ๋ณต๊ตฌ์™€ ์ดˆ๋‹จ์œ„ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•จ.


1.2 Kubernetes ๋„์ž… ๊ฐ€์„ค ๋ฐ ๊ธฐ๋Œ€ ํšจ๊ณผ

Devths ์ธํ”„๋ผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ€์„ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ Kubernetes ๋„์ž…์„ ์„ค๊ณ„ํ•จ.

๊ฐ€์„ค 1. ์ปจํ…Œ์ด๋„ˆ ๋‹จ์œ„ ์ดˆ๋‹จ์œ„ ์Šค์ผ€์ผ๋ง

VM ํ™•์žฅ์ด ์•„๋‹Œ Pod ๋‹จ์œ„ ํ™•์žฅ(HPA) ์„ ์ ์šฉํ•จ.

์ด๋ฏธ ํ™•๋ณด๋œ ์›Œ์ปค ๋…ธ๋“œ ์ž์›์„ ํ™œ์šฉํ•˜์—ฌ ์ดˆ๋‹จ์œ„๋กœ ํŒŒ๋“œ๋ฅผ ๋ณต์ œํ•จ์œผ๋กœ์จ ํŠธ๋ž˜ํ”ฝ ์ŠคํŒŒ์ดํฌ๋ฅผ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ฐฉ์–ดํ•  ์ˆ˜ ์žˆ์Œ.


๊ฐ€์„ค 2. ๋ฉ”๋ชจ๋ฆฌ ์ง‘์•ฝ์  ์›Œํฌ๋กœ๋“œ์˜ ์•ˆ์ •์  ๋ณต๊ตฌ

AI ์„œ๋น„์Šค์— Resource Request์™€ Limit์„ ์„ค์ •ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํ†ต์ œํ•จ.

OOM ๋ฐœ์ƒ ์‹œ ์ „์ฒด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค์šด๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ํŒŒ๋“œ๋งŒ ์žฌ์‹œ์ž‘(Self-Healing) ๋˜๋„๋ก ์„ค๊ณ„ํ•จ.

์ด๋ฅผ ํ†ตํ•ด ์žฅ์•  ๋ณต๊ตฌ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Œ.


๊ฐ€์„ค 3. ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๊ตฌํ˜„

Readiness Probe๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒˆ ๋ฒ„์ „ ํŒŒ๋“œ๊ฐ€ ์™„์ „ํžˆ ์ค€๋น„๋œ ํ›„ ํŠธ๋ž˜ํ”ฝ์„ ์ „ํ™˜ํ•จ.

์ด๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ ๊ณผ์ •์—์„œ WebSocket ์—ฐ๊ฒฐ ๋‹จ์ ˆ์ด๋‚˜ ์ŠคํŠธ๋ฆฌ๋ฐ ์ค‘๋‹จ์„ ๋ฐฉ์ง€ํ•จ.

๊ฒฐ๊ณผ์ ์œผ๋กœ Kubernetes ๋„์ž…์„ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ธฐ๋Œ€ํ•จ.

  • ์ดˆ๋‹จ์œ„ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค ๊ตฌ์กฐ ํ™•๋ณด
  • ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ž๋™ ๋ณต๊ตฌ(Self-Healing)
  • ๋ฌด์ค‘๋‹จ ๋กค๋ง ๋ฐฐํฌ
  • ๋ฆฌ์†Œ์Šค ๋‹จ์œ„ ํ™•์žฅ์œผ๋กœ ๋น„์šฉ ํšจ์œจ ํ–ฅ์ƒ

1.3 ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ ๋น„๊ต ๋ฐ kubeadm ์ฑ„ํƒ ์ด์œ 

Kubernetes ๋„์ž… ๊ณผ์ •์—์„œ ECS, EKS, kubeadm ๊ธฐ๋ฐ˜ Kubernetes๋ฅผ ๋น„๊ต ๊ฒ€ํ† ํ•จ.


ECS ๋Œ€๋น„ Kubernetes ์„ ํƒ

ECS๋Š” AWS์— ์ข…์†๋˜๋Š” ๊ตฌ์กฐ๋กœ ๋ฉ€ํ‹ฐ ํด๋ผ์šฐ๋“œ๋‚˜ ์˜จํ”„๋ ˆ๋ฏธ์Šค ํ™•์žฅ์„ฑ์ด ์ œํ•œ๋จ.

๋ฐ˜๋ฉด Kubernetes๋Š” ๊ธ€๋กœ๋ฒŒ ์˜คํ”ˆ์†Œ์Šค ํ‘œ์ค€์œผ๋กœ ๋‹ค์–‘ํ•œ ์ธํ”„๋ผ ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ ์šด์˜ ๋ชจ๋ธ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ.


EKS ๋Œ€๋น„ kubeadm ์„ ํƒ

EKS๋Š” ๊ด€๋ฆฌํ˜• Kubernetes ์„œ๋น„์Šค๋กœ ์šด์˜ ๋ถ€๋‹ด์ด ์ ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Œ.

ํ•˜์ง€๋งŒ Control Plane ๋‚ด๋ถ€ ๋™์ž‘์ด ๋ธ”๋ž™๋ฐ•์Šค ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜์–ด ๋„คํŠธ์›Œํฌ ์ •์ฑ…์ด๋‚˜ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์˜ ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ์–ด๋ ค์›€.

Devths ์„œ๋น„์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ kubeadm ๊ธฐ๋ฐ˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ ํƒํ•จ.

  • ๋„คํŠธ์›Œํฌ ์ •์ฑ…(L3/L4) ์„ธ๋ฐ€ ์ œ์–ด ํ•„์š”
  • CNI ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•„์š”
  • ์ธํ”„๋ผ ์šด์˜ ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์ œ์–ดํ•˜์—ฌ ๊ธฐ์ˆ  ์ดํ•ด๋„ ํ™•๋ณด

๋”ฐ๋ผ์„œ ์šด์˜ ๋ณต์žก์„ฑ์„ ๊ฐ์ˆ˜ํ•˜๋”๋ผ๋„ ์ธํ”„๋ผ ์ฃผ๋„๊ถŒ ํ™•๋ณด๋ฅผ ์œ„ํ•ด kubeadm ๊ธฐ๋ฐ˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ์ „๋žต์„ ์ฑ„ํƒํ•จ.



2. ํด๋Ÿฌ์Šคํ„ฐ ์•„ํ‚คํ…์ฒ˜

2.1 ์ „์ฒด ๊ตฌ์กฐ

image

์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์€ NLB๋ฅผ ํ†ตํ•ด ์œ ์ž…๋˜๊ณ , NodePort๋ฅผ ํ†ตํ•ด Gateway API ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ „๋‹ฌ๋จ.

์ดํ›„ Gateway์˜ ๋ผ์šฐํŒ… ์ •์ฑ…์— ๋”ฐ๋ผ ๊ฐ ์„œ๋น„์Šค์˜ ClusterIP Service๋กœ ๋ถ„๊ธฐ๋˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ ํŒŒ๋“œ์— ์—ฐ๊ฒฐ๋จ. ํŒŒ๋“œ ๊ฐ„ ํ†ต์‹ ์€ Calico CNI๊ฐ€ ๋‹ด๋‹นํ•จ.



3. ํ™˜๊ฒฝ๋ณ„ ํด๋Ÿฌ์Šคํ„ฐ ์ „๋žต

Devths๋Š” prod์™€ nonprod๋ฅผ ๋ถ„๋ฆฌํ•œ 2๊ฐœ ํด๋Ÿฌ์Šคํ„ฐ ์ „๋žต์œผ๋กœ ์„ค๊ณ„ํ•จ. nonprod๋Š” ๊ธฐ๋Šฅ ๊ฒ€์ฆ, ์žฅ์•  ์žฌํ˜„, ๋ฐฐํฌ ํ…Œ์ŠคํŠธ, ์ธํ”„๋ผ ์‹คํ—˜์„ ์œ„ํ•œ ํ™˜๊ฒฝ์ด๊ณ , prod๋Š” ์‹ค์‚ฌ์šฉ์ž ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์•ˆ์ •์„ฑ ์ค‘์‹ฌ ํ™˜๊ฒฝ์ž„.

3.1 prod

prod์—์„œ๋Š” Stateless ์„œ๋น„์Šค๋งŒ Kubernetes ๋‚ด๋ถ€์— ๋ฐฐ์น˜ํ•˜๊ณ , PostgreSQL์€ RDS, Redis๋Š” ElastiCache, ๋ฉ”์‹œ์ง€ ํ์™€ Vector DB๋„ ๊ณ ๊ฐ€์šฉ์„ฑ ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌํ•จ.

์ด๋Š” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๊ณ„์ธต์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋Ÿฌ์Šคํ„ฐ ์žฅ์• ์™€ ๋ถ„๋ฆฌํ•ด ์šด์˜ ๋ฆฌ์Šคํฌ๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•จ์ž„.

์ด ๊ตฌ์กฐ์—์„œ Kubernetes๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰, ํ™•์žฅ, ๋ฐฐํฌ, ๋ณต๊ตฌ๋ฅผ ๋‹ด๋‹นํ•˜๊ณ , ๋ฐ์ดํ„ฐ ๊ณ„์ธต์€ ๋‚ด๊ตฌ์„ฑ๊ณผ ๋ฐฑ์—… ์ฒด๊ณ„๊ฐ€ ํ™•๋ณด๋œ ์™ธ๋ถ€ ์„œ๋น„์Šค๊ฐ€ ๋‹ด๋‹นํ•จ.


3.1.1 prod ๋…ธ๋“œ ํ† ํด๋กœ์ง€

์ดˆ๊ธฐ prod ๊ธฐ์ค€ ๊ถŒ์žฅ ํ† ํด๋กœ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Œ.

๊ตฌ๋ถ„ ์ˆ˜๋Ÿ‰ ์—ญํ• 
Master Node 3 API Server, Scheduler, Controller Manager
Worker Node 4 Frontend, Backend, Chat, API ๋ฐฐ์น˜
์ด ๋…ธ๋“œ ์ˆ˜ 7 ์ตœ์†Œ ์šด์˜ ๊ธฐ์ค€

AI ์›Œํฌ๋กœ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๊ณ  ์ผ๋ฐ˜ API์™€ ์ž์› ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฏ€๋กœ ์ „์šฉ ์›Œ์ปค ๋˜๋Š” taint/toleration ๊ธฐ๋ฐ˜ ๋ถ„๋ฆฌ๋ฅผ ๊ถŒ์žฅํ•จ.


3.2 nonprod

nonprod์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ฟ ์•„๋‹ˆ๋ผ Statefullํ•œ ์ปดํฌ๋„ŒํŠธ๋„ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์— ๋ฐฐ์น˜ํ•จ.

DB๊นŒ์ง€ Pod + PV/PVC๋กœ ์˜ฌ๋ ค์„œ ์„œ๋น„์Šค ๊ฐ„ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์™€ ์žฅ์•  ๋ณต๊ตฌ ์‹คํ—˜์„ ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•จ. ์Šคํ† ๋ฆฌ์ง€๋Š” EBS ๊ธฐ๋ฐ˜ ๋™์  ํ”„๋กœ๋น„์ €๋‹์„ ์‚ฌ์šฉํ•ด ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ๋ณผ๋ฅจ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๋„๋ก ์„ค๊ณ„ํ•จ.

์ด ํ™˜๊ฒฝ์€ ๋น„์šฉ ์ ˆ๊ฐ๊ณผ ์‹คํ—˜์„ฑ์ด ์šฐ์„ ์ด๋ฉฐ, ์šด์˜ ํ™˜๊ฒฝ ์ˆ˜์ค€์˜ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋ณด์ง€๋Š” ์•Š์Œ. ์ฆ‰, ๋ฐ์ดํ„ฐ ์˜์†์„ฑ๋ณด๋‹ค ๋น ๋ฅธ ์žฌํ˜„์„ฑ๊ณผ ํ™˜๊ฒฝ ๋…๋ฆฝ์„ฑ์ด ๋” ์ค‘์š”ํ•œ ํด๋Ÿฌ์Šคํ„ฐ์ž„.


3.2.1 nonprod ๋…ธ๋“œ ํ† ํด๋กœ์ง€

๊ตฌ๋ถ„ ์ˆ˜๋Ÿ‰ ์—ญํ• 
Master Node 3 API Server, Scheduler, Controller Manager
Worker Node 4 Frontend, Backend, Chat, API ๋ฐฐ์น˜
DB Node 2 Postgre, Redis, Kafka, VectorDB ๋ฐฐ์น˜
์ด ๋…ธ๋“œ ์ˆ˜ 9 ์ตœ์†Œ ์šด์˜ ๊ธฐ์ค€


4. ๋„คํŠธ์›Œํฌ ์„ค๊ณ„


4.1. Devths ์„œ๋น„์Šค ๊ธฐ์ค€ ์ ํ•ฉ์„ฑ ๋ถ„์„

Devths ์„œ๋น„์Šค ํŠน์„ฑ:

  • Chat Server: SSE ๊ธฐ๋ฐ˜ ๋‹จ๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ
  • AI API: SSE ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆฌ๋ฐ ์‘๋‹ต
  • Backend: ์ผ๋ฐ˜ REST API
  • Frontend: ์ •์  ์ž์‚ฐ + API ํ”„๋ก์‹œ
  • ํŒ€ ๊ทœ๋ชจ: 2~5์ธ ์†Œ๊ทœ๋ชจ
  • ํ™˜๊ฒฝ: kubeadm + AWS

ํŠธ๋ž˜ํ”ฝ ํŠน์„ฑ:

  • SSE ์—ฐ๊ฒฐ์ด ์ „์ฒด ์—ฐ๊ฒฐ์˜ ์ƒ๋‹น ๋น„์ค‘ ์ฐจ์ง€
  • ์žฅ์‹œ๊ฐ„ ์—ฐ๊ฒฐ (AI ์ŠคํŠธ๋ฆฌ๋ฐ ์ตœ๋Œ€ ์ˆ˜๋ถ„)
  • ์—ฐ๊ฒฐ ์ˆ˜ > ์ดˆ๋‹น ์š”์ฒญ ์ˆ˜ ํŒจํ„ด

4.2. ๋„คํŠธ์›Œํฌ ๊ฒŒ์ธต ๊ตฌ์กฐ ์„ค๊ณ„

๊ณ„์ธต 1: ์™ธ๋ถ€ ์ง„์ž… (AWS NLB)

๊ณ„์ธต 2: ํด๋Ÿฌ์Šคํ„ฐ ์ง„์ž… (NodePort)

๊ณ„์ธต 3: L7 ๋ผ์šฐํŒ… (Gateway API ๊ตฌํ˜„์ฒด)

๊ณ„์ธต 4: Pod ๊ฐ„ ํ†ต์‹  (CNI)

๊ณ„์ธต 5: ์ •์ฑ… ์ œ์–ด (NetworkPolicy)

๊ณ„์ธต 6: ๊ด€์ธก (Observability)


4.3. ๊ณ„์ธต 1: AWS NLB vs ALB

์„ ํƒ์ง€ ๋น„๊ต

ํ•ญ๋ชฉ NLB (L4) ALB (L7)
๋™์ž‘ ๊ณ„์ธต TCP/UDP HTTP/HTTPS
SSE idle timeout ์„ค์ • ์—†์Œ (TCP ๋ ˆ๋ฒจ) ๊ธฐ๋ณธ 60์ดˆ (์ตœ๋Œ€ 4000์ดˆ)
๊ณ ์ • IP ์ œ๊ณต ๋ฏธ์ œ๊ณต (DNS๋งŒ)
kubeadm ์—ฐ๋™ NodePort๋งŒ์œผ๋กœ ์—ฐ๋™ ๊ฐ€๋Šฅ AWS LB Controller + IRSA ํ•„์š”
ํ—ค๋” ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ๋ถˆ๊ฐ€ ๊ฐ€๋Šฅ
WebSocket/SSE ๋„ค์ดํ‹ฐ๋ธŒ ์ง€์› ์ง€์›ํ•˜๋‚˜ timeout ์ฃผ์˜
๋น„์šฉ LCU ๊ธฐ๋ฐ˜ LCU ๊ธฐ๋ฐ˜ (๋น„์Šท)

NLB ์„ ํƒ ๊ทผ๊ฑฐ

๊ทผ๊ฑฐ 1: SSE idle timeout ๋ฌธ์ œ

ALB์˜ ๊ธฐ๋ณธ idle timeout์€ 60์ดˆ. SSE๋Š” ์„œ๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ง€ ์•Š๋Š” ๊ตฌ๊ฐ„์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๊ตฌ๊ฐ„์ด 60์ดˆ๋ฅผ ๋„˜์œผ๋ฉด ALB๊ฐ€ ์—ฐ๊ฒฐ์„ ๊ฐ•์ œ ์ข…๋ฃŒ.

ALB ์ตœ๋Œ€ ์„ค์ •๊ฐ’: 4000์ดˆ ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฐ’์€ ๋ชจ๋“  ์—ฐ๊ฒฐ์— ์ „์—ญ ์ ์šฉ๋จ โ†’ REST API ์—ฐ๊ฒฐ๋„ 4000์ดˆ๊นŒ์ง€ ์œ ์ง€ โ†’ ๋ถˆํ•„์š”ํ•œ ์—ฐ๊ฒฐ ์ ์œ  โ†’ ์„œ๋น„์Šค๋ณ„ timeout ๋ถ„๋ฆฌ ๋ถˆ๊ฐ€

NLB๋Š” TCP ๋ ˆ๋ฒจ์—์„œ ๋™์ž‘ํ•˜๋ฏ€๋กœ idle timeout ๊ฐœ๋… ์ž์ฒด๊ฐ€ ์—†์Œ. ๋”ฐ๋ผ์„œ SSE ์—ฐ๊ฒฐ์ด ์‚ด์•„์žˆ๋Š” ํ•œ ๋Š์ง€ ์•Š์Œ.


๊ทผ๊ฑฐ 2: kubeadm ํ™˜๊ฒฝ์—์„œ ALB ์—ฐ๋™ ๋ณต์žก๋„

ALB Ingress Controller ๋ฐฉ์‹์€ AWS Load Balancer Controller ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ALB ์‚ฌ์šฉ ์‹œ ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์ž‘์—…: 1. AWS Load Balancer Controller ์„ค์น˜ 2. IAM OIDC Provider ์„ค์ • (kubeadm์€ EKS์™€ ๋‹ฌ๋ฆฌ ์ˆ˜๋™) 3. IRSA(IAM Roles for Service Accounts) ์ˆ˜๋™ ๊ตฌ์„ฑ 4. ServiceAccount์— IAM Role Annotation ์ถ”๊ฐ€

NLB + NodePort ์‚ฌ์šฉ ์‹œ: 1. NodePort Service ์ •์˜ โ†’ ๋

์†Œ๊ทœ๋ชจํŒ€์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ ์„์ˆ˜๋ก ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์›์ธ ์ถ”์ ์ด ๋‹จ์ˆœํ•ด์ง.


๊ทผ๊ฑฐ 3: L7 ๋ผ์šฐํŒ…์€ Gateway API๊ฐ€ ๋‹ด๋‹น

ALB์˜ ํ•ต์‹ฌ ์žฅ์ ์ธ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์€ ์ด๋ฏธ Gateway API๊ฐ€ ๋‹ด๋‹น. ALB์˜ L7 ๊ธฐ๋Šฅ์„ ์ค‘๋ณต์œผ๋กœ ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์—†์Œ

๊ฒฐ๋ก : NLB ์„ ํƒ


4.4. ๊ณ„์ธต 3: Gateway API ๊ตฌํ˜„์ฒด (Nginx GW Fabric ์ฑ„ํƒ)

๊ธฐ์กด ์ดˆ์•ˆ์˜ nginx ingress controller๋Š” ์ตœ์‹  ์„ค๊ณ„ ๊ธฐ์ค€์—์„œ๋Š” ๊ธฐ๋ณธ ์ถ•์œผ๋กœ ๋‘๊ธฐ ์–ด๋ ค์›€. ingress-nginx๋Š” 2026๋…„ 3์›” ์€ํ‡ด ์˜ˆ์ •์ด๋ฏ€๋กœ, ์‹ ๊ทœ ์„ค๊ณ„๋Š” Gateway API ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„ํ•จ.

๋˜ํ•œ,Gateway API๋Š” Kubernetes ๊ณต์‹ ์ฐจ์„ธ๋Œ€ ๋„คํŠธ์›Œํ‚น ๋ชจ๋ธ๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฉฐ, Ingress์— ๋น„ํ•ด์„œ ๋” ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋ฆฌ์™€ ๊ณ ๊ธ‰ ๋ผ์šฐํŒ… ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•จ. (Kubernetes)

๋”ฐ๋ผ์„œ ์™ธ๋ถ€ ์ง„์ž… ๊ตฌ์กฐ๋Š” NLB โ†’ NodePort โ†’ Gateway API โ†’ Service โ†’ Pod ๋กœ ์ •์˜ํ•จ.


Gateway API ๊ตฌํ˜„์ฒด ๋น„๊ต

ํ•ญ๋ชฉ Nginx GW Fabric Envoy Gateway Kong Gateway Traefik Contour
๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ Nginx Envoy Nginx (Kong) Traefik Envoy
GW API ์ค€์ˆ˜๋„ ์™„์ „ ์™„์ „ ๋ถ€๋ถ„ ๋ถ€๋ถ„ ๋†’์Œ
SSE ์ฒ˜๋ฆฌ ์„ค์ • ํ•„์š” ๋„ค์ดํ‹ฐ๋ธŒ ์„ค์ • ํ•„์š” ๋„ค์ดํ‹ฐ๋ธŒ ๋„ค์ดํ‹ฐ๋ธŒ
ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฏธ์ง€์› CRD ๊ธฐ๋ฐ˜ 100+ ๋ฏธ๋“ค์›จ์–ด ๋ฏธ์ง€์›
DB ํ•„์š” ๋ถˆํ•„์š” ๋ถˆํ•„์š” ์„ ํƒ ๋ถˆํ•„์š” ๋ถˆํ•„์š”
์šด์˜ ๋ณต์žก๋„ ๋‚ฎ์Œ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ๋‚ฎ์Œ ์ค‘๊ฐ„
kubeadm ๋ ˆํผ๋Ÿฐ์Šค ํ’๋ถ€ ์ ์Œ ํ’๋ถ€ ํ’๋ถ€ ์ค‘๊ฐ„
์†Œ๊ทœ๋ชจํŒ€ ์ ํ•ฉ ์ ํ•ฉ ๋น„๊ถŒ์žฅ ๋น„๊ถŒ์žฅ ์ ํ•ฉ ๋น„๊ถŒ์žฅ
BackendTLSPolicy ์ง€์› ์ง€์› ๋ฏธ์ง€์› ๋ฏธ์ง€์› ๋ฏธ์ง€์›
Devths ์ ํ•ฉ๋„ ์ตœ์  ์ ํ•ฉ ๋ณดํ†ต ์ ํ•ฉ ๋ณดํ†ต

Nginx GW Fabric ์„ ํƒ ๊ทผ๊ฑฐ

๊ทผ๊ฑฐ 1: Gateway API ์ŠคํŽ™ ์™„์ „ ์ค€์ˆ˜

ํ˜„์žฌ Cilium Gateway API๋Š” URLRewrite, RequestMirror, BackendTLSPolicy ๋“ฑ Extended ๊ธฐ๋Šฅ์ด ๋ฏธ๊ตฌํ˜„ ์ƒํƒœ. Nginx Gateway Fabric์€ Gateway API v1.1 ๊ธฐ์ค€ Core/Extended ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ์ค€์ˆ˜. ํ˜„์žฌ ๋‹น์žฅ ํ•„์š”ํ•˜์ง€ ์•Š๋”๋ผ๋„ ํ–ฅํ›„ ์„œ๋น„์Šค ๊ฐ„ mTLS ๋„์ž…, ํŠธ๋ž˜ํ”ฝ ๋ฏธ๋Ÿฌ๋ง(Prod) ๋“ฑ ํ™•์žฅ ์‹œ ์žฌ์„ค๊ณ„ ์—†์ด ๋Œ€์‘ ๊ฐ€๋Šฅ.


๊ทผ๊ฑฐ 2: Envoy Gateway ๋Œ€๋น„ ์šด์˜ ๋ ˆํผ๋Ÿฐ์Šค

Envoy Gateway๋Š” 2023๋…„ ์‹œ์ž‘๋œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. SSE ๊ด€๋ จ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. Nginx๋Š” ์ˆ˜๋…„๊ฐ„ SSE ์„ค์ • ์‚ฌ๋ก€๊ฐ€ ์ถ•์ ๋˜์–ด ์žˆ์–ด ์žฅ์•  ์‹œ ์ฐธ๊ณ  ์ž๋ฃŒ ์ ‘๊ทผ์„ฑ์ด ์••๋„์ ์œผ๋กœ ๋†’์Šต๋‹ˆ๋‹ค.


๊ทผ๊ฑฐ 3: ๊ตฌ์„ฑ ๋‹จ์ˆœ๋„

Nginx Gateway Fabric ๊ตฌ์„ฑ:
  nginx-gateway (Controller) โ€” 1๊ฐœ Pod
  nginx (๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ)       โ€” NodePort๋กœ ์™ธ๋ถ€ ๋…ธ์ถœ
	=> ๋‘ ์ข…๋ฅ˜์˜ Pod๋งŒ ๊ด€๋ฆฌ

Envoy Gateway ๊ตฌ์„ฑ:
  envoy-gateway (Controller)
  envoy (๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ)
  + EnvoyProxy CRD ๋ณ„๋„ ๊ด€๋ฆฌ
  โ†’ ๊ตฌ์„ฑ ํŒŒ์ผ ๋ณต์žก๋„ ๋†’์Œ
  
Kong ๊ตฌ์„ฑ:
	ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด KongPlugin CRD์™€ HTTPRoute ์–ด๋…ธํ…Œ์ด์…˜ ํ˜ผ์šฉ.
	ํ‘œ์ค€ Gateway API ๋ฏธ์ถฉ์กฑ

๊ทผ๊ฑฐ 4: ์šด์˜ ์นœ์ˆ™๋„์™€ ๋””๋ฒ„๊น… ์ ‘๊ทผ์„ฑ

Nginx ๊ธฐ๋ฐ˜ ์šด์˜ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด ๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•์„ ๋ณ„๋„ ํ•™์Šต ์—†์ด ์ฆ‰์‹œ ์ ์šฉ ๊ฐ€๋Šฅ. ์žฅ์•  ๋ฐœ์ƒ ์‹œ nginx-gateway ๋กœ๊ทธ๋กœ ์„ค์ • ๋ฐ˜์˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ , nginx -T ๋ช…๋ น์œผ๋กœ ํ˜„์žฌ ์ ์šฉ๋œ ์„ค์ •์„ ์ง์ ‘ ํ™•์ธ. Envoy Gateway๋Š” xDS ํ”„๋กœํ† ์ฝœ๊ณผ Envoy ์„ค์ • ๊ตฌ์กฐ(Listener/Cluster/Route) ํ•™์Šต์ด ์„ ํ–‰ ํ•„์š”.


4.5. ๊ณ„์ธต 4: CNI (Calico ์ฑ„ํƒ)

ํŒŒ๋“œ ๊ฐ„ ๋„คํŠธ์›Œํฌ๋Š” Calico๋ฅผ ์‚ฌ์šฉํ•จ. Calico๋Š” Kubernetes์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” CNI๋กœ, ์•ˆ์ •์ ์ธ L3 ๋„คํŠธ์›Œํ‚น๊ณผ NetworkPolicy ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ.

Devths ์„œ๋น„์Šค๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ, AI ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ API ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์กฐ์ด๋ฏ€๋กœ ์„œ๋น„์Šค ๊ฐ„ ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ์„ ๋ช…ํ™•ํžˆ ์ œํ•œํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ. Calico์˜ NetworkPolicy๋ฅผ ํ†ตํ•ด ํ”„๋ŸฐํŠธ์—”๋“œ๋Š” ๋ฐฑ์—”๋“œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œํ•œํ•˜๊ณ , AI ์„œ๋ฒ„๋Š” ๋ฐฑ์—”๋“œ API๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ˜ธ์ถœ๋˜๋„๋ก ์ •์ฑ…์„ ๊ตฌ์„ฑํ•จ. ์ด๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ์„œ๋น„์Šค ๊ฐ„ ๋ถˆํ•„์š”ํ•œ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•˜๊ณ  ๋ณด์•ˆ ๊ฒฝ๊ณ„๋ฅผ ํ˜•์„ฑํ•จ.

๋˜ํ•œ ๋ณธ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ kubeadm ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜๋ฏ€๋กœ, ๋ณ„๋„์˜ ๋ณต์žกํ•œ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ์—†์ด Calico IPIP ๊ธฐ๋ฐ˜ ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ„ ํŒŒ๋“œ ํ†ต์‹ ์„ ๊ตฌ์„ฑํ•จ. ์ด๋ฅผ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ๋„ ์•ˆ์ •์ ์ธ ํŒŒ๋“œ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ.


CNI ๋น„๊ต

ํ•ญ๋ชฉ Calico Cilium Flannel
๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  BGP / IPIP eBPF VXLAN
NetworkPolicy L3-L4 L3-L7 ๋ฏธ์ง€์›
L7 ์ •์ฑ… ๋ฏธ์ง€์› ์ง€์› ๋ฏธ์ง€์›
ํŠธ๋ž˜ํ”ฝ ๊ฐ€์‹œํ™” ๋ฏธ์ง€์› Hubble ๋‚ด์žฅ ๋ฏธ์ง€์›
Gateway API ๋‚ด์žฅ ๋ฏธ์ง€์› ๋ถ€๋ถ„ ์ง€์› ๋ฏธ์ง€์›
kube-proxy ๋Œ€์ฒด ๋ถˆ๊ฐ€ ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€
eBPF ์„ฑ๋Šฅ ์ด์  ์—†์Œ ์žˆ์Œ ์—†์Œ
kubeadm ๋ ˆํผ๋Ÿฐ์Šค ๊ณต์‹ ๋ฌธ์„œ ์˜ˆ์‹œ ์ค‘๊ฐ„ ๋งŽ์Œ
AWS ํ™˜๊ฒฝ ๊ฒ€์ฆ ํ’๋ถ€ ์ค‘๊ฐ„ ํ’๋ถ€
์šด์˜ ๋ณต์žก๋„ ๋‚ฎ์Œ ์ค‘๊ฐ„ ๋‚ฎ์Œ
์†Œ๊ทœ๋ชจํŒ€ ์ ํ•ฉ ์ ํ•ฉ ์กฐ๊ฑด๋ถ€ ์ ํ•ฉ ๋น„๊ถŒ์žฅ
Devths ์ ํ•ฉ๋„ ์ตœ์  ์กฐ๊ฑด๋ถ€ ๋ถ€์ ํ•ฉ

Calico ์„ ํƒ ๊ทผ๊ฑฐ

๊ทผ๊ฑฐ 1: CNI ์—ญํ•  ๋ฒ”์œ„์™€ ์š”๊ตฌ์‚ฌํ•ญ ์ผ์น˜

CNI์˜ ํ•ต์‹ฌ ์—ญํ• ์€ Pod ๊ฐ„ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ๊ณผ NetworkPolicy ๊ฐ•์ œ์ž„. ํŠธ๋ž˜ํ”ฝ ๊ฐ€์‹œํ™”, ์™ธ๋ถ€ ๋ผ์šฐํŒ…, ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘์€ ๊ฐ๊ฐ Hubble, Gateway API, Prometheus๊ฐ€ ๋‹ด๋‹นํ•˜๋Š” ์˜์—ญ์ž„. CNI์— ๊ด€์ธก ๊ธฐ๋Šฅ๊นŒ์ง€ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์—์„œ ๋ฒ—์–ด๋‚˜๋ฉฐ, ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์ „๋ฌธ ๋„๊ตฌ๋ฅผ ๋ณ„๋„๋กœ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ๊ตฌ์กฐ์ ์œผ๋กœ ๋” ๋ช…ํ™•ํ•จ.

Devths์—์„œ ์š”๊ตฌํ•˜๋Š” ๋‹ค์Œ ์‚ฌํ•ญ์„ ์•ˆ์ •์ ์œผ๋กœ ์ถฉ์กฑ

  • Pod ๊ฐ„ ๋„คํŠธ์›Œํฌ ํ†ต์‹ 
  • NetworkPolicy ๊ฐ•์ œ (L3-L4)

๊ทผ๊ฑฐ 2 : L3-L4 NetworkPolicy๋กœ ์š”๊ตฌ์‚ฌํ•ญ ์™„์ „ ์ถฉ์กฑ

Devths์˜ NetworkPolicy ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑ

ํ—ˆ์šฉ ์ •์ฑ…:
  Gateway  โ†’ Frontend       IP + Port
  Gateway  โ†’ Backend        IP + Port
  Gateway  โ†’ Chat           IP + Port
  Gateway  โ†’ AI API         IP + Port
  Backend  โ†’ Chat           IP + Port
  Backend  โ†’ AI API         IP + Port
  Backend  โ†’ RDS            IP + Port 5432
  Backend  โ†’ ElastiCache    IP + Port 6379
  Chat     โ†’ ElastiCache    IP + Port 6379

์ฐจ๋‹จ ์ •์ฑ…:
  ์œ„ ํ—ˆ์šฉ ๋ชฉ๋ก ์™ธ ๋ชจ๋“  ํ†ต์‹  ์ฐจ๋‹จ

L7 ์ •์ฑ…์ด ํ•„์š”ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์—†์œผ๋ฉฐ, L7 ์ ‘๊ทผ ์ œ์–ด๋Š” ์ด๋ฏธ Gateway API์˜ HTTPRoute์—์„œ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ CNI ๋ ˆ๋ฒจ์—์„œ ์ค‘๋ณต ์ œ์–ดํ•  ์ด์œ ๊ฐ€ ์—†์Œ.


๊ทผ๊ฑฐ 3: kubeadm ๊ณต์‹ ๋ฌธ์„œ ์„ค์น˜ ์˜ˆ์‹œ๊ฐ€ Calico

Kubernetes ๊ณต์‹ ๋ฌธ์„œ์˜ kubeadm ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ๊ฐ€์ด๋“œ์—์„œ CNI ์„ค์น˜ ์˜ˆ์‹œ๋กœ Calico๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•จ. โ†’ ์†Œ๊ทœ๋ชจํŒ€์ด ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ ˆํผ๋Ÿฐ์Šค ๊ฐ€์žฅ ๋งŽ์Œ


๊ทผ๊ฑฐ 4: AWS ํ™˜๊ฒฝ IPIP ๋ชจ๋“œ ์šด์˜ ๋ ˆํผ๋Ÿฐ์Šค ํ’๋ถ€

AWS VPC ํ™˜๊ฒฝ์—์„œ๋Š” BGP ๋ผ์šฐํŒ…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ Calico๋Š” IPIP ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•จ. IPIP๋Š” AWS VPC ํ™˜๊ฒฝ์—์„œ ์ˆ˜๋…„๊ฐ„ ๊ฒ€์ฆ๋œ ์กฐํ•ฉ.

Cilium์€ AWS EC2 ์ธ์Šคํ„ด์Šค์˜ ์ปค๋„ ๋ฒ„์ „๊ณผ ์ธ์Šคํ„ด์Šค ์œ ํ˜•์— ๋”ฐ๋ผ eBPF ์ง€์› ๋ฒ”์œ„๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ. kubeadm + AWS ํ™˜๊ฒฝ์—์„œ์˜ Cilium ์šด์˜ ๋ ˆํผ๋Ÿฐ์Šค๋Š” EKS ํ™˜๊ฒฝ์— ์ง‘์ค‘๋˜์–ด ์žˆ์–ด kubeadm ํ™˜๊ฒฝ์—์„œ์˜ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ์‚ฌ๋ก€๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋ถ€์กฑ.


๊ทผ๊ฑฐ 5: eBPF ์„ฑ๋Šฅ ์ด์  โ€” ํ˜„์žฌ ๊ทœ๋ชจ์—์„œ ๋ฌด์˜๋ฏธ

eBPF ์ด์ ์ด ๋ฐœ์ƒํ•˜๋Š” ์กฐ๊ฑด:     Devths ํ˜„์žฌ ๊ทœ๋ชจ:
  Service ์ˆ˜ 500๊ฐœ ์ด์ƒ    โ†’     ์•ฝ 10๊ฐœ
  ๋…ธ๋“œ ์ˆ˜ 50๊ฐœ ์ด์ƒ        โ†’     4๊ฐœ (prod ๊ธฐ์ค€)
  ์ดˆ๋‹น ์ˆ˜์‹ญ๋งŒ ์š”์ฒญ         โ†’     ํ•ด๋‹น ์—†์Œ

ํŒจํ‚ท๋‹น ์ฒ˜๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ ์ฐจ์ด:
  1000 Service ํ™˜๊ฒฝ: iptables 300ฮผs vs eBPF 30ฮผs
  10 Service ํ™˜๊ฒฝ:   iptables 3ฮผs   vs eBPF 2ฮผs
  โ†’ ์ฐจ์ด 1ฮผs, ์ธก์ • ๋ฐ ์ฒด๊ฐ ๋ถˆ๊ฐ€๋Šฅ

ํ˜„์žฌ ๊ทœ๋ชจ์—์„œ ์ธก์ •์กฐ์ฐจ ๋ถˆ๊ฐ€๋Šฅํ•œ ์„ฑ๋Šฅ ์ด์ ์„ ๊ทผ๊ฑฐ๋กœ ์šด์˜ ๋ณต์žก๋„์™€ ํ•™์Šต ๋น„์šฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ํƒ€๋‹นํ•˜์ง€ ์•Š์Œ. ์„œ๋น„์Šค๊ฐ€ ์„ฑ์žฅ ํ›„ Cilium ์ „ํ™˜์„ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ .


4.6 TLS ์ข…๋‹จ ์ฒ˜๋ฆฌ

์ธ์ฆ์„œ ๋ฐœ๊ธ‰๊ณผ ๊ฐฑ์‹ ์€ cert-manager๋กœ ์ž๋™ํ™”ํ•จ. cert-manager๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ TLS ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ยท๊ฐฑ์‹ ํ•˜๋Š” ํ‘œ์ค€ ๋„๊ตฌ์ด๋ฉฐ, Letโ€™s Encrypt์™€ ์—ฐ๋™ ๊ฐ€๋Šฅํ•จ.

ALB + ACM์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, AWS ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค์ด๋ฏ€๋กœ ๋ฒค๋” ์ข…์†์ ์ด๊ฒŒ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ, ALB๊ฐ€ ์•ž๋‹จ์—์„œ ํ—ค๋”๋ฅผ ๋ณ€์กฐํ•˜๊ฑฐ๋‚˜ ๋ฏธ๋ฆฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋ฒ„๋ฆฌ๋ฉด, Kong์˜ ์„ธ๋ฐ€ํ•œ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด ๊ธฐ๋Šฅ์ด๋‚˜ mTLS(์ƒํ˜ธ TLS) ๊ฐ™์€ ๊ณ ๊ธ‰ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์„ค์ •์ด ๊ผฌ์ผ ์ˆ˜ ์žˆ์Œ


5. ์Šคํ† ๋ฆฌ์ง€ ์„ค๊ณ„

5-1. prod

prod์—์„œ๋Š” ํ•ต์‹ฌ DB๋ฅผ Kubernetes ๋‚ด๋ถ€์— ์˜ฌ๋ฆฌ์ง€ ์•Š์Œ. EBS๋Š” ๋‹จ์ผ AZ ์˜์กด์„ฑ๊ณผ ๋…ธ๋“œ ์ œ์•ฝ์ด ์žˆ์œผ๋ฏ€๋กœ, ์šด์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง์ ‘ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋‚ด๋ถ€์—์„œ ์žฅ๊ธฐ ์šด์˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค RDS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ •์„ฑ ์ธก๋ฉด์—์„œ ๋” ์ ์ ˆํ•จ. ๋”ฐ๋ผ์„œ prod์—์„œ PV/PVC๋Š” ์ฃผ๋กœ ๋ณด์กฐ์  ์ƒํƒœ ์ €์žฅ์ด๋‚˜ ๋‚ด๋ถ€ ์šด์˜ ๋„๊ตฌ์šฉ์œผ๋กœ ์ œํ•œํ•จ.


5-2. nonProd

nonprod์—์„œ๋Š” ์ž์ฒด Stateful ์›Œํฌ๋กœ๋“œ๋ฅผ ์‹คํ—˜ํ•  ์ˆ˜ ์žˆ๋„๋ก PV/PVC ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•จ. EBS StorageClass๋ฅผ ํ†ตํ•ด ๋™์  ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ณ , DB Pod๋Š” StatefulSet์œผ๋กœ ๊ตฌ์„ฑํ•จ. ์ด ํ™˜๊ฒฝ์€ ์šด์˜ ์ˆ˜์ค€์˜ ๋ฐ์ดํ„ฐ ๋ณด์กด๋ณด๋‹ค ๊ฐœ๋ฐœยท๊ฒ€์ฆ ๋ชฉ์ ์ด ์šฐ์„ ์ด๋ฏ€๋กœ ์Šคํ† ๋ฆฌ์ง€ ๊ตฌ์กฐ๋„ ๋‹จ์ˆœํ•˜๊ณ  ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์„ค๊ณ„ํ•จ.



6. ๋ฐฐํฌ ๋ฐ ํ™•์žฅ ์ „๋žต

6.1 Deployment ์ค‘์‹ฌ ๋ฐฐํฌ

Stateless ์„œ๋น„์Šค๋Š” ๋ชจ๋‘ Deployment๋กœ ๋ฐฐํฌํ•จ. ReplicaSet์€ Deployment ํ•˜์œ„์—์„œ ์ž๋™ ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ ์„ค๊ณ„ ๋ฌธ์„œ์—์„œ๋Š” ์ œ์–ด ๋‹จ์œ„๋ฅผ Deployment๋กœ ํ†ต์ผํ•˜๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฌ์›€. ๋กค๋ง ์—…๋ฐ์ดํŠธ๋ฅผ ์ ์šฉํ•ด ์ƒˆ ํŒŒ๋“œ๊ฐ€ ์ค€๋น„๋œ ํ›„ ๊ธฐ์กด ํŒŒ๋“œ๋ฅผ ์ˆœ์ฐจ ์ข…๋ฃŒํ•˜๋„๋ก ๊ตฌ์„ฑํ•จ.


6.2 HPA ์ „๋žต

์„œ๋น„์Šค๋ณ„ ํ™•์žฅ ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ€์ ธ๊ฐ.

์„œ๋น„์Šค๋ณ„ ํ™•์žฅ ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ€์ ธ๊ฐ.

์„œ๋น„์Šค ํ™•์žฅ ๊ธฐ์ค€ ์ตœ์†Œ Replica ์ตœ๋Œ€ Replica CPU request CPU Limit Memory request Memory Limit
Frontend CPU 2 6 200m 400m 256Mi 512Mi
Backend API CPU + RPS 2 8 500m 1000m 512Mi 1024Mi
Chat Server ๋ฉ”๋ชจ๋ฆฌ + ์—ฐ๊ฒฐ ์ˆ˜ 2 6 300m 600m 512Mi 1024Mi
AI API CPU + ๋ฉ”๋ชจ๋ฆฌ 2 6 1000m 2000m 1GB 2GB

HPA๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ metrics-server๊ฐ€ ์ œ๊ณตํ•˜๋Š” CPU, Memory ๋ฉ”ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•จ.

๋‹ค๋งŒ Devths ์„œ๋น„์Šค๋Š” ๋‹จ์ˆœ CPU ์‚ฌ์šฉ๋Ÿ‰๋ณด๋‹ค ์„œ๋น„์Šค ํŠน์„ฑ ๊ธฐ๋ฐ˜ ํ™•์žฅ์ด ์ค‘์š”ํ•œ ๊ตฌ์กฐ์ž„. 

ํŠนํžˆ ์ฑ„ํŒ… ์„œ๋ฒ„๋Š” ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜ ์ฆ๊ฐ€์— ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜๊ณ , Backend API๋Š” ์š”์ฒญ๋Ÿ‰์— ๋”ฐ๋ผ ๋ถ€ํ•˜๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ.

๋”ฐ๋ผ์„œ Backend API์˜ RPS, Chat Server์˜ ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜์™€ ๊ฐ™์€ ์„œ๋น„์Šค๋ณ„ ์ง€ํ‘œ๋Š” Prometheus์™€ Prometheus Adapter๋ฅผ ์—ฐ๊ณ„ํ•œ Custom Metrics ๊ธฐ๋ฐ˜ HPA๋กœ ํ™•์žฅํ•˜๋„๋ก ์„ค๊ณ„ํ•จ.

HPA๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ metrics-server๊ฐ€ ์ œ๊ณตํ•˜๋Š” CPU, Memory ๋ฉ”ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•จ.

๋‹ค๋งŒ Devths ์„œ๋น„์Šค๋Š” ๋‹จ์ˆœ CPU ์‚ฌ์šฉ๋Ÿ‰๋ณด๋‹ค ์„œ๋น„์Šค ํŠน์„ฑ ๊ธฐ๋ฐ˜ ํ™•์žฅ์ด ์ค‘์š”ํ•œ ๊ตฌ์กฐ์ž„. 

ํŠนํžˆ ์ฑ„ํŒ… ์„œ๋ฒ„๋Š” ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜ ์ฆ๊ฐ€์— ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜๊ณ , Backend API๋Š” ์š”์ฒญ๋Ÿ‰์— ๋”ฐ๋ผ ๋ถ€ํ•˜๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ.

๋”ฐ๋ผ์„œ Backend API์˜ RPS, Chat Server์˜ ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜์™€ ๊ฐ™์€ ์„œ๋น„์Šค๋ณ„ ์ง€ํ‘œ๋Š” Prometheus์™€ Prometheus Adapter๋ฅผ ์—ฐ๊ณ„ํ•œ Custom Metrics ๊ธฐ๋ฐ˜ HPA๋กœ ํ™•์žฅํ•˜๋„๋ก ์„ค๊ณ„ํ•จ.


6.3 Pod Affinity ์ ์šฉ

Devths Pod๊ฐ€ ๋™์ผํ•œ ๋…ธ๋“œ์— ๋ฌด์ž‘์œ„๋กœ ๋ฐฐ์น˜๋  ๊ฒฝ์šฐ ์ž์› ๊ฒฝํ•ฉ(Resource Contention)์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ๊ณผ SPOF์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Kubernetes์˜ Pod Anti-Affinity๋ฅผ ํ™œ์šฉํ•œ ์›Œํฌ๋กœ๋“œ ๋ถ„๋ฆฌ ์ „๋žต์„ ์ ์šฉํ•จ. Pod Affinity / Anti-Affinity ์„ค๊ณ„

Affinity๋Š” ์Šค์ผ€์ค„๋Ÿฌ์—๊ฒŒ Pod ๋ฐฐ์น˜ ์œ„์น˜๋ฅผ ์ œ์–ดํ•˜๋Š” ์„ค์ •์ž„. Request/Limit๋งŒ์œผ๋กœ๋Š” ํ•œ ๋…ธ๋“œ์— ํŠน์ • Pod๊ฐ€ ์ง‘์ค‘๋˜๋Š” ์ƒํ™ฉ์„ ๋ง‰์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ Affinity๋ฅผ ํ•จ๊ป˜ ์„ค๊ณ„ํ•ด์•ผ ํ•จ.

pod- AntiAffinity (Hard): ๊ฐ™์€ ์ข…๋ฅ˜์˜ Pod๋ฅผ ๋ฐ˜๋“œ์‹œ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋ฐฐ์น˜ ์กฐ๊ฑด ๋ถˆ๋งŒ์กฑ ์‹œ Pending โ€” ๊ฐ™์€ ๋…ธ๋“œ ๋ฐฐ์น˜๋ณด๋‹ค Pending์ด ๋‚˜์Œ

pod- AntiAffinity (Soft): ๊ฐ€๋Šฅํ•˜๋ฉด ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋ฐฐ์น˜ํ•˜๋˜, ๋ถˆ๊ฐ€ํ”ผํ•œ ๊ฒฝ์šฐ ํ—ˆ์šฉ ๋…ธ๋“œ๊ฐ€ ๋ถ€์กฑํ•œ ์ƒํ™ฉ์—์„œ๋„ ์„œ๋น„์Šค ์ค‘๋‹จ ๋ฐฉ์ง€

๋ชจ๋“  ์„œ๋น„์Šค๋Š” Taint ์—†์ด Worker Node 4๋Œ€ ์–ด๋””๋“  ์Šค์ผ€์ค„๋ง ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๊ณ , podAntiAffinity Soft ์„ค์ •์œผ๋กœ ๋ถ„์‚ฐ ๋ฐฐ์น˜๋ฅผ ์œ ๋„ํ•จ. PriorityClass๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ. Cluster Autoscaler๊ฐ€ ์ž์› ๋ถ€์กฑ ์‹œ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ๊ฐ•์ œ ์ถ•์ถœ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ.

์„œ๋น„์Šค ๋ณ„ ์–ดํ”ผ๋‹ˆํ‹ฐ ์„ค์ •

FE

affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      podAffinityTerm:
        labelSelector:
          matchLabels:
            app: frontend
        topologyKey: kubernetes.io/hostname
    - weight: 50
      podAffinityTerm:
        labelSelector:
          matchLabels:
            app: backend-api
        topologyKey: kubernetes.io/hostname

BE

affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      podAffinityTerm:
        labelSelector:
          matchLabels:
            app: frontend
        topologyKey: kubernetes.io/hostname
    - weight: 50
      podAffinityTerm:
        labelSelector:
          matchLabels:
            app: backend-api
        topologyKey: kubernetes.io/hostname

AI

affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      podAffinityTerm:
        labelSelector:
          matchLabels:
            app: ai-api
        topologyKey: kubernetes.io/hostname

HPA max 6์ด ๋…ธ๋“œ ์ˆ˜(4)๋ฅผ ์ดˆ๊ณผํ•˜๋”๋ผ๋„ Soft ์„ค์ •์ด๋ฏ€๋กœ ๊ฐ™์€ ๋…ธ๋“œ์— ๊ณต์กด ๊ฐ€๋Šฅํ•˜์—ฌ Pending ์—†์ด ์Šค์ผ€์ค„๋ง๋จ.


6.4 Node Autoscaler ์ „๋žต

ํŒŒ๋“œ ํ™•์žฅ๋งŒ์œผ๋กœ๋Š” ์Šค์ผ€์ค„๋ง์ด ์•ˆ ๋˜๋Š” ์ƒํ™ฉ์„ ๋ง‰๊ธฐ ์œ„ํ•ด Cluster Autoscaler๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•จ.

๋…ธ๋“œ ๊ทธ๋ฃน ์ตœ์†Œ ์ตœ๋Œ€
Worker Node 2 6

์ตœ๋Œ€ ํ™•์žฅ ์‹œ 26๊ฐœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒŒ๋“œ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Worker Node์˜ ๊ฐ€์šฉ ๋ฆฌ์†Œ์Šค์™€ ํŒŒ๋“œ ๋ฆฌ์†Œ์Šค ์š”์ฒญ๋Ÿ‰์„ ๊ณ ๋ คํ•  ๋•Œ ์ตœ์†Œ 4~5๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ํ•„์š”ํ•จ. (๊ฐœ์ˆ˜์™€ Request๋ฅผ ๊ณ ๋ ค)

kubeadm ํ™˜๊ฒฝ์—์„œ๋Š” Clustr AutoScaler๊ฐ€ ๋…ธ๋“œ๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•จ. ๋…ธ๋“œ ์ƒ์„ฑ ๊ธฐ๋Šฅ์€ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ๊ฐ€ ๋‹ด๋‹นํ•˜๊ณ , CA๋Š” ASG์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•จ



7. ์šด์˜ ๋„๊ตฌ ์„ค๊ณ„ ๋ฐ CICD ํŒŒ์ดํ”„๋ผ์ธ

image

7.1 Argo CD

Argo CD๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ Pod๋กœ ๋ฐฐ์น˜ํ•˜๊ณ  GitOps ๋ฐฉ์‹์œผ๋กœ ์šด์˜ํ•จ. ๋ชจ๋“  ๋ฐฐํฌ ์ •์˜๋Š” Git ์ €์žฅ์†Œ์˜ Helm Cahrt๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ํด๋Ÿฌ์Šคํ„ฐ๋Š” ํ•ด๋‹น ์ƒํƒœ๋ฅผ ์ž๋™ ๋™๊ธฐํ™”ํ•˜๋„๋ก ๊ตฌ์„ฑํ•จ. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ˆ˜๋™ ๋ฐฐํฌ๋ฅผ ์ค„์ด๊ณ  ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๋ช…ํ™•ํžˆ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Œ.


7.2 ๋ฐฐํฌ ๊ด€๋ฆฌ

๊ตฌ๋ถ„ ๋ฐฐํฌ ๋Œ€์ƒ ๋„๊ตฌ
ํ”Œ๋žซํผ ์„œ๋น„์Šค Prometheus, Loki, ArgoCD, External Secrets ๋“ฑ Helm
Devths ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ frontend, backend, chat, ai Kustomize

7.2.1 Helm Chart

Helm Chart๋Š” Prometheus, Loki, Tempo, Argo CD, External Secrets์™€ ๊ฐ™์€ ์™ธ๋ถ€ ํ”Œ๋žซํผ ์„œ๋น„์Šค ๋ฐฐํฌ์— ์‚ฌ์šฉํ•จ. ๊ณต์‹ Chart๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„ค์น˜์™€ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , values ํŒŒ์ผ์„ ํ†ตํ•ด ๊ธฐ๋ณธ ์„ค์ •๋งŒ ์กฐ์ •ํ•˜๋„๋ก ๊ตฌ์„ฑํ•จ.


7.2.2 Kustomize

Devths ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Frontend, Backend API, Chat Server, AI API)์€ Kustomize ๊ธฐ๋ฐ˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋กœ ๊ด€๋ฆฌํ•จ. ๊ธฐ๋ณธ ๋ฆฌ์†Œ์Šค๋Š” base๋กœ ์ •์˜ํ•˜๊ณ , nonprod์™€ prod ํ™˜๊ฒฝ์€ overlay๋ฅผ ํ†ตํ•ด ์„ค์ • ์ฐจ์ด๋ฅผ ๋ถ„๋ฆฌํ•จ.


7.3 External Secrets

ํ™˜๊ฒฝ๋ณ€์ˆ˜์™€ ๋ฏผ๊ฐ ์ •๋ณด๋Š” Parameter Store์™€ External Secrets Operator๋ฅผ ์—ฐ๋™ํ•ด ๊ด€๋ฆฌํ•จ. ์ฆ‰, Secret ์›๋ณธ์€ AWS ์ธก์— ๋‘๊ณ  Kubernetes์—๋Š” ํ•„์š”ํ•œ ์‹œ์ ์—๋งŒ ๋™๊ธฐํ™”ํ•จ. ์ด๋ฅผ ํ†ตํ•ด Git ์ €์žฅ์†Œ์— ๋น„๋ฐ€๊ฐ’์„ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ , ํ™˜๊ฒฝ๋ณ„ ์‹œํฌ๋ฆฟ๋„ ๋ถ„๋ฆฌํ•ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ.


7.4 ๋กค๋ง ๋ฐฐํฌ

์ƒˆ ์ด๋ฏธ์ง€๊ฐ€ Git์— ๋ฐ˜์˜๋˜๋ฉด Argo CD๊ฐ€ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๊ณ  Deployment๋ฅผ ๊ฐฑ์‹ ํ•จ. ์ƒˆ ํŒŒ๋“œ๋Š” readiness๊ฐ€ ํ†ต๊ณผ๋œ ๋’ค์—๋งŒ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์œผ๋ฉฐ, ์ดํ›„ ๊ธฐ์กด ํŒŒ๋“œ๊ฐ€ ์ˆœ์ฐจ ์ข…๋ฃŒ๋จ. ๋”ฐ๋ผ์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ, ์บ˜๋ฆฐ๋”, ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ์šด์˜ ์ค‘์ธ ์ƒํƒœ์—์„œ๋„ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ