๐Ÿ–ฅ๏ธMSA EKS

ํ™ฉ์—ฐ์ค€ยท2024๋…„ 10์›” 29์ผ

Lambda Service ๋ฐฑ์—”๋“œ ์ธํ„ด

๋ชฉ๋ก ๋ณด๊ธฐ
8/9
post-thumbnail

๊ธฐ์กด ์•„ํ‚คํ…์ณ

์ˆ˜๋Šฅ ๋ฌธ์ œ ์ƒ์„ฑ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ Github Actions, ArgoCD, AWS, Rancher๋ฅผ ํ™œ์šฉํ•ด MSA ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. LLM์„ ํ™œ์šฉํ•œ RAG ์‹œ์Šคํ…œ๊ณผ ํ”„๋กฌํ”„ํŒ… ์ฝ”๋“œ์˜ ์–‘์ด ์ฆ๊ฐ€ํ•˜๋ฉด์„œ, Django ๋ฐฑ์—”๋“œ ์ฝ”๋“œ์˜ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด์— FastAPI ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•ด LLM API๋ฅผ ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ์ œ์•ˆํ•˜์˜€๊ณ , ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์šฐ์„ , yaml ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์—ฌ Rancher์— ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ์„ ์ •์˜ํ•œ ํ›„, Rancher UI๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•จ์œผ๋กœ์จ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ ๋‹ค์Œ, Langchain์˜ langserve๋ฅผ ๋„์ž…ํ•ด ๊ธฐ์กด ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ์›ํ™œํ•˜๊ฒŒ ํ•˜์˜€๊ณ , langsmith๋ฅผ ํ†ตํ•ด LLM ํผํฌ๋จผ์Šค๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์‹œ์Šคํ…œ๋„ ๊ตฌ์ถ•ํ•˜์—ฌ ํ”„๋กฌํ”„ํŒ… ์ˆ˜์ • ์‹œ๊ฐ„์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ์—…๋ฐ์ดํŠธ ํšจ์œจ์„ฑ๊ณผ ํ”„๋กœ์ ํŠธ์˜ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์•„ํ‚คํ…์ณ

  • datadog ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. python3๋ฅผ monitoring ํ•˜๋ฉด์„œ rds๋„ ํ•จ๊ป˜ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • django, fastapi๊ฐ€ ์„œ๋กœ request๋ฅผ ๋ณด๋‚ผ ๋•Œ ingress ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  service๋ฅผ ํ†ตํ•ด api call์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    datadog์—์„œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

ingress๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์„ ๋•Œ ์žฅ์ 

Ingress๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  Kubernetes์˜ Service๋ฅผ ํ†ตํ•ด Pod ๊ฐ„ ํ˜ธ์ถœ์„ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์žฅ์ ์„ ์ƒ์„ธํžˆ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ๊ฐœ์„ 

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

2. ๋ณด์•ˆ ๊ฐ•ํ™”

  • ์™ธ๋ถ€ ๋…ธ์ถœ ์ตœ์†Œํ™”: Ingress๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ƒ์˜ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ Service๋กœ๋งŒ ํ†ต์‹ ํ•˜๋ฉด ์™ธ๋ถ€์— ๋„คํŠธ์›Œํฌ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์™ธ๋ถ€ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€ ์ „์šฉ ํ†ต์‹ : ClusterIP ํƒ€์ž…์˜ ์„œ๋น„์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •๋˜์–ด, ์™ธ๋ถ€๋กœ์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋‚˜ ์ค‘์š” ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ, ์™ธ๋ถ€์˜ ์ ‘๊ทผ์„ ์›์ฒœ ์ฐจ๋‹จํ•œ ์ƒํƒœ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • IAM ๋˜๋Š” VPC ๊ธฐ๋ฐ˜ ๋ณด์•ˆ: EKS์™€ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ๋Š” VPC๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ถ”๊ฐ€์ ์œผ๋กœ IAM(Identity and Access Management)์œผ๋กœ ๊ฐ ์„œ๋น„์Šค ๊ฐ„์˜ ๊ถŒํ•œ์„ ์„ธ๋ถ€์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋น„์šฉ ์ ˆ๊ฐ

  • ํด๋ผ์šฐ๋“œ ๋น„์šฉ ์ ˆ๊ฐ: Ingress๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž์— ๋”ฐ๋ผ ๋น„์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ingress๋Š” ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ, ์ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์‚ฌ์šฉ๋ฃŒ์™€ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ ๋น„์šฉ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ ํ†ต์‹ ๋งŒ์„ ์‚ฌ์šฉํ•˜๋Š” Service๋Š” ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ๋น„์šฉ์ด ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ธํ”„๋ผ ๋น„์šฉ ์ ˆ๊ฐ: Ingress์˜ ์ถ”๊ฐ€ ์„ค์ • ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ธฐ๋Šฅ์€ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ๋” ๋งŽ์ด ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Service๋ฅผ ์‚ฌ์šฉํ•ด ์ง์ ‘ ํ†ต์‹ ํ•  ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ค„์–ด๋“ค์–ด ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ๊ฐ„ํŽธํ•œ ์„ค์ •๊ณผ ๊ด€๋ฆฌ

  • ์„ค์ • ๋‹จ์ˆœํ™”: Service๋ฅผ ์ด์šฉํ•œ Pod ๊ฐ„ ํ†ต์‹ ์€ Ingress ์„ค์ •๋ณด๋‹ค ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. Service ์„ค์ •๋งŒ์œผ๋กœ๋„ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์–ด ์šด์˜ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ DNS๋ฅผ ํ†ตํ•œ ์ž๋™ํ™”๋œ ์ด๋ฆ„ ํ•ด์„: Kubernetes์˜ ๋‚ด๋ถ€ DNS๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ์„œ๋น„์Šค ์ด๋ฆ„์„ ์กฐํ•ฉํ•ด ์ž๋™์œผ๋กœ ์ฃผ์†Œ๋ฅผ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์™ธ๋ถ€ ๋„๋ฉ”์ธ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š” ์—†์–ด, ์„œ๋น„์Šค ์ด๋ฆ„์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ํ†ตํ•œ ์„ธ๋ถ€ ์ œ์–ด: Kubernetes NetworkPolicy๋ฅผ ํ™œ์šฉํ•ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋‚˜ ํŠน์ • ๋ ˆ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ Pod ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์„ ์„ธ๋ถ€์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์—๋งŒ ํ†ต์‹ ์„ ํ—ˆ์šฉํ•˜๋Š” ๋“ฑ, Ingress๋ณด๋‹ค ๋” ์„ธ๋ถ€์ ์ธ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

5. ํ™•์žฅ์„ฑ ๋ฐ ์œ ์—ฐ์„ฑ

  • ์ˆ˜ํ‰์  ํ™•์žฅ ์šฉ์ด: Service๋ฅผ ํ†ตํ•œ ํ†ต์‹ ์€ Service ๊ฐ์ฒด๊ฐ€ ์•Œ์•„์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ, Pod์˜ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•ด๋„ ์ž๋™์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์ด ์›ํ™œํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ ์ตœ์ ํ™”: Ingress๋Š” ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ์ฃผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๊ณ , ๋‚ด๋ถ€ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ๋Š” Service๊ฐ€ ๋” ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Service๋Š” Pod์˜ IP ์ฃผ์†Œ๊ฐ€ ๋ฐ”๋€Œ๋”๋ผ๋„ Kubernetes DNS๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋ฏ€๋กœ, ๊ฐ€์šฉ์„ฑ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.

6. ์‹ ๋ขฐ์„ฑ ํ–ฅ์ƒ

  • ๋‚ด๋ถ€ ์„œ๋น„์Šค ๋ณต๊ตฌ์™€ ์ž๋™ํ™”: Service๋Š” Kubernetes ์ปจํŠธ๋กค๋Ÿฌ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ, Pod๊ฐ€ ์ฃฝ๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋”๋ผ๋„ DNS๊ฐ€ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์–ด ์ง€์†์ ์ธ ์„œ๋น„์Šค ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€์†์ ์ธ ํ—ฌ์Šค ์ฒดํฌ: Kubernetes๋Š” ๊ฐ Pod์˜ ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ๋น„์ •์ƒ Pod๋ฅผ ์ž๋™์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. Ingress๋ณด๋‹ค ์ง์ ‘์ ์ธ ํ†ต์‹ ์„ ํ†ตํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ Pod์— ๋Œ€ํ•œ ๋น ๋ฅธ ๋Œ€์ฒ˜๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

MORE

  • ์™ธ๋ถ€ user๊ฐ€ ์ ‘๊ทผํ•  ๋•Œ๋Š” ์™ธ๋ถ€ user โ†’ IGW โ†’ ALB/NLB โ†’ Public Subnet โ†’ Ingress Controller โ†’ Service โ†’ Pod

  • ๋‚ด๋ถ€ ํ˜ธ์ถœํ•  ๋•Œ pod(BE) -> Service -> pod(LLM)
    infra ์žฅ์• ๊ฐ€ ์ผ์–ด๋‚˜๋ฉด pod๊ฐ€ degraded ์ƒํƒœ๋กœ ๋ณ€ํ•œ๋‹ค. ์ƒˆ๋กœ ์ƒ๊ธด pod๋Š” ip๊ฐ€ ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ์ •๋œ service ip๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฐ๊ฒฐํ•˜๊ฒŒ๋” ๋˜์–ด์žˆ๋‹ค. (kernel์˜ iptable์„ ์ฐธ์กฐํ•ด์„œ ๊ณ ์ •์  ip์™€ ๊ฐ€๋ณ€์  ip๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์ค€๋‹ค)

  • pod์— container๊ฐ€ 2๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ?
    ๋‚ด ํ”„๋กœ์ ํŠธ๋Š” datadog์„ daemonset pod๋กœ ์ง€์ •ํ•ด๋†“์•„์„œ, datadog์ด pod(์„œ๋ฒ„), db๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, pod๋‚ด container๋งˆ๋‹ค APM์„ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด pod๋‚ด๋ถ€์— container๋ฅผ 1๊ฐœ ๋” ๋„์›Œ์„œ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•ด์ค€๋‹ค.

  • git push๋ฅผ ํ•˜๋ฉด tekton์ด image๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  image ์ €์žฅ์†Œ์— ์ €์žฅํ•ด์ค€๋‹ค. k8s(kubelet)๋Š” ์ด ์ด๋ฏธ์ง€๋ฅผ pullํ•˜๊ณ  ArgoCD๊ฐ€ GitOps ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๊ณ , ์ด๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ Deployment๋ฅผ ์—…๋ฐ์ดํŠธํ•จ์œผ๋กœ์จ ์ƒˆ๋กœ์šด Pod๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • IaC(Kubernetes YAML ํŒŒ์ผ)๋Š” ArgoCD์™€ ์—ฐ๋™๋˜์–ด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์„ ์–ธ์  ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ReplicaSet์˜ ๊ฐœ์ˆ˜, Ingress ์„ค์ •(AWS Gateway ์—ฐ๋™), Nginx ํ™œ์šฉ ๋“ฑ ๋‹ค์–‘ํ•œ ์„ค์ •์„ ์ฝ”๋“œ๋กœ ์ •์˜ํ•˜๊ณ  ์ž๋™์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

sw architecture

CI/CD ์™€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ๋“ค์„ ์ •๋ฆฌํ•˜์—ฌ SW Architecture์„ ๋งŒ๋“ค์–ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

Trouble Shooting

RAG๊ณผ์ •์—์„œ GPT 4o -> o1 preview๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด์„œ, ๋ฌธ์ œ ์ƒ์„ฑ ์‹œ๊ฐ„์ด ๊ธธ์–ด์กŒ๋‹ค. ์ด ์‹œ๊ฐ„์ด 1๋ถ„์„ ๋„˜์–ด๊ฐˆ๋•Œ ๊ณ„์†ํ•ด์„œ CORS ERROR๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ์ผ์–ด๋‚ฌ๋‹ค. ๋”ฐ๋ผ์„œ, EC2 Load Balancer์˜ limit ์‹œ๊ฐ„์„ 60์ดˆ์—์„œ 180์ดˆ๋กœ ์ฆ๊ฐ€์‹œ์ผฐ๋‹ค. ๋” ์ด์ƒ cors error ๋Š” ์—†์—ˆ๋‹ค !!
(์ฒ˜์Œ์—๋Š” llmops์˜ uvicorn, django์˜ gunicorn, django backend์˜ csrf ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ทผ๋ณธ์ ์ธ ์›์ธ์€ load balancer์— ์žˆ์—ˆ๋‹ค. cors error๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ธฐ์–ตํ•˜์ž. middleware์— ๋Œ€ํ•ด ๋” ๊ณต๋ถ€ํ•ด๋ณด์ž.)

Pod degraded


backend ์„œ๋ฒ„์˜ dependency๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ  ๊ธฐ๋Šฅ์ด ๊ณ„์†ํ•ด์„œ ์ถ”๊ฐ€๋˜๋ฉด์„œ pod ์˜ ์šฉ๋Ÿ‰์ด ๋ถ€์กฑํ•œ ์ƒํ™ฉ์ด ๋‚˜ํƒ€๋‚ฌ๋‹ค..! ephemeral-storage์˜ limit์„ ๊ฐ•์ œ๋กœ ๋Š˜๋ ค์„œ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค ํ•˜์ง€๋งŒ, AWS EKS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด node EC2 tier๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฐ–์— ์—†๋‹ค ๐Ÿฅฒ

DOCKER IMAGE ์šฉ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด๋‹ค docker slim, alpine์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. slim์„ ์ ์šฉ์‹œ์ผœ dev ์„œ๋ฒ„์— ๋ฐฐํฌํ•ด๋ณด์•˜๋Š”๋ฐ, ์ผ๋‹จ์€ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค. image ํฌ๊ธฐ๋„ ๊ฑฐ์˜ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์—ˆ๋‹ค !!
๐Ÿค”ํ•˜์ง€๋งŒ, ์ข€ ๋” ์ง€์ผœ๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

์ฐธ๊ณ 

0๊ฐœ์˜ ๋Œ“๊ธ€