Kubeadm - 100-hours-a-week/9-team-Devths-WIKI GitHub Wiki
๋ชฉ์ฐจ (ํผ์น๊ธฐ/์ ๊ธฐ)
Devths ์๋น์ค๋ ๊ฐ์ธ ํฌํธํด๋ฆฌ์ค ๊ธฐ๋ฐ ์ฑ์ฉ ํ๋ซํผ์ผ๋ก ์ปค๋ฎค๋ํฐ, ์ฑํ , AI ์ฑ๋ด, ์บ๋ฆฐ๋ ๊ธฐ๋ฅ์ ํฌํจํ ๋ค์์ ์๋น์ค๋ก ๊ตฌ์ฑ๋จ.
์ด๊ธฐ์๋ Docker ๊ธฐ๋ฐ ์๋น์ค์ AWS Auto Scaling Group์ ํ์ฉํ์ฌ ์ธ์คํด์ค ๋จ์ ํ์ฅ์ ์ํํ๋ ๊ตฌ์กฐ(V2)๋ก ์ด์ํจ.
๊ทธ๋ฌ๋ ์ค์๊ฐ ์ฑํ ๊ณผ AI ์ถ๋ก ์ด ๊ฒฐํฉ๋ ์๋น์ค ํน์ฑ์ ํธ๋ํฝ ์คํ์ดํฌ ๋์, ๋ฐฐํฌ ์์ ์ฑ, ๋ฆฌ์์ค ํจ์จ์ฑ ์ธก๋ฉด์์ ์ธํ๋ผ ๊ตฌ์กฐ์ ํ๊ณ๊ฐ ๋ฐ์ํจ.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ปจํ ์ด๋ ๋จ์ ์ค์ผ์คํธ๋ ์ด์ ์์คํ ์ธ Kubernetes๋ฅผ ๋์ ํ๊ณ , kubeadm ๊ธฐ๋ฐ ํด๋ฌ์คํฐ๋ฅผ ์ง์ ๊ตฌ์ถํ์ฌ ์๋น์ค ํ์ฅ์ฑ๊ณผ ์ด์ ์์ ์ฑ์ ํ๋ณดํ๋ ๊ฒ์ ๋ชฉํ๋ก ํจ.
๊ธฐ์กด ์ธํ๋ผ๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ด์๋จ.
- 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 ์คํธ๋ฆฌ๋ฐ ์๋ต์ ๊ฒฝ์ฐ ๋ฐฐํฌ ์ ์ฌ์ฉ์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ.
์ด๋ฌํ ๋ฌธ์ ๋ ์๋น์ค ์ฑ์ฅ ์ดํ ์ด์ ์์ ์ฑ์ ์ง์ ์ ์ธ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์, ์ปจํ ์ด๋ ๋จ์ ์๋ ๋ณต๊ตฌ์ ์ด๋จ์ ํ์ฅ์ด ๊ฐ๋ฅํ ์ค์ผ์คํธ๋ ์ด์ ์์คํ ์ด ํ์ํจ.
Devths ์ธํ๋ผ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ค์ ๊ธฐ๋ฐ์ผ๋ก Kubernetes ๋์ ์ ์ค๊ณํจ.
๊ฐ์ค 1. ์ปจํ ์ด๋ ๋จ์ ์ด๋จ์ ์ค์ผ์ผ๋ง
VM ํ์ฅ์ด ์๋ Pod ๋จ์ ํ์ฅ(HPA) ์ ์ ์ฉํจ.
์ด๋ฏธ ํ๋ณด๋ ์์ปค ๋ ธ๋ ์์์ ํ์ฉํ์ฌ ์ด๋จ์๋ก ํ๋๋ฅผ ๋ณต์ ํจ์ผ๋ก์จ ํธ๋ํฝ ์คํ์ดํฌ๋ฅผ ์ฆ๊ฐ์ ์ผ๋ก ๋ฐฉ์ดํ ์ ์์.
๊ฐ์ค 2. ๋ฉ๋ชจ๋ฆฌ ์ง์ฝ์ ์ํฌ๋ก๋์ ์์ ์ ๋ณต๊ตฌ
AI ์๋น์ค์ Resource Request์ Limit์ ์ค์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํต์ ํจ.
OOM ๋ฐ์ ์ ์ ์ฒด ์ธ์คํด์ค๊ฐ ๋ค์ด๋๋ ๊ฒ์ด ์๋๋ผ ํด๋น ํ๋๋ง ์ฌ์์(Self-Healing) ๋๋๋ก ์ค๊ณํจ.
์ด๋ฅผ ํตํด ์ฅ์ ๋ณต๊ตฌ ์๊ฐ์ ํฌ๊ฒ ๋จ์ถํ ์ ์์.
๊ฐ์ค 3. ๋ฌด์ค๋จ ๋ฐฐํฌ ๊ตฌํ
Readiness Probe๋ฅผ ํ์ฉํ์ฌ ์ ๋ฒ์ ํ๋๊ฐ ์์ ํ ์ค๋น๋ ํ ํธ๋ํฝ์ ์ ํํจ.
์ด๋ฅผ ํตํด ๋ฐฐํฌ ๊ณผ์ ์์ WebSocket ์ฐ๊ฒฐ ๋จ์ ์ด๋ ์คํธ๋ฆฌ๋ฐ ์ค๋จ์ ๋ฐฉ์งํจ.
๊ฒฐ๊ณผ์ ์ผ๋ก Kubernetes ๋์ ์ ํตํด ๋ค์๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ธฐ๋ํจ.
- ์ด๋จ์ ํ์ฅ ๊ฐ๋ฅํ ์๋น์ค ๊ตฌ์กฐ ํ๋ณด
- ์ฅ์ ๋ฐ์ ์ ์๋ ๋ณต๊ตฌ(Self-Healing)
- ๋ฌด์ค๋จ ๋กค๋ง ๋ฐฐํฌ
- ๋ฆฌ์์ค ๋จ์ ํ์ฅ์ผ๋ก ๋น์ฉ ํจ์จ ํฅ์
Kubernetes ๋์ ๊ณผ์ ์์ ECS, EKS, kubeadm ๊ธฐ๋ฐ Kubernetes๋ฅผ ๋น๊ต ๊ฒํ ํจ.
ECS ๋๋น Kubernetes ์ ํ
ECS๋ AWS์ ์ข ์๋๋ ๊ตฌ์กฐ๋ก ๋ฉํฐ ํด๋ผ์ฐ๋๋ ์จํ๋ ๋ฏธ์ค ํ์ฅ์ฑ์ด ์ ํ๋จ.
๋ฐ๋ฉด Kubernetes๋ ๊ธ๋ก๋ฒ ์คํ์์ค ํ์ค์ผ๋ก ๋ค์ํ ์ธํ๋ผ ํ๊ฒฝ์์ ๋์ผํ ์ด์ ๋ชจ๋ธ์ ์ ์งํ ์ ์์.
EKS ๋๋น kubeadm ์ ํ
EKS๋ ๊ด๋ฆฌํ Kubernetes ์๋น์ค๋ก ์ด์ ๋ถ๋ด์ด ์ ๋ค๋ ์ฅ์ ์ด ์์.
ํ์ง๋ง Control Plane ๋ด๋ถ ๋์์ด ๋ธ๋๋ฐ์ค ํํ๋ก ์ ๊ณต๋์ด ๋คํธ์ํฌ ์ ์ฑ ์ด๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ์ธ๋ฐํ ์ ์ด๊ฐ ์ด๋ ค์.
Devths ์๋น์ค๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก kubeadm ๊ธฐ๋ฐ ํด๋ฌ์คํฐ๋ฅผ ์ ํํจ.
- ๋คํธ์ํฌ ์ ์ฑ (L3/L4) ์ธ๋ฐ ์ ์ด ํ์
- CNI ๋ฐ ํด๋ฌ์คํฐ ๋คํธ์ํฌ ์ปค์คํฐ๋ง์ด์ง ํ์
- ์ธํ๋ผ ์ด์ ๊ตฌ์กฐ๋ฅผ ์ง์ ์ ์ดํ์ฌ ๊ธฐ์ ์ดํด๋ ํ๋ณด
๋ฐ๋ผ์ ์ด์ ๋ณต์ก์ฑ์ ๊ฐ์ํ๋๋ผ๋ ์ธํ๋ผ ์ฃผ๋๊ถ ํ๋ณด๋ฅผ ์ํด kubeadm ๊ธฐ๋ฐ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ๋ ์ ๋ต์ ์ฑํํจ.
์ธ๋ถ ํธ๋ํฝ์ NLB๋ฅผ ํตํด ์ ์ ๋๊ณ , NodePort๋ฅผ ํตํด Gateway API ์ปจํธ๋กค๋ฌ๋ก ์ ๋ฌ๋จ.
์ดํ Gateway์ ๋ผ์ฐํ ์ ์ฑ ์ ๋ฐ๋ผ ๊ฐ ์๋น์ค์ ClusterIP Service๋ก ๋ถ๊ธฐ๋๊ณ , ์ต์ข ์ ์ผ๋ก ํ๋์ ์ฐ๊ฒฐ๋จ. ํ๋ ๊ฐ ํต์ ์ Calico CNI๊ฐ ๋ด๋นํจ.
Devths๋ prod์ nonprod๋ฅผ ๋ถ๋ฆฌํ 2๊ฐ ํด๋ฌ์คํฐ ์ ๋ต์ผ๋ก ์ค๊ณํจ. nonprod๋ ๊ธฐ๋ฅ ๊ฒ์ฆ, ์ฅ์ ์ฌํ, ๋ฐฐํฌ ํ ์คํธ, ์ธํ๋ผ ์คํ์ ์ํ ํ๊ฒฝ์ด๊ณ , prod๋ ์ค์ฌ์ฉ์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ์์ ์ฑ ์ค์ฌ ํ๊ฒฝ์.
prod์์๋ Stateless ์๋น์ค๋ง Kubernetes ๋ด๋ถ์ ๋ฐฐ์นํ๊ณ , PostgreSQL์ RDS, Redis๋ ElastiCache, ๋ฉ์์ง ํ์ Vector DB๋ ๊ณ ๊ฐ์ฉ์ฑ ์๋น์ค๋ก ๋ถ๋ฆฌํจ.
์ด๋ ํต์ฌ ๋ฐ์ดํฐ ๊ณ์ธต์ ์ ํ๋ฆฌ์ผ์ด์ ํด๋ฌ์คํฐ ์ฅ์ ์ ๋ถ๋ฆฌํด ์ด์ ๋ฆฌ์คํฌ๋ฅผ ๋ฎ์ถ๊ธฐ ์ํจ์.
์ด ๊ตฌ์กฐ์์ Kubernetes๋ ์ ํ๋ฆฌ์ผ์ด์ ์คํ, ํ์ฅ, ๋ฐฐํฌ, ๋ณต๊ตฌ๋ฅผ ๋ด๋นํ๊ณ , ๋ฐ์ดํฐ ๊ณ์ธต์ ๋ด๊ตฌ์ฑ๊ณผ ๋ฐฑ์ ์ฒด๊ณ๊ฐ ํ๋ณด๋ ์ธ๋ถ ์๋น์ค๊ฐ ๋ด๋นํจ.
์ด๊ธฐ prod ๊ธฐ์ค ๊ถ์ฅ ํ ํด๋ก์ง๋ ๋ค์๊ณผ ๊ฐ์.
| ๊ตฌ๋ถ | ์๋ | ์ญํ |
|---|---|---|
| Master Node | 3 | API Server, Scheduler, Controller Manager |
| Worker Node | 4 | Frontend, Backend, Chat, API ๋ฐฐ์น |
| ์ด ๋ ธ๋ ์ | 7 | ์ต์ ์ด์ ๊ธฐ์ค |
AI ์ํฌ๋ก๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํฌ๊ณ ์ผ๋ฐ API์ ์์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฏ๋ก ์ ์ฉ ์์ปค ๋๋ taint/toleration ๊ธฐ๋ฐ ๋ถ๋ฆฌ๋ฅผ ๊ถ์ฅํจ.
nonprod์์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฟ ์๋๋ผ Statefullํ ์ปดํฌ๋ํธ๋ ํด๋ฌ์คํฐ ๋ด๋ถ์ ๋ฐฐ์นํจ.
DB๊น์ง Pod + PV/PVC๋ก ์ฌ๋ ค์ ์๋น์ค ๊ฐ ํตํฉ ํ ์คํธ์ ์ฅ์ ๋ณต๊ตฌ ์คํ์ ๋น ๋ฅด๊ฒ ํ ์ ์๋๋ก ๊ตฌ์ฑํจ. ์คํ ๋ฆฌ์ง๋ EBS ๊ธฐ๋ฐ ๋์ ํ๋ก๋น์ ๋์ ์ฌ์ฉํด ํ ์คํธ ํ๊ฒฝ์์ ํ์ํ ๋ณผ๋ฅจ์ ์ ์ฐํ๊ฒ ์์ฑํ๋๋ก ์ค๊ณํจ.
์ด ํ๊ฒฝ์ ๋น์ฉ ์ ๊ฐ๊ณผ ์คํ์ฑ์ด ์ฐ์ ์ด๋ฉฐ, ์ด์ ํ๊ฒฝ ์์ค์ ๊ณ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๋ ๊ตฌ์กฐ๋ก ๋ณด์ง๋ ์์. ์ฆ, ๋ฐ์ดํฐ ์์์ฑ๋ณด๋ค ๋น ๋ฅธ ์ฌํ์ฑ๊ณผ ํ๊ฒฝ ๋ ๋ฆฝ์ฑ์ด ๋ ์ค์ํ ํด๋ฌ์คํฐ์.
| ๊ตฌ๋ถ | ์๋ | ์ญํ |
|---|---|---|
| Master Node | 3 | API Server, Scheduler, Controller Manager |
| Worker Node | 4 | Frontend, Backend, Chat, API ๋ฐฐ์น |
| DB Node | 2 | Postgre, Redis, Kafka, VectorDB ๋ฐฐ์น |
| ์ด ๋ ธ๋ ์ | 9 | ์ต์ ์ด์ ๊ธฐ์ค |
Devths ์๋น์ค ํน์ฑ:
- Chat Server: SSE ๊ธฐ๋ฐ ๋จ๋ฐฉํฅ ์คํธ๋ฆฌ๋ฐ
- AI API: SSE ๊ธฐ๋ฐ ์คํธ๋ฆฌ๋ฐ ์๋ต
- Backend: ์ผ๋ฐ REST API
- Frontend: ์ ์ ์์ฐ + API ํ๋ก์
- ํ ๊ท๋ชจ: 2~5์ธ ์๊ท๋ชจ
- ํ๊ฒฝ: kubeadm + AWS
ํธ๋ํฝ ํน์ฑ:
- SSE ์ฐ๊ฒฐ์ด ์ ์ฒด ์ฐ๊ฒฐ์ ์๋น ๋น์ค ์ฐจ์ง
- ์ฅ์๊ฐ ์ฐ๊ฒฐ (AI ์คํธ๋ฆฌ๋ฐ ์ต๋ ์๋ถ)
- ์ฐ๊ฒฐ ์ > ์ด๋น ์์ฒญ ์ ํจํด
๊ณ์ธต 1: ์ธ๋ถ ์ง์ (AWS NLB)
๊ณ์ธต 2: ํด๋ฌ์คํฐ ์ง์ (NodePort)
๊ณ์ธต 3: L7 ๋ผ์ฐํ (Gateway API ๊ตฌํ์ฒด)
๊ณ์ธต 4: Pod ๊ฐ ํต์ (CNI)
๊ณ์ธต 5: ์ ์ฑ ์ ์ด (NetworkPolicy)
๊ณ์ธต 6: ๊ด์ธก (Observability)
์ ํ์ง ๋น๊ต
| ํญ๋ชฉ | 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 ์ ํ
๊ธฐ์กด ์ด์์ 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) ํ์ต์ด ์ ํ ํ์.
ํ๋ ๊ฐ ๋คํธ์ํฌ๋ 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 ์ ํ์ ๊ฒํ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ .
์ธ์ฆ์ ๋ฐ๊ธ๊ณผ ๊ฐฑ์ ์ cert-manager๋ก ์๋ํํจ. cert-manager๋ Kubernetes ํด๋ฌ์คํฐ ๋ด๋ถ์์ TLS ์ธ์ฆ์๋ฅผ ๋ฐ๊ธยท๊ฐฑ์ ํ๋ ํ์ค ๋๊ตฌ์ด๋ฉฐ, Letโs Encrypt์ ์ฐ๋ ๊ฐ๋ฅํจ.
ALB + ACM์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ๊ฒ ๋๋ค๋ฉด, AWS ์ธ๋ถ ๋ฆฌ์์ค์ด๋ฏ๋ก ๋ฒค๋ ์ข ์์ ์ด๊ฒ ๋ฐ๋๊ฒ ๋๋ค. ๋ํ, ALB๊ฐ ์๋จ์์ ํค๋๋ฅผ ๋ณ์กฐํ๊ฑฐ๋ ๋ฏธ๋ฆฌ ์ฒ๋ฆฌ๋ฅผ ํด๋ฒ๋ฆฌ๋ฉด, Kong์ ์ธ๋ฐํ ํธ๋ํฝ ์ ์ด ๊ธฐ๋ฅ์ด๋ mTLS(์ํธ TLS) ๊ฐ์ ๊ณ ๊ธ ๋ณด์ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ์ถฉ๋์ด ๋ฐ์ํ๊ฑฐ๋ ์ค์ ์ด ๊ผฌ์ผ ์ ์์
prod์์๋ ํต์ฌ DB๋ฅผ Kubernetes ๋ด๋ถ์ ์ฌ๋ฆฌ์ง ์์. EBS๋ ๋จ์ผ AZ ์์กด์ฑ๊ณผ ๋ ธ๋ ์ ์ฝ์ด ์์ผ๋ฏ๋ก, ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ์ฟ ๋ฒ๋คํฐ์ค ๋ด๋ถ์์ ์ฅ๊ธฐ ์ด์ํ๋ ๊ฒ๋ณด๋ค RDS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ์ฑ ์ธก๋ฉด์์ ๋ ์ ์ ํจ. ๋ฐ๋ผ์ prod์์ PV/PVC๋ ์ฃผ๋ก ๋ณด์กฐ์ ์ํ ์ ์ฅ์ด๋ ๋ด๋ถ ์ด์ ๋๊ตฌ์ฉ์ผ๋ก ์ ํํจ.
nonprod์์๋ ์์ฒด Stateful ์ํฌ๋ก๋๋ฅผ ์คํํ ์ ์๋๋ก PV/PVC ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํจ. EBS StorageClass๋ฅผ ํตํด ๋์ ํ๋ก๋น์ ๋ํ๊ณ , DB Pod๋ StatefulSet์ผ๋ก ๊ตฌ์ฑํจ. ์ด ํ๊ฒฝ์ ์ด์ ์์ค์ ๋ฐ์ดํฐ ๋ณด์กด๋ณด๋ค ๊ฐ๋ฐยท๊ฒ์ฆ ๋ชฉ์ ์ด ์ฐ์ ์ด๋ฏ๋ก ์คํ ๋ฆฌ์ง ๊ตฌ์กฐ๋ ๋จ์ํ๊ณ ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฐฉํฅ์ผ๋ก ์ค๊ณํจ.
Stateless ์๋น์ค๋ ๋ชจ๋ Deployment๋ก ๋ฐฐํฌํจ. ReplicaSet์ Deployment ํ์์์ ์๋ ๊ด๋ฆฌ๋๋ฏ๋ก ์ค๊ณ ๋ฌธ์์์๋ ์ ์ด ๋จ์๋ฅผ Deployment๋ก ํต์ผํ๋ ๊ฒ์ด ์์ฐ์ค๋ฌ์. ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ์ ์ฉํด ์ ํ๋๊ฐ ์ค๋น๋ ํ ๊ธฐ์กด ํ๋๋ฅผ ์์ฐจ ์ข ๋ฃํ๋๋ก ๊ตฌ์ฑํจ.
์๋น์ค๋ณ ํ์ฅ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ธ๊ฐ.
์๋น์ค๋ณ ํ์ฅ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ธ๊ฐ.
| ์๋น์ค | ํ์ฅ ๊ธฐ์ค | ์ต์ 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๋ก ํ์ฅํ๋๋ก ์ค๊ณํจ.
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/hostnameBE
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/hostnameAI
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: ai-api
topologyKey: kubernetes.io/hostnameHPA max 6์ด ๋ ธ๋ ์(4)๋ฅผ ์ด๊ณผํ๋๋ผ๋ Soft ์ค์ ์ด๋ฏ๋ก ๊ฐ์ ๋ ธ๋์ ๊ณต์กด ๊ฐ๋ฅํ์ฌ Pending ์์ด ์ค์ผ์ค๋ง๋จ.
ํ๋ ํ์ฅ๋ง์ผ๋ก๋ ์ค์ผ์ค๋ง์ด ์ ๋๋ ์ํฉ์ ๋ง๊ธฐ ์ํด Cluster Autoscaler๋ฅผ ํจ๊ป ์ฌ์ฉํจ.
| ๋ ธ๋ ๊ทธ๋ฃน | ์ต์ | ์ต๋ |
|---|---|---|
| Worker Node | 2 | 6 |
์ต๋ ํ์ฅ ์ 26๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ํ๋๊ฐ ์คํ๋ ์ ์์ผ๋ฉฐ, Worker Node์ ๊ฐ์ฉ ๋ฆฌ์์ค์ ํ๋ ๋ฆฌ์์ค ์์ฒญ๋์ ๊ณ ๋ คํ ๋ ์ต์ 4~5๊ฐ์ ๋ ธ๋๊ฐ ํ์ํจ. (๊ฐ์์ Request๋ฅผ ๊ณ ๋ ค)
kubeadm ํ๊ฒฝ์์๋ Clustr AutoScaler๊ฐ ๋ ธ๋๋ฅผ ์ง์ ์์ฑํ์ง ๋ชปํจ. ๋ ธ๋ ์์ฑ ๊ธฐ๋ฅ์ ํด๋ผ์ฐ๋ ์ธํ๋ผ๊ฐ ๋ด๋นํ๊ณ , CA๋ ASG์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ์ปจํธ๋กค๋ฌ ์ญํ ๋ง ์ํํจ
Argo CD๋ ํด๋ฌ์คํฐ ๋ด๋ถ Pod๋ก ๋ฐฐ์นํ๊ณ GitOps ๋ฐฉ์์ผ๋ก ์ด์ํจ. ๋ชจ๋ ๋ฐฐํฌ ์ ์๋ Git ์ ์ฅ์์ Helm Cahrt๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ด๋ฆฌํ๊ณ , ํด๋ฌ์คํฐ๋ ํด๋น ์ํ๋ฅผ ์๋ ๋๊ธฐํํ๋๋ก ๊ตฌ์ฑํจ. ์ด๋ ๊ฒ ํ๋ฉด ์๋ ๋ฐฐํฌ๋ฅผ ์ค์ด๊ณ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๋ช ํํ ์ถ์ ํ ์ ์์.
| ๊ตฌ๋ถ | ๋ฐฐํฌ ๋์ | ๋๊ตฌ |
|---|---|---|
| ํ๋ซํผ ์๋น์ค | 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๋ฅผ ํตํด ์ค์ ์ฐจ์ด๋ฅผ ๋ถ๋ฆฌํจ.
ํ๊ฒฝ๋ณ์์ ๋ฏผ๊ฐ ์ ๋ณด๋ Parameter Store์ External Secrets Operator๋ฅผ ์ฐ๋ํด ๊ด๋ฆฌํจ. ์ฆ, Secret ์๋ณธ์ AWS ์ธก์ ๋๊ณ Kubernetes์๋ ํ์ํ ์์ ์๋ง ๋๊ธฐํํจ. ์ด๋ฅผ ํตํด Git ์ ์ฅ์์ ๋น๋ฐ๊ฐ์ ๋จ๊ธฐ์ง ์๊ณ , ํ๊ฒฝ๋ณ ์ํฌ๋ฆฟ๋ ๋ถ๋ฆฌํด ๊ด๋ฆฌํ ์ ์์.
์ ์ด๋ฏธ์ง๊ฐ Git์ ๋ฐ์๋๋ฉด Argo CD๊ฐ ๋ณ๊ฒฝ์ ๊ฐ์งํ๊ณ Deployment๋ฅผ ๊ฐฑ์ ํจ. ์ ํ๋๋ readiness๊ฐ ํต๊ณผ๋ ๋ค์๋ง ํธ๋ํฝ์ ๋ฐ์ผ๋ฉฐ, ์ดํ ๊ธฐ์กด ํ๋๊ฐ ์์ฐจ ์ข ๋ฃ๋จ. ๋ฐ๋ผ์ ์ปค๋ฎค๋ํฐ, ์บ๋ฆฐ๋, ์ฑํ ๊ธฐ๋ฅ์ ์ด์ ์ค์ธ ์ํ์์๋ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํจ.