๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

AWS Cloud

AWS EKS๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์‹ค๋ฌด EKS ๊ตฌ์ถ• ๋ฐฉ๋ฒ•

๋ฐ˜์‘ํ˜•

๐Ÿš€ AWS EKS์™€ ๋…ธ๋“œ ๊ทธ๋ฃน์œผ๋กœ ํŠธ๋ž˜ํ”ฝ ๊ฑฑ์ • ์—†๋Š” ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

1. ์™œ EKS์ธ๊ฐ€?

  • AWS Elastic Kubernetes Service(EKS)๋Š” ๊ด€๋ฆฌํ˜• Kubernetes ์„œ๋น„์Šค๋กœ, ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์„ AWS๊ฐ€ ์ž๋™์œผ๋กœ ์šด์˜ํ•ด ์ค๋‹ˆ๋‹ค.
  • ๋†’์€ ๊ฐ€์šฉ์„ฑ, ๋ณด์•ˆ, ์ž๋™ ์—…๊ทธ๋ ˆ์ด๋“œ์™€ ํ•จ๊ป˜ ๊ธฐ์—…์šฉ ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค .

EKS ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์˜์ƒ์„ ๋ณด๋ฉด์„œ ๋”ฐ๋ผํ•˜์„ธ์š” : https://youtu.be/Gpen9aW4X1M


๐Ÿ“ฆ Pod (ํŒŒ๋“œ)

  • ์ •์˜: Kubernetes์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์‹คํ–‰ ๋‹จ์œ„๋กœ, ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ(container)๋ฅผ ํฌํ•จํ•˜๋Š” ๋…ผ๋ฆฌ์  ํ˜ธ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ IP ์ฃผ์†Œ์™€ ๋„คํŠธ์›Œํฌ·์Šคํ† ๋ฆฌ์ง€(volume) ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค
  • ํŠน์ง•:
    • ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ๋™์ผ ๋…ธ๋“œ์— ํ•จ๊ป˜ ๋ฐฐ์น˜๋˜์–ด localhost๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์„œ๋กœ ๋ฐ€์ ‘ํžˆ ์—ฐ๊ด€๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ(์˜ˆ: ์›น์„œ๋ฒ„ + ์‚ฌ์ด๋“œ์นด ๋กœ๊น…)๊ฐ€ ๊ฐ™์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค
    • ๋ผ์ดํ”„์‚ฌ์ดํด์ด ํ๋ธŒ ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ์Šค์ผ€์ค„๋Ÿฌ์—๊ฒŒ ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค: ๋ฆฌ์†Œ์Šค ๋ถ€์กฑ, ๋…ธ๋“œ ์žฅ์•  ๋“ฑ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์žฌ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค

๐Ÿ–ฅ Node (๋…ธ๋“œ)

  • ์ •์˜: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฌผ๋ฆฌ ๋˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์ž…๋‹ˆ๋‹ค. Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์›Œ์ปค(worker)๋ฅผ ๋‹ด๋‹นํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ Pod๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค
  • ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:
    • kubelet: ๋…ธ๋“œ์˜ ์—์ด์ „ํŠธ๋กœ, Pod์˜ ์ƒํƒœ๋ฅผ ๊ฐ์‹œํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค
    • ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„: Docker๋‚˜ containerd์ฒ˜๋Ÿผ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ํ’€๋ง ๋ฐ ์‹คํ–‰์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
    • kube-proxy: ํŒŒ๋“œ ๊ฐ„ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•ด ์ค๋‹ˆ๋‹ค
  • ๊ด€๋ฆฌ:
    • ๋…ธ๋“œ๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์— ์˜ํ•ด ๋“ฑ๋ก๋˜๊ณ , ์ƒํƒœ(Ready, NotReady ๋“ฑ)๊ฐ€ ์ง€์†์ ์œผ๋กœ ๊ฐ์‹œ๋ฉ๋‹ˆ๋‹ค
    • ์ƒํƒœ ์ด์ƒ์ด ๊ฐ์ง€๋˜๋ฉด, ํ•ด๋‹น ๋…ธ๋“œ์˜ Pod๋Š” ๋‹ค๋ฅธ ์ •์ƒ ๋…ธ๋“œ๋กœ ์žฌ์Šค์ผ€์ค„๋ฉ๋‹ˆ๋‹ค.

๐Ÿ” Kubernetes Cluster (ํด๋Ÿฌ์Šคํ„ฐ)

  • ์—ฌ๋Ÿฌ Node(์›Œ์ปค ๋จธ์‹ )์™€ ์ด๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” Control Plane(๋งˆ์Šคํ„ฐ ์ปดํฌ๋„ŒํŠธ)์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • Control Plane์€ API Server, Scheduler, Controller Manager, etcd ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด Pod ์Šค์ผ€์ค„๋ง ๋ฐ ์ƒํƒœ ์œ ์ง€, ์žฅ์•  ๋ณต๊ตฌ ๋“ฑ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค

๐Ÿ’ก ์šฉ์–ด ์š”์•ฝ ์ •๋ฆฌ

์šฉ์–ด ์„ค๋ช…
Pod ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์‹คํ–‰ ์œ ๋‹›. IP์™€ ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•˜๋ฉฐ, ๋…ผ๋ฆฌ์  ํ˜ธ์ŠคํŠธ ์—ญํ• 
Container (์ปจํ…Œ์ด๋„ˆ) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๋‹จ์œ„. ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋จ
Node Pod๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฌผ๋ฆฌ/๊ฐ€์ƒ ๋จธ์‹ . kubelet, ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„, kube-proxy ํฌํ•จ
Cluster Control Plane + ์—ฌ๋Ÿฌ Node(Worker)๋กœ ๊ตฌ์„ฑ๋œ ์ „์ฒด Kubernetes ์‹œ์Šคํ…œ

2. ๋…ธ๋“œ ๊ทธ๋ฃน(Node Group)์ด ํ•ต์‹ฌ

  • EKS ๊ด€๋ฆฌํ˜• ๋…ธ๋“œ ๊ทธ๋ฃน์€ EC2 Auto Scaling Group(ASG)์„ ์ด์šฉํ•ด ๋…ธ๋“œ๋ฅผ ์ž๋™ ์ƒ์„ฑ, ๊ต์ฒด, ์ข…๋ฃŒํ•ด ์ค๋‹ˆ๋‹ค
  • **์˜จ๋””๋งจ๋“œ(On-Demand)**์™€ ์ŠคํŒŸ(Spot) ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์„ ํ˜ผํ•ฉํ•ด ๊ตฌ์„ฑํ•˜๋ฉฐ, ์›Œํฌ๋กœ๋“œ ํŠน์„ฑ์— ๋”ฐ๋ผ ํ˜ผ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

3. ์˜คํ† ์Šค์ผ€์ผ๋ง, ๋…ธ๋“œ๋ ˆ์ด์–ด๊นŒ์ง€ ์ž๋™ ๋Œ€์‘

  • **Cluster Autoscaler(CA)**๋Š” ์Šค์ผ€์ค„๋ง๋˜์ง€ ๋ชปํ•œ ํŒŒ๋“œ๋ฅผ ๊ฐ์ง€ํ•ด ๋ถ€์กฑํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ํŒŒ์•…ํ•˜๊ณ , ASG์˜ ๋…ธ๋“œ ์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค
    • ํŒŒ๋“œ๊ฐ€ pending ์ƒํƒœ์ผ ๋•Œ ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€
    • ํ™œ์šฉ๋„๊ฐ€ ๋‚ฎ์€ ๋…ธ๋“œ๋Š” ์ค„์—ฌ ๋ถˆํ•„์š”ํ•œ ๋น„์šฉ ๋ฐฉ์ง€
  • ์ฃผ์š” ์„ค์ • ํŒ:
    • ๋…ธ๋“œ ๊ทธ๋ฃน์„ ์ตœ๋Œ€ํ•œ ๋‹จ์ˆœํ•˜๊ฒŒ ๊ตฌ์„ฑํ•ด CA์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”
    • ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค๋Š” ์—ฌ๋Ÿฌ AZ, ๋‹ค์–‘ํ•œ ์ธ์Šคํ„ด์Šคํ„ฐ์ž… ์กฐํ•ฉ์œผ๋กœ ํ’€ ๊ตฌ์„ฑ

4. Karpenter vs Cluster Autoscaler

  • AWS์˜ ์˜คํ”ˆ์†Œ์Šค Karpenter๋Š” ๋” ๋น ๋ฅด๊ณ  ์œ ์—ฐํ•œ ์˜คํ† ์Šค์ผ€์ผ๋Ÿฌ์ž…๋‹ˆ๋‹ค:
    • CA๋ณด๋‹ค ๋” ๋น ๋ฅด๊ฒŒ ๋…ธ๋“œ ํ”„๋กœ๋น„์ €๋‹
    • ASG์— ์ข…์†๋˜์ง€ ์•Š์•„ ์„ธ๋ฐ€ํ•œ ์ œ์–ด ๊ฐ€๋Šฅ
    • ๋‹ค๋งŒ ์•„์ง์€ CA๋ณด๋‹ค ์ƒ๋Œ€์ ์œผ๋กœ ์ƒˆ๋กญ๊ณ , ํ•™์Šต ๊ณก์„ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

5. ํŠธ๋ž˜ํ”ฝ ๊ฑฑ์ • ์—†๋Š” ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„

  1. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋…ธ๋“œ ๊ทธ๋ฃน ๊ตฌ์„ฑ
    • ์˜จ๋””๋งจ๋“œ: ์ƒํƒœ ์ €์žฅ(Stateful) ๋˜๋Š” ์ค‘์š” ์„œ๋น„์Šค
    • ์ŠคํŒŸ: ๋ฐฐ์น˜, API ๋ฐฑ์—”๋“œ ๋“ฑ ์ค‘๋‹จ ํ—ˆ์šฉ ์›Œํฌ๋กœ๋“œ
  2. ์˜คํ† ์Šค์ผ€์ผ๋ง ์„ค์ •
    • CA ์„ค์น˜ + IAM ๊ถŒํ•œ ๊ตฌ์„ฑ
    • ์˜ค๋ฒ„ ํ”„๋กœ๋น„์ €๋‹(over-provisioning) ์‚ฌ์šฉ: ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ์‹œ ์ฆ‰์‹œ ๋Œ€์‘
    • ๋…ธ๋“œ ์Šค์ผ€์ผ์•„์›ƒ/์ธ ์ •์ฑ… ํŠœ๋‹ (์Šค์บ” ์ฃผ๊ธฐ, ๋…ธ๋“œ ๊ทธ๋ฃน ์ˆ˜ ๋“ฑ)
    • ์ŠคํŒŸ์—์„œ๋Š” ๋ฉ€ํ‹ฐ AZ/๋ฉ€ํ‹ฐ ํƒ€์ž… ๊ตฌ์„ฑ ํฌํ•จ
  3. HPA & VPA ๋„์ž…
    • HPA๋กœ Pod ์ˆ˜ ์ž๋™ ์กฐ์ ˆ
    • VPA๋กœ ๋ฆฌ์†Œ์Šค ์ƒํ•œ/ํ•˜ํ•œ ์ž๋™ ์กฐ์ •
  4. ๋ชจ๋‹ˆํ„ฐ๋ง & ๋Œ€์‘
    • CloudWatch, Prometheus, Grafana๋กœ ์ง€ํ‘œ ์ˆ˜์ง‘
    • ๋ถˆํ•„์š”ํ•œ ์˜คํ† ์Šค์ผ€์ผ๋ง ๋ฐœ๋™ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด Requests/Limits ์ •ํ™•ํžˆ ์„ค์ •
  5. CI/CD & IaC ๊ตฌํ˜„
    • eksctl, Terraform, CloudFormation ์ด์šฉ
    • ์ƒˆ๋กœ์šด ๋…ธ๋“œ ๊ทธ๋ฃน ์ถ”๊ฐ€ ๋ฐ ์ •์ฑ… ๋ณ€๊ฒฝ์„ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™ํ™” ([AWS Documentation][7], [overcast blog][11])

6. ์šด์˜ ๊ฟ€ํŒ

ํ•ญ๋ชฉ ์„ค๋ช…
๋…ธ๋“œ ๊ทธ๋ฃน ์ตœ์†Œํ™” ์—ฌ๋Ÿฌ ํŒ€, ์›Œํฌ๋กœ๋“œ๊ฐ€ ์žˆ๋”๋ผ๋„ ๋…ธ๋“œ ๊ทธ๋ฃน ์ˆ˜๋ฅผ ์ค„์ด๋Š” ํŽธ์ด CA ์„ฑ๋Šฅ์— ์œ ๋ฆฌ ([AWS Documentation][7])
Pod ์š”์ฒญ(Requests)/์ œํ•œ(Limits) ์ ์ ˆํ•œ ๋ฆฌ์†Œ์Šค ์„ค์ •์€ ์Šค์ผ€์ผ๋ง ์‹ ๋ขฐ์„ฑ ๋ฐ ๋น„์šฉ ์ตœ์ ํ™”์— ํ•„์ˆ˜ ([์ค€ํ˜ธ์˜ ๋ฐœ์ž์ทจ][12])
Fargate ํ˜ผํ•ฉ ์šด์˜ EC2 ๋…ธ๋“œ ์™ธ์— AWS Fargate๋ฅผ ํ˜ผํ•ฉํ•˜๋ฉด ํŠน์ • ์›Œํฌ๋กœ๋“œ์— ๋Œ€ํ•ด ์„œ๋ฒ„๋ฆฌ์Šค ์‹คํ–‰ ๊ฐ€๋Šฅ ([AWS Open Source][8])

AWS EKS์˜ ๊ด€๋ฆฌํ˜• ๋…ธ๋“œ ๊ทธ๋ฃน + ํšจ๊ณผ์ ์ธ ์˜คํ† ์Šค์ผ€์ผ๋ง ์„ค์ •, ์—ฌ๊ธฐ์— HPA/VPA + ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๋”ํ•˜๋ฉด, ํŠธ๋ž˜ํ”ฝ ๋ณ€ํ™”์— ์ž๋™ ๋Œ€์‘ํ•˜๋ฉฐ ์•ˆ์ •์„ฑ๊ณผ ๋น„์šฉ ํšจ์œจ ๋ชจ๋‘๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์™€ Karpenter ๋˜๋Š” Cluster Autoscaler๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ๋”์šฑ ๊ฐ•๋ ฅํ•œ ์„œ๋ฒ„ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ตฌ์„ฑ์€, ์–ธ์ œ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ค๋„ ๊ฑฑ์ • ์—†๋Š” ํŠธ๋ž˜ํ”ฝ ๊ฑฑ์ • ์—†๋Š” ์„œ๋ฒ„์˜ ํ•ต์‹ฌ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ ?


์ฐธ๊ณ ์ž๋ฃŒ

 

 

๋ฐ˜์‘ํ˜•