Kubernetes (EKS) - 100-hours-a-week/21-iceT-wiki GitHub Wiki

EKS ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ

EKS ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์„œ๋น„์Šค๊ฐ€ ๊ตฌ์„ฑ๋œ ์ „๋ฐ˜์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
(์˜ˆ: ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ๋ฐฐ์น˜, ๊ฐ ํŒŒ๋“œ๊ฐ€ ์–ด๋–ค ๋…ธ๋“œ์— ์žˆ๊ณ  ์–ด๋–ค ์„œ๋น„์Šค๋กœ ๋ฌถ์—ฌ์žˆ๋Š”์ง€, ์™ธ๋ถ€ ์š”์ฒญ์ด Ingress๋ฅผ ํ†ตํ•ด ํŒŒ๋“œ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฒฝ๋กœ ๋“ฑ)


์„ค๊ณ„ ์„ค๋ช… ๋ฐ ํƒ€๋‹น์„ฑ ๋ณด๊ณ ์„œ

์™œ Kubernetes(EKS)๋ฅผ ๋„์ž…ํ•˜๊ธฐ๋กœ ํ–ˆ๋Š”์ง€ ์„œ๋น„์Šค ๋งฅ๋ฝ์—์„œ ์ถฉ๋ถ„ํžˆ ์„ค๋ช…ํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—๋Š” Kubeadm ๋Œ€๋น„ ์ถ”๊ฐ€๋กœ ์ถฉ์กฑํ•ด์•ผ ํ•  ์š”๊ตฌ์‚ฌํ•ญ๊ณผ Amazon EKS๋กœ ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
(์˜ˆ: ๊ณ ๊ธ‰ ๋ฐฐํฌ์ „๋žต ํ•„์š” โ†’ Kubernetes์˜ Rolling Update ๋ฐ Canary ๊ตฌํ˜„์œผ๋กœ ๋Œ€์‘)
๋˜ํ•œ Kubernetes ๋ฆฌ์†Œ์Šค ์„ ํƒ๊ณผ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์„ค๋ช…(Deployment vs StatefulSet ์‚ฌ์šฉ ์ด์œ  ๋“ฑ)์„ ๋‹ด์•„ ์„ค๊ณ„์ƒ์˜ ์˜์‚ฌ๊ฒฐ์ • ๊ทผ๊ฑฐ๋ฅผ ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค.


1. ๋„์ž… ๋ฐฐ๊ฒฝ ๋ฐ ํ•„์š”์„ฑ

์„œ๋น„์Šค์˜ ์•ˆ์ •์ ์ธ ์šด์˜๊ณผ ์ง€์†์ ์ธ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ์˜ ๋„์ž…์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ ๋‹ค์ˆ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ์ธํ”„๋ผ ์„œ๋น„์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ๋ฐฐํฌ ์ž๋™ํ™” ๋ฐ ๋กค๋ฐฑ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ๊ณผ ์žฅ์•  ๋Œ€์‘๋ ฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด Kubernetes๋ฅผ ๋„์ž…ํ•˜์˜€์œผ๋ฉฐ, ๊ทธ ๊ตฌํ˜„์ฒด๋กœ๋Š” AWS์—์„œ ์ œ๊ณตํ•˜๋Š” Amazon EKS๋ฅผ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ง์ ‘ ๊ตฌ์„ฑ(Kubeadm ๋“ฑ)ํ•˜๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์šด์˜ ๋ณต์žก์„ฑ๊ณผ ์•ˆ์ •์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ , EKS๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค:

  • AWS IAM, ALB, ACM, VPC ๋“ฑ๊ณผ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ํ†ตํ•ฉ
  • ๊ด€๋ฆฌํ˜• Control Plane์œผ๋กœ ์šด์˜ ๋ถ€๋‹ด ๊ฐ์†Œ
  • ์ตœ์‹  ๋ณด์•ˆ ํŒจ์น˜ ๋ฐ ๊ณ ๊ฐ€์šฉ์„ฑ ์ œ๊ณต

2. ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ๋ฐ ๋ฆฌ์†Œ์Šค ์„ ํƒ

๐Ÿงฑ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์กฐ

  • Amazon EKS ๊ธฐ๋ฐ˜ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ
    • ์›Œ์ปค ๋…ธ๋“œ๋Š” ์„œ๋น„์Šค(app) ์™€ ์ธํ”„๋ผ(infra) ์—ญํ• ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ž์› ๊ฒฉ๋ฆฌ ๋ฐ ํšจ์œจ์  ์šด์˜
    • ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ๊ณผ ๋ฐ์ดํ„ฐ ๋…ธ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ ํ™•๋ณด
  • GitHub Actions + ArgoCD ๊ธฐ๋ฐ˜ GitOps ๋ฐฉ์‹์˜ CI/CD ๊ตฌ์„ฑ
    • ์ด๋ฏธ์ง€ ๋นŒ๋“œ โ†’ ECR ํ‘ธ์‹œ โ†’ ArgoCD๋กœ ์ž๋™ ๋ฐฐํฌ

๐Ÿ” ๋ฐฐํฌ ์ „๋žต

  • Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜:
    • Deployment ๋ฆฌ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ RollingUpdate ๋ฐฉ์‹์˜ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ
    • HorizontalPodAutoscaler๋ฅผ ํ†ตํ•œ ์ž๋™ ํ™•์žฅ
  • Redis, ElasticSearch ๋“ฑ ์ƒํƒœ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค:
    • StatefulSet์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ Pod์— ๊ณ ์œ ํ•œ Volume ๋ฐ ๋„คํŠธ์›Œํฌ ID ์œ ์ง€

๐ŸŒ ๋„คํŠธ์›Œํฌ ๋ฐ ์ธ์ฆ

  • ALB Ingress Controller ๋„์ž…
    • ์‚ฌ์šฉ์ž ์š”์ฒญ: Route53 โ†’ CloudFront (์ •์  ์ž์›) ๋˜๋Š” ALB โ†’ Ingress โ†’ Kubernetes ์„œ๋น„์Šค
    • alb.ingress.kubernetes.io ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•˜์—ฌ HTTPS ๋ฐ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ์ฒ˜๋ฆฌ
    • ACM ์ธ์ฆ์„œ๋ฅผ ํ†ตํ•ด TLS ์ข…๋‹จ ๋ณด์•ˆ ์ ์šฉ
  • ๋‚ด๋ถ€ ํ†ต์‹ ์€ VPC ๋ฐ ์„œ๋ธŒ๋„ท ๋ถ„๋ฆฌ๋กœ ๊ฒฉ๋ฆฌ

๐Ÿ“Š ๋กœ๊น… ๋ฐ APM

  • Elastic Stack (ELK + APM):
    • ElasticSearch + Logstash + Kibana + Filebeat + Metricbeat
    • Application ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ง‘๊ณ„
    • EKS ๋กœ๊ทธ๋Š” Filebeat์™€ ํ•จ๊ป˜ Elastic์œผ๋กœ ์ˆ˜์ง‘ ๊ฐ€๋Šฅ

3. ๊ธฐ์ˆ  ์„ ํƒ ๋น„๊ต (Kubeadm vs EKS)

ํ•ญ๋ชฉ Kubeadm ์ง์ ‘ ๊ตฌ์„ฑ Amazon EKS ๊ธฐ๋ฐ˜ ๊ตฌ์„ฑ
์šด์˜ ๊ด€๋ฆฌ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ง์ ‘ ๊ตฌ์„ฑ, ์œ ์ง€๋ณด์ˆ˜ ํ•„์š” AWS์—์„œ Control Plane ๊ด€๋ฆฌ, ์šด์˜ ๋ถ€๋‹ด ๋‚ฎ์Œ
AWS ํ†ตํ•ฉ IAM/ALB/ACM ๋ณ„๋„ ๊ตฌ์„ฑ ํ•„์š” AWS ๋ฆฌ์†Œ์Šค์™€ ๋„ค์ดํ‹ฐ๋ธŒ ์—ฐ๋™
๋ณด์•ˆ ์—…๋ฐ์ดํŠธ ์ˆ˜๋™ ํŒจ์น˜ ํ•„์š” ์ž๋™ ํŒจ์น˜ ๋ฐ ๊ณ ๊ฐ€์šฉ์„ฑ ๊ด€๋ฆฌ
CI/CD ๊ตฌ์„ฑ Helm, kubectl ๋“ฑ ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜ ArgoCD ๊ธฐ๋ฐ˜ GitOps, ECR์™€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฐ๋™
๋น„์šฉ ๋‚ฎ์„ ์ˆ˜ ์žˆ์œผ๋‚˜ ์ธ๊ฑด๋น„ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์กด์žฌ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋น„์šฉ, ์šด์˜ ์ธ๋ ฅ ์ตœ์†Œํ™” ๊ฐ€๋Šฅ

4. Kubernetes vs EC2 ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๋น„๊ต

ํ•ญ๋ชฉ EC2 ๊ธฐ๋ฐ˜ ๋ฐฐํฌ Kubernetes(EKS) ๊ธฐ๋ฐ˜ ๊ฐœ์„ ์ 
๋ฐฐํฌ ๋ฐฉ์‹ ์ˆ˜๋™ ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ Declarativeํ•œ RollingUpdate ๋ฐ Canary ์ง€์›
๋กค๋ฐฑ ๋ณต์žกํ•œ ์ˆ˜๋™ ์ž‘์—… kubectl rollout undo๋กœ ์ฆ‰์‹œ ๋กค๋ฐฑ ๊ฐ€๋Šฅ
์Šค์ผ€์ผ๋ง ์ˆ˜๋™ ์Šค์ผ€์ผ๋ง HPA ๊ธฐ๋ฐ˜ ์ž๋™ ์Šค์ผ€์ผ๋ง
๊ฐ€์šฉ์„ฑ ์ธ์Šคํ„ด์Šค ์žฅ์•  ์‹œ ์ˆ˜๋™ ๋ณต๊ตฌ ํ•„์š” Pod ๋‹จ์œ„ ์ž๋™ ๋ณต๊ตฌ(Self-healing)
๋ฐฐํฌ ์ž๋™ํ™” ๋ณ„๋„ CD ํŒŒ์ดํ”„๋ผ์ธ ํ•„์š” GitOps ๊ธฐ๋ฐ˜ ArgoCD ์ž๋™ํ™”
๋ชจ๋‹ˆํ„ฐ๋ง/๋กœ๊น… CloudWatch ์ค‘์‹ฌ Elastic Stack ํ†ตํ•œ ๊ณ ๊ธ‰ ๋ถ„์„ ๋ฐ APM ๋„์ž…

5. ์š”์•ฝ

Amazon EKS๋Š” Kubernetes์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•˜๋ฉด์„œ๋„, AWS ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ •์ ์ด๊ณ  ์šด์˜ ํšจ์œจ์ ์ธ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋ณธ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ๋‹ค์Œ์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค:

  • EKS ๊ธฐ๋ฐ˜ ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜ ๋ฐ ์„œ๋น„์Šค ๋ฐฐํฌ
  • ๋ฌด์ค‘๋‹จ ๋กค๋ง ๋ฐฐํฌ + Canary ์ „๋žต
  • ArgoCD ๊ธฐ๋ฐ˜ GitOps ๋ฐฉ์‹์˜ CI/CD ์ž๋™ํ™”
  • Elastic APM ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ฌธ์ œ ์ถ”์ 
  • ์„œ๋น„์Šค/์ธํ”„๋ผ ๋…ธ๋“œ ๋ถ„๋ฆฌ ์šด์˜์„ ํ†ตํ•œ ์•ˆ์ •์„ฑ ๊ฐ•ํ™”

์ด๋Ÿฌํ•œ ์š”์†Œ๋“ค์€ ์„œ๋น„์Šค์˜ ์‹ ๋ขฐ์„ฑ, ํ™•์žฅ์„ฑ, ๊ฐ€์‹œ์„ฑ, ๋ฐฐํฌ ํšจ์œจ์„ฑ์„ ๋ชจ๋‘ ํ–ฅ์ƒ์‹œ์ผœ ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•œ ํ˜„๋Œ€์  ์ธํ”„๋ผ ๊ตฌ์กฐ๋ฅผ ์™„์„ฑํ•˜๋Š” ๋ฐ ํฌ๊ฒŒ ๊ธฐ์—ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.


Kubernetes ๋ฆฌ์†Œ์Šค ๋ช…์„ธ์„œ

์„œ๋น„์Šค ๋ฐฐํฌ์— ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” Kubernetes ๋ฆฌ์†Œ์Šค๋“ค์˜ ์„ค์ • ๊ฐ’์„ ํ‘œ ๋˜๋Š” ๋ชฉ๋ก์œผ๋กœ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: ๊ฐ Deployment์˜ ์ด๋ฆ„, Replica ๊ฐœ์ˆ˜, ์ปจํ…Œ์ด๋„ˆ ์ž์› ํ• ๋‹น(CPU/๋ฉ”๋ชจ๋ฆฌ), ์‚ฌ์šฉ ์ด๋ฏธ์ง€, ์ ์šฉ๋œ HPA(Horizontal Pod Autoscaler) ์„ค์ •, ConfigMap/Secret ํ•ญ๋ชฉ ๋“ฑ) ๋˜ํ•œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์— ํŠน์ด์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด (์˜ˆ: Node ๊ฐ„ ์Šค์ผ€์ค„๋ง ์ œํ•œ, Taint/Toleration, ๋„คํŠธ์›Œํฌ ์ •์ฑ…) ํ•จ๊ป˜ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋ถ€๋ถ„์ ์ธ YAML ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์˜ˆ์‹œ๋ฅผ ํฌํ•จํ•˜์—ฌ, ์‹ค์ œ ๊ตฌํ˜„์— ๊ฐ€๊น๊ฒŒ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ž๋ฃŒ(์„ ํƒ)

Kubernetes ํ™˜๊ฒฝ์—์„œ์˜ ๋ฐฐํฌ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์‹œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ: ์‹ ๊ทœ ๋ฒ„์ „ ๋ฐฐํฌ ์‹œ Rolling Update๊ฐ€ ์ง„ํ–‰๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋„์‹ํ™”, ์‹คํŒจ ์‹œ Helm Rollback ์˜ˆ์‹œ, Kubernetes Dashboard๋‚˜ kubectl ์ถœ๋ ฅ ์˜ˆ์‹œ ๋“ฑ) ์ด๋Ÿฌํ•œ ์ž๋ฃŒ๋ฅผ ํ†ตํ•ด Kubernetes ๋„์ž…์˜ ํšจ๊ณผ์™€ ์šด์˜ ๊ณผ์ •์„ ๋”์šฑ ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•˜์‹ญ์‹œ์˜ค.