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 ๋์ ์ ํจ๊ณผ์ ์ด์ ๊ณผ์ ์ ๋์ฑ ๋ช ํํ ์ ๋ฌํ์ญ์์ค.