Kubeadm - 100-hours-a-week/21-iceT-wiki GitHub Wiki
๋ณธ ๋ฌธ์๋ AWS EC2 ์ธ์คํด์ค ์์ ๊ตฌ์ถ๋ ๊ธฐ์กด Docker ๊ธฐ๋ฐ 3ํฐ์ด ์ํคํ
์ฒ(Dev/Prod ํ๊ฒฝ ๋ถ๋ฆฌ)๋ฅผ Kubeadm์ ํ์ฉํ
Kubernetes ๋ฉํฐ ๋
ธ๋ ํด๋ฌ์คํฐ๋ก ํ์ฅํ๊ธฐ ์ํ ์ค์ ๋ช
์ธ์์
๋๋ค.
๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์ด์ ํ๊ฒฝ์ ๋ช
ํํ ๋ถ๋ฆฌํ๊ณ , ์ง์์ ์ธ ๋ฐฐํฌ ์๋ํ, ๊ฐ์ฉ์ฑ ํ๋ณด, ๋ฆฌ์์ค ํ๋ ฅ์ฑ ๊ฐํ๋ฅผ ๋ชฉํ๋ก ํด๋ฌ์คํฐ๋ฅผ ์ค๊ณํฉ๋๋ค.
- ๋ชฉ์ : Dev/Prod ํ๊ฒฝ์ ๊ตฌ๋ถํ K8s ํด๋ฌ์คํฐ ๊ธฐ๋ฐ์ผ๋ก ์ธํ๋ผ์ ์์ ์ฑ, ํ์ฅ์ฑ, ๋ฌด์ค๋จ ๋ฐฐํฌ ๊ตฌ์กฐ ํ๋ณด
- ๊ธฐ์กด ๊ตฌ์ฑ: Docker ๊ธฐ๋ฐ EC2 3ํฐ์ด ์ํคํ ์ฒ (Frontend - Backend - MySQL), CodeDeploy ํ์ฉ
-
ํ์ฅ ๋ฐฉํฅ:
- EC2 ์ Kubeadm์ผ๋ก Kubernetes ํด๋ฌ์คํฐ ๊ตฌ์ฑ (Master + Worker)
- CI/CD: ๊ธฐ์กด GitHub + CodeDeploy โ ArgoCD ๊ธฐ๋ฐ GitOps
- DB๋ Kubernetes ์ธ๋ถ(EC2 MySQL)๋ก ๋ถ๋ฆฌ ์ ์ง


ํ์ฌ ์ด์ ์ค์ธ ์๋น์ค๋ AWS EC2 ์ธ์คํด์ค ์์ ๊ตฌ์ถ๋ Docker ๊ธฐ๋ฐ 3ํฐ์ด ์ํคํ ์ฒ(Frontend - Backend - MySQL)๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, Dev, Stage, Prod ํ๊ฒฝ์ ๋ถ๋ฆฌํ์ฌ ๊ฐ๊ฐ ๋ ๋ฆฝ๋ VPC์ EC2 ์ธํ๋ผ ์์์ ์ด์๋๊ณ ์์ต๋๋ค. ๊ฐ ๊ณ์ธต์ Docker Compose ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๋ฐฐํฌ ์๋ํ๋ GitHub Actions๋ฅผ ํตํด ์งํํ๊ณ ์์ต๋๋ค.
์ด์ ๊ฐ์ ์ํคํ ์ฒ๋ ์ด๊ธฐ์๋ ๋จ์ํ๊ณ ์ง๊ด์ ์ธ ๋ฐฉ์์ด์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ํ์ฅ์ฑ๊ณผ ์ด์ ์ธก๋ฉด์ ํ๊ณ๊ฐ ๋ํ๋ฉ๋๋ค. ์ด๋ฅผ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ์ฅ์ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
- ์์ง ํ์ฅ(Scale-up): EC2 ์ธ์คํด์ค์ ์ฌ์์ ๋์ (t3.small โ t3.large)
- ์ํ ํ์ฅ(Scale-out): EC2 ์ธ์คํด์ค ์๋ฅผ ๋๋ฆฌ๊ณ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ๋ถ์ฌ ๋ถ์ฐ ์ฒ๋ฆฌ
์ด๋ฌํ ๋ฐฉ์์ ๋จ๊ธฐ์ ์ผ๋ก๋ ์ ํจํ์ง๋ง, ์๋์ ๊ฐ์ ๊ตฌ์กฐ์ ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค:
- EC2 ์ธ์คํด์ค๋ณ๋ก ๋ ๋ฆฝ์ ์ธ Docker ์ปจํ ์ด๋๋ฅผ ์ค์ ๊ด๋ฆฌ๊ฐ ํ์
- ์๋น์ค ์ํ๋ฅผ ๊ฐ์ ๋ถ๊ฐํ๊ธฐ์ ์น UI/CLI๋ก ์ด์์ ํ๋ฉฐ ๋ฐฐํฌ ์ํ ๋ชจ๋ํฐ๋ง ํ์ ๋ฐ ๋กค๋ฐฑ ๊ฐ๋ฅ
- Dev/Prod ํ๊ฒฝ ๊ฐ ๋ฐฐํฌ ๊ตฌ์ฑ ๋ฐ ์์ ์ ์ฑ ์ ์ผ๊ด๋๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์ โ Helm values, Kustomize๋ก Dev/Prod ํ๊ฒฝ์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์ ์ฉ
- ์๋น์ค์ ๋ฌด์ค๋จ ๋ฐฐํฌ ํ์
kubeadm์ ํตํ Kubernetes ํด๋ฌ์คํฐ ๋์ ์ ์ ๋ฌธ์ ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ํด๊ฒฐํ ์ ์์ต๋๋ค.
- ๋ค์ ๋ ธ๋ ํตํฉ ๊ด๋ฆฌ: Master Node๋ฅผ ํตํ ์ค์ ์ง์คํ ํด๋ฌ์คํฐ ๊ด๋ฆฌ
- ์์ ์ต์ ํ ๋ฐ ์คํ ์ค์ผ์ผ๋ง: HPA(์ํ ์คํ ์ค์ผ์ผ๋ง)์ ๋ฆฌ์์ค ๊ธฐ๋ฐ ์ค์ผ์ค๋ง์ผ๋ก ํธ๋ํฝ ์ฆ๊ฐ ๋์
- ๋ฌด์ค๋จ ๋ฐฐํฌ(Zero Downtime Deployment): Deployment ์ค๋ธ์ ํธ๋ฅผ ํตํ ๋กค๋ง ์ ๋ฐ์ดํธ ๋ฐ ๋ฒ์ ๊ด๋ฆฌ
- ์๋น์ค ๋ณต๊ตฌ ๋ฐ ์ ํ ํ๋ง(Self-healing): ๋ ธ๋ ์ฅ์ ๋ฐ ํ๋ ์ฅ์ ๋ฐ์ ์ ์๋ ๋ณต๊ตฌ
- ์ผ๊ด๋ ๋ฐฐํฌ ํ๊ฒฝ: Helm Chart, Kustomize ๋ฑ์ ํตํ Dev/Stage/Prod ํ๊ฒฝ ๊ตฌ์ฑ ํ์คํ
- ๋ค์ดํฐ๋ธ ๋ชจ๋ํฐ๋ง/๋ก๊น : Prometheus, Grafana, Fluent Bit ๋ฑ๊ณผ ์ฐ๊ณํ์ฌ ์ํ ๊ฐ์ ๋ฐ ํธ๋ฌ๋ธ์ํ ์ฒด๊ณ ๊ตฌ์ถ
๋ํ kubeadm์ ํด๋ผ์ฐ๋ ๋ฒค๋์ ์ข ์๋์ง ์๊ณ , ์ง์ Kubernetes ํ์ค ํด๋ฌ์คํฐ๋ฅผ ์ค์นํ๊ณ ์ ์ดํ ์ ์์ด ์๋น์ค ํ์ฅ์ฑ ๋ฐ ์ธํ๋ผ ๋ ๋ฆฝ์ฑ์ ๋์์ ํ๋ณดํ ์ ์์ต๋๋ค.
๊ตฌ๋ถ | Deployment | DaemonSet | HPA |
---|---|---|---|
๋ชฉ์ | ์ฑ ๋ฐฐํฌ/๊ด๋ฆฌ | ๋ ธ๋๋ง๋ค 1๊ฐ ํ์ ํ๋ ๋ฐฐํฌ | ํ๋ ์ ์๋ ์ค์ผ์ผ๋ง |
๋์ | ์๋น์ค ์ฑ (Next.js, Spring ๋ฑ) | ์์คํ ์์ด์ ํธ (Fluent Bit ๋ฑ) | Deployment ๋ฆฌ์์ค ๊ฐ์ |
์ค์ผ์ผ๋ง ๋ฐฉ์ | ์๋ ์ค์ (replicas) | ๋ ธ๋ ์๋งํผ ๊ณ ์ | ํธ๋ํฝ ๊ธฐ๋ฐ ์๋ ์กฐ์ |
ํ๋ ์ | ๋ด๊ฐ ์ ํจ (๋๋ HPA๊ฐ ์กฐ์ ) | ๋ ธ๋ ์์ ๊ฐ์ | HPA๊ฐ ์๋ ์กฐ์ |
-
Master Node (Control Plane)
- kube-apiserver
- kube-controller-manager
- kube-scheduler
- etcd
-
Worker Node
- kubelet
- kube-proxy
- containerd (์ปจํ ์ด๋ ๋ฐํ์)
- ์๋น์ค ํ๋ (Next.js, Spring Boot)
- ๋ชจ๋ํฐ๋ง ํ๋ (Prometheus, Grafana, Loki)
- ๋ก๊น ํ๋ (Fluent Bit)
- CNI ํ๋ฌ๊ทธ์ธ: Calico (Pod ๊ฐ ํต์ ๋ฐ ๋คํธ์ํฌ ์ ์ฑ ๊ด๋ฆฌ)
- LoadBalancer: MetalLB๋ฅผ ํตํ ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ ๋ด ๋ก๋๋ฐธ๋ฐ์ ๊ตฌ์ฑ
- Service ํ์ : LoadBalancer, ClusterIP ํผํฉ ์ฌ์ฉ
-
Deployment
- Next.js, Spring Boot, Prometheus, Grafana, Loki๋ฅผ ๊ฐ๊ฐ Deployment๋ก ๋ฐฐํฌ
- ๊ธฐ๋ณธ Replica ์ 2๊ฐ (Next.js, Spring Boot), ๋ชจ๋ํฐ๋ง ๊ณ์ด์ 1๊ฐ
-
DaemonSet
- Fluent Bit์ DaemonSet์ผ๋ก ๋ฐฐํฌํ์ฌ ๋ชจ๋ ๋ ธ๋์ 1๊ฐ์ฉ ์ค์น
-
GitOps (ArgoCD)
- ๋ชจ๋ ์๋น์ค๋ Git ์ ์ฅ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ธํ(Declarative)์ผ๋ก ๊ด๋ฆฌ
- ArgoCD๋ฅผ ํตํด ํด๋ฌ์คํฐ ์ํ๋ฅผ Git ์ ์ฅ์ ์ํ์ ๋๊ธฐํ
-
Horizontal Pod Autoscaler(HPA) ์ ์ฉ
- CPU ์ฌ์ฉ๋ฅ 50% ์ด์ ์ด๊ณผ ์ Pod ์ถ๊ฐ ์์ฑ
- Metrics Server๋ฅผ ํตํด ์ค์๊ฐ ๋ฆฌ์์ค ์ฌ์ฉ๋ ์์ง
-
Deployment ์ค์
- Rolling Update ๋ฐฉ์์ผ๋ก ๋ฌด์ค๋จ ๋ฐฐํฌ
- ์ค์ ์์: maxSurge=1, maxUnavailable=1
-
Self-healing
- ํ๋ ์ฅ์ ๋ฐ์ ์ ReplicaSet์ด ์๋์ผ๋ก ์๋ก์ด ํ๋๋ฅผ ์์ฑํ์ฌ ๋ณต๊ตฌ
-
๋
ธ๋ ์ฅ์ ๋์
- ๋ ธ๋ ์ฅ์ ๋ฐ์ ์ ์ค์ผ์ค๋ฌ๊ฐ ๋ค๋ฅธ ๋ ธ๋์ ํ๋๋ฅผ ์ฌ๋ฐฐ์น
-
๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น
- Prometheus๋ก ๋ฉํธ๋ฆญ ์์ง
- Grafana๋ก ๋์๋ณด๋ ๊ตฌ์ฑ
- Loki+Fluent Bit์ผ๋ก ๋ก๊ทธ ์์ง ๋ฐ ์ค์ ์ง์คํ
-
Helm Chart
- ๊ธฐ์กด Docker Compose ๊ธฐ๋ฐ ์๋น์ค๋ฅผ Helm Chart๋ก ๋ณํํ์ฌ ํจํค์ง
- ํ๊ฒฝ ๋ณ(Dev/Stage/Prod)๋ก values.yaml์ ๋ถ๋ฆฌํ์ฌ ์ผ๊ด์ฑ ํ๋ณด
-
Kustomize
- ํ๊ฒฝ ๋ณ ์ค๋ฒ๋ ์ด ๊ด๋ฆฌ(์: dev, prod ์ค์ ๋ถ๋ฆฌ)
ํญ๋ชฉ | ๋ด์ฉ |
---|---|
Kubernetes ๋ฒ์ | 1.29.x |
ํด๋ฌ์คํฐ ๋คํธ์ํฌ ๋ฒ์ | 192.168.0.0/16 |
Pod CIDR ์ค์ | --pod-network-cidr=192.168.0.0/16 |
API Server ํฌํธ | 6443 |
MetalLB Address Pool | 192.168.1.240-192.168.1.250 |
Fluent Bit | DaemonSet ๋ฐฐํฌ (๋ชจ๋ ๋ ธ๋ ์ ์ฉ) |