Kubernetes - 100-hours-a-week/3-team-ssammu-wiki GitHub Wiki
Docker Compose ๊ธฐ๋ฐ ์ด์์ ๊ตฌ์กฐ์ ํ๊ณ๋ก ์ธํด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ค์ด ๋ฐ์ํ๋ค:
- ์ค์ผ์คํธ๋ ์ด์ ๋ถ์ฌ: ์ปจํ ์ด๋ ๋จ์ ํฌ์ค์ฒดํฌ, ์๋ ๋ณต๊ตฌ ๊ธฐ๋ฅ ๋ฏธ์ง์
- ๋คํธ์ํฌ ํต์ ํ๊ณ: ALB ํธ๋ํฝ ๋ถ์ฐ์ ๊ฐ๋ฅํ์ง๋ง, ์ปจํ ์ด๋ ๊ฐ ์ธ๋ถ ํต์ ์ ์ฑ ์ ์ฉ ๋ถ๊ฐ
- ๋ชจ๋ํฐ๋ง ๋ฐ ์ฅ์ ๋์ ๋ถ์กฑ: Compose ์์ฒด ์ํ ๊ฐ์ ๊ธฐ๋ฅ ๋ฏธ๋น, ์๋ ์ ๊ฒ ์์กด
- ๋ณด์ ์ ์ฑ ๋ฏธํก: ๋คํธ์ํฌ ๋ถ๋ฆฌ๋ ๊ฐ๋ฅํ๋, ์๋น์ค ๊ฐ ์ธ์ฆ/์ธ๊ฐ(mTLS) ๋ฏธ์ง์
- ํ์ฅ์ฑ ๋ถ์กฑ: ๋๊ท๋ชจ ์ปจํ ์ด๋ ์ ๊ด๋ฆฌ ๋ฐ ํด๋ฌ์คํฐ๋ง ์๋ํ ๊ธฐ๋ฅ ๋ฏธ๋น
Docker Compose ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ณ , ๋ค์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ํด Kubernetes๋ฅผ ๋์ ํ๋ค:
- ๊ณ ๊ฐ์ฉ์ฑ(HA): ๋ฌด์ค๋จ ์ด์ ๋ฐ ์ฅ์ ์๋ ๋ณต๊ตฌ(Self-healing)
- ํ์ฅ์ฑ ํ๋ณด: ๋ฉํฐ ๋ ธ๋ ์ด์ ๋ฐ ์คํ ์ค์ผ์ผ๋ง
- ์๋น์ค ๊ฐ ํต์ ์ ์ฑ ์ ์ด: Kubernetes NetworkPolicy ์ ์ฉ
- ์ด์ ์๋ํ: ๋ฐฐํฌ, ๋ณต๊ตฌ, ๋ชจ๋ํฐ๋ง ์ฒด๊ณ ๊ตฌ์ถ
- ๋ฉํฐ ํด๋ผ์ฐ๋ ์ง์: AWS-GCP ๊ฐ ์ฐ๋ ๊ตฌ์ฑ
์ธ๋ถ โ AWS ALB โ Kubernetes NGINX Ingress Controller โ Kubernetes Service โ Pod
๊ตฌ์ฑ | AWS | GCP |
---|---|---|
Master Node | Private Subnet (kubeadm init) | Private Subnet (kubeadm init) |
Worker Node | AZ 2a/2c Private Subnet (kubeadm join) | Private Subnet (kubeadm join) โ CPU ์ ์ฉ ์์ปค๋ ธ๋, GPU ์์ปค๋ ธ๋ ๊ตฌ์ฑ |
์คํ ๋ฆฌ์ง | EBS (PVC ์๋ ํ๋ก๋น์ ๋) | Persistent Disk (PD) |
์์ญ | ์ ํ ๊ธฐ์ | ์ฃผ์ ์ด์ |
---|---|---|
์ค์ผ์คํธ๋ ์ด์ | kubeadm | ํ์ค ์ค์น, ์ธ๋ฐํ ์ปค์คํฐ๋ง์ด์ง |
๋คํธ์ํฌ(CNI) | Calico | L3 ๊ธฐ๋ฐ, ๋ณด์ ์ ์ฑ ์์ ์ง์ |
์ปจํ ์ด๋ ๋ฐํ์ | containerd | Kubernetes CRI ๊ณต์ ์ง์, ๊ฒฝ๋ |
์ธ๊ทธ๋ ์ค | NGINX Ingress Controller | ๋ค์ํ ๋ผ์ฐํ , ๋ฉํฐ ํด๋ผ์ฐ๋ ๋์ |
๋ชจ๋ํฐ๋ง | CloudWatch, GCP Monitoring | ํด๋ผ์ฐ๋ ๊ธฐ๋ณธ ํตํฉ, ๋น์ฉ ํจ์จ |
์ด์ ์๋ํ | GitHub Actions + ArgoCD | SaaS ๊ธฐ๋ฐ CI/CD + GitOps ๊ตฌ์ถ |
์คํ ๋ฆฌ์ง | EBS, PD | PVC ๋์ ํ๋ก๋น์ ๋, ๊ณ ์ฑ๋ฅ ์ง์ |
- VPC: 192.168.0.0/16
-
Private Subnet
-
192.168.110.0/24 (AZ 2a/2c)
- Kubernetes Master Node
- Kubernetes Worker Node
-
192.168.210.0/24 (AZ 2a/2c)
- DB ์๋ฒ ์ ์ฉ ์ธ์คํด์ค ๋ฐฐ์น
-
192.168.110.0/24 (AZ 2a/2c)
-
Master Nodes (kubeadm init):
- AZ 2a:
t3.medium
(vCPU 2, RAM 4GB) - AZ 2c:
t3.medium
(vCPU 2, RAM 4GB)
- AZ 2a:
-
Worker Nodes (kubeadm join):
- AZ 2a:
m5.large
(vCPU 2, RAM 8GB) - AZ 2c:
m5.large
(vCPU 2, RAM 8GB)
- AZ 2a:
-
DB Nodes:
- AZ 2a:
r6i.large
(vCPU 2, RAM 16GB) - AZ 2c:
r6i.large
(vCPU 2, RAM 16GB) - ์คํ ๋ฆฌ์ง: gp3 EBS, IOPS 3000 ์ค์
- AZ 2a:
-
์คํ ๋ฆฌ์ง:
- Kubernetes์ฉ: EBS PVC ์๋ ํ๋ก๋น์ ๋
- DB์ฉ: ๋ณ๋ gp3 EBS ๊ณ ์ฑ๋ฅ ๋์คํฌ ์ฌ์ฉ
-
๋ก๋๋ฐธ๋ฐ์:
- AWS ALB ์ฌ์ฉ, ์ธ๋ถ ํธ๋ํฝ ์์
- VPC: 10.0.0.0/16
-
Private Subnet:
- 10.0.20.0/24 (Master Node, Worker Node ๋ฐฐ์น)
-
Master Nodes (kubeadm init):
- AZ a:
e2-medium
(vCPU 2, RAM 4GB) - AZ b:
e2-medium
(vCPU 2, RAM 4GB)
- AZ a:
-
Worker Nodes (kubeadm join):
- CPU ์ ์ฉ ๋
ธ๋:
e2-medium
- GPU ์ ์ฉ ๋
ธ๋:
g2-standard-8
(NVIDIA L4)
- CPU ์ ์ฉ ๋
ธ๋:
-
์คํ ๋ฆฌ์ง:
- GCP Persistent Disk(PD) ๊ธฐ๋ฐ PVC ์๋ ํ๋ก๋น์ ๋
ํญ๋ชฉ | ์์ธ ๋ด์ฉ |
---|---|
Pod ๋คํธ์ํฌ | Calico ์ ์ฉ (IP-in-IP ๋ชจ๋) ๊ตฌ์ฑ |
์ปจํธ๋กค ํ๋ ์ธ HA | AWS์ GCP ๋ชจ๋ Master Node ๋ค์ค AZ ์ด์คํ ๊ตฌ์ฑ |
๋ฐ์ดํฐ ํ๋ ์ธ | AWS AZ 2a/2c ๋ฐ GCP์ Worker Node ๋ถ์ฐ ๊ตฌ์ฑ |
์คํ ๋ฆฌ์ง | EBS (AWS), PD (GCP) ๊ธฐ๋ฐ PVC ๋์ ํ๋ก๋น์ ๋ ๊ตฌ์ฑ |
Ingress Controller | AWS ALB ์์ โ NGINX Ingress๋ก ๋ผ์ฐํ ๊ตฌ์ฑ |
DNS ๋ผ์ฐํ | Route53์ ํตํด ALB ๋๋ฉ์ธ ๊ด๋ฆฌ ๊ตฌ์ฑ |
TLS ์ธ์ฆ | AWS ACM ์ธ์ฆ์ ๋ฐ๊ธ ๋ฐ cert-manager ์๋ํ ๊ตฌ์ฑ |
๋คํธ์ํฌ ์ฐ๋ | AWS-GCP VPC Peering ํตํ ์ฌ์ค๋ง ํต์ ๊ตฌ์ฑ ๋ฐ ์๋น์ค ๊ฐ ํต์ ํต์ |
WAF ์ฐ๋ | AWS WAF๋ฅผ ํตํด ALB ๋ ๋ฒจ Web Application Firewall ๊ตฌ์ฑ |
ECR ์ฐ๋ | AWS ECR์ Docker ์ด๋ฏธ์ง ์ ์ฅ์๋ก ์ฌ์ฉํ์ฌ ๋ฐฐํฌ ์ด๋ฏธ์ง ๊ด๋ฆฌ |
- AWS ALB ์๋จ์ Route53์ ํตํด ๋๋ฉ์ธ DNS ๊ด๋ฆฌ ๊ตฌ์ฑ
- HTTPS ํต์ ์ ์ํด AWS ACM ์ธ์ฆ์ ๋ฐ๊ธ ๋ฐ NGINX Ingress Controller์ ์ฐ๋
- ALB์ AWS WAF๋ฅผ ์ ์ฉํ์ฌ OWASP Top 10 ๊ธฐ๋ฐ ๊ณต๊ฒฉ ๋ฐฉ์ด ๊ตฌ์ฑ
- AWS-GCP ๊ฐ VPC Peering์ ํตํ ์ฌ์ค๋ง ํต์ ๊ตฌ์ฑ
- Kubernetes ๋คํธ์ํฌ ์ ์ฑ (NetworkPolicy)์ ํตํ ์๋น์ค ๊ฐ ํต์ ํต์
- Frontend ์๋ฒ์์ DB ์๋ฒ(192.168.210.0/24)๋ก์ ์ง์ ์ ๊ทผ ์ฐจ๋จ
- Backend API ์๋ฒ๋ฅผ ํตํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒญ ์ํ
-
ECR์ ํตํ ์ด๋ฏธ์ง ๊ด๋ฆฌ ๋ฐ ๋ฐฐํฌ
- AWS ECR์ Docker ์ด๋ฏธ์ง ์ ์ฅ์๋ก ์ฌ์ฉํ์ฌ ๋ฐฐํฌ ์ด๋ฏธ์ง๋ฅผ ๊ด๋ฆฌ
- GitHub Actions์์ ๋น๋๋ Docker ์ด๋ฏธ์ง๋ฅผ ECR๋ก Push
- ์ด๋ฏธ์ง ๋ฒ์ ๊ด๋ฆฌ๋ ํ๊ทธ(Tag) ๊ธฐ๋ฐ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ, ์ปค๋ฐ SHA ๋๋ ๋ฒ์ ๋๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๋กค๋ฐฑ ๋ฐ ๋ฒ์ ์ถ์ ์ ์ฉ์ดํ๊ฒ ๊ตฌ์ฑ
- ๋กค๋ฐฑ ์ ๋ต: ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ฒ์ ์ ์ด๋ฏธ์ง๋ฅผ ์ด์ ํ๊ทธ๋ฅผ ํตํด ์ฝ๊ฒ ๋ณต๊ตฌ ๊ฐ๋ฅ
- Control Plane ๊ณ ๊ฐ์ฉ์ฑ ํ๋ณด
- Kubernetes Master Node๋ฅผ AZ 2a, 2c์ ์ด์ค ๋ฐฐ์น
- ๋จ์ผ AZ ์ฅ์ ๋ฐ์ ์์๋ ํด๋ฌ์คํฐ ์ ์ด ๋ฌด์ค๋จ ์ ์ง
- Data Plane ๊ฐ์ฉ์ฑ ํ๋ณด
- Kubernetes Worker Node๋ฅผ AZ 2a, 2c์ ๋ถ์ฐ ๋ฐฐ์น
- ํน์ AZ ์ฅ์ ์์๋ ์๋น์ค ํธ๋ํฝ ๋ฌด์ค๋จ ๋ณต๊ตฌ
- DB ์๋ฒ ๊ณ ๊ฐ์ฉ์ฑ ํ๋ณด
- Database ์๋ฒ๋ฅผ Private Subnet(192.168.210.0/24)์ AZ 2a, 2c๋ก ์ด์ค ๋ฐฐ์น
- ๋ฐ์ดํฐ ๊ณ์ธต ๋ฌด์ค๋จ ์ด์ ๋ฐ ์ฐ์์ฑ ํ๋ณด
- ๋ฐ์ดํฐ ํ๋ ์ธ ํ์ฅ์ฑ ํ๋ณด
- AWS์ GCP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Kubernetes Worker Node ์ํ ํ์ฅ ์ง์
- ๋ฉํฐ ํด๋ผ์ฐ๋ ์ํฌ๋ก๋ ๋ถ์ฐ ๊ตฌ์ฑ
- ๋ณด์ ๊ฐํ
- AWS-GCP VPC Peering์ ํตํ ์ฌ์ค๋ง ํต์ ๊ตฌ์ฑ
- Kubernetes NetworkPolicy๋ฅผ ํตํ ์๋น์ค ๊ฐ ํต์ ํต์
- Frontend ์๋ฒ์ DB ์๋ฒ ์ง์ ์ ๊ทผ ์ฐจ๋จ
- Backend API ์๋ฒ๋ฅผ ํตํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒญ ์ํ
- ์ด์ ์๋ํ ๊ธฐ๋ฐ ๋ง๋ จ
- GitOps ๊ธฐ๋ฐ Git ์ํ ๊ธฐ์ค Kubernetes ๋ฆฌ์์ค ์๋ ๋๊ธฐํ
- ์ด์ ์์์ ์ต์ํ
- *AWS Elastic Container Registry(ECR)**์ Docker ์ด๋ฏธ์ง ์ ์ฅ์๋ก ์ฌ์ฉํ์ฌ ๋ฐฐํฌ ์ด๋ฏธ์ง๋ฅผ ๊ด๋ฆฌ
- GitHub Actions์์ ๋น๋๋ Docker ์ด๋ฏธ์ง๋ฅผ ECR๋ก Push
- ์ด๋ฏธ์ง ๋ฒ์ ๊ด๋ฆฌ๋ ํ๊ทธ(Tag) ๊ธฐ๋ฐ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ, ์ปค๋ฐ SHA ๋๋ ๋ฒ์ ๋๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๋กค๋ฐฑ ๋ฐ ๋ฒ์ ์ถ์ ์ ์ฉ์ดํ๊ฒ ๊ตฌ์ฑ
- ๋กค๋ฐฑ ์ ๋ต: ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ฒ์ ์ ์ด๋ฏธ์ง๋ฅผ ์ด์ ํ๊ทธ๋ฅผ ํตํด ์ฝ๊ฒ ๋ณต๊ตฌ ๊ฐ๋ฅ
[์ฅ์ ๋ฐ์ ๋๋ ๋ฐฐํฌ ์คํจ ๊ฐ์ง]
โ
[์ด์ ์ ์ ๋ฒ์ Docker ์ด๋ฏธ์ง ์ ํ (์: :v1.2.3)]
โ
[kubectl set image ๋๋ Deployment Manifest ์์ ]
โ
[ArgoCD ์๋ Sync ๋๋ ์๋ Sync ์ํ]
โ
[์ด์ ๋ฒ์ ์๋น์ค ์ ์ ๋ณต๊ตฌ]
- GitHub Actions๋ฅผ ์ฌ์ฉํด ์ ํ๋ฆฌ์ผ์ด์ ๋น๋, ํ ์คํธ, ์ด๋ฏธ์ง ๋น๋/ํธ์, Kubernetes ๋ฐฐํฌ ์๋ํ
- PR(Pull Request) ์์ฑ ์ ์ฝ๋ ํ์ง ๊ฒ์ฌ ๋ฐ ํ ์คํธ ์๋ ์คํ
- main ๋ธ๋์น ๋จธ์ง ์ Docker ์ด๋ฏธ์ง Build & ECR Push
- ArgoCD๊ฐ Git ๋ณ๊ฒฝ์ ๊ฐ์งํ์ฌ Kubernetes์ ์๋ ๋ฐฐํฌ
- ArgoCD๋ฅผ ์ฌ์ฉํด Git ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ํด๋ฌ์คํฐ ์ํ์ ๋จ์ผ ์์ค(Single Source of Truth)๋ก ๊ตฌ์ฑ
- Git ์ํ ๊ธฐ์ค์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ์๋ ๋๊ธฐํ
- Drift(ํธ์ฐจ) ๋ฐ์ ์ ์๋ ๋ณต๊ตฌ ์ฒ๋ฆฌ
- Git ์ปค๋ฐ๋ง์ผ๋ก ๋ฐฐํฌ ๋ฐ ๋กค๋ฐฑ ์ํ
- ๊ธฐ๋ณธ ๋ชจ๋ํฐ๋ง ๋๊ตฌ ๊ตฌ์ฑ
- AWS CloudWatch (EC2, EBS, ALB Metrics)
- GCP Monitoring (Compute Engine, PD Metrics)
- ์ถ๊ฐ ํ์ฅ ๊ฐ๋ฅ์ฑ ๊ณ ๋ ค
- ํ์ ์ Prometheus + Grafana Stack ์ถ๊ฐ ๊ตฌ์ฑ
- ์๋ฆผ ์ฒด๊ณ ๊ตฌ์ฑ
- CloudWatch Alarm, GCP Alerting์ Slack Webhook๊ณผ ์ฐ๋
- ์ฅ์ , ์ค์ผ์ผ๋ง ์ด๋ฒคํธ, ๋ฐฐํฌ ์ฑ๊ณต/์คํจ๋ฅผ Slack์ผ๋ก ์ค์๊ฐ ํต๋ณด
[GitHub Repository]
โ (Push/PR Event)
[GitHub Actions]
โ (Docker Build/Push, Manifest Update)
[ECR Registry] + [Git Repository ๋ณ๊ฒฝ]
โ (Auto Sync)
[ArgoCD]
โ (Deploy/Sync)
[Kubernetes Cluster]
โ (Metrics/Logs Export)
[CloudWatch/GCP Monitoring]
โ (Alarm Trigger)
[Slack Notifications]
ํญ๋ชฉ | ๋ด์ฉ |
---|---|
CI/CD ์๋ํ | GitHub Actions๋ก ๋น๋, ํ ์คํธ, ๋ฐฐํฌ ์๋ ์ฒ๋ฆฌ |
GitOps ๊ตฌํ | ArgoCD๋ก Git ์ํ ๊ธฐ๋ฐ ํด๋ฌ์คํฐ ์๋ ๋๊ธฐํ |
๋ชจ๋ํฐ๋ง ๊ธฐ๋ณธ ์ฒด๊ณ | AWS CloudWatch, GCP Monitoring ๊ธฐ๋ณธ ํ์ฉ |
ํ์ฅ์ฑ ๊ณ ๋ ค | Prometheus Stack ํ์ฅ ๊ฐ๋ฅ์ฑ ๊ณ ๋ ค |
์ค์๊ฐ ์๋ฆผ | ์ฅ์ , ์ด๋ฒคํธ ๋ฐ์ ์ Slack ํต๋ณด ๊ตฌ์ฑ |
์ด์ ๋ณต์ก์ฑ ๊ฐ์ | ์๋ ๋ฐฐํฌ ๋ฐ ์์์ ๊ฐ์ ์ต์ํ |
[Worker Node ์ฅ์ ๋ฐ์]
โ
[Kubernetes Node ์ํ "NotReady"๋ก ๋ณ๊ฒฝ]
โ
[Kubernetes Scheduler๊ฐ ํด๋น ๋
ธ๋์์ ์คํ ์ค์ด๋ Pod๋ฅผ ๋ค๋ฅธ ์ ์ ๋
ธ๋๋ก ์๋ ์ฌ์ค์ผ์ค๋ง]
โ
[Ingress Controller ๋ฐ ALB๊ฐ ์๋ก ์ค์ผ์ค๋ Pod๋ก ํธ๋ํฝ ์๋ ์ ๋ฌ]
โ
[์๋น์ค ๋ฌด์ค๋จ ์ ์ง]
[Worker Node ์ฅ์ ๋ก Capacity ๋ถ์กฑ ๋ฐ์]
โ
[Cluster Autoscaler๊ฐ ์ ๊ท ์์ปค๋
ธ๋ ์๋ ์ถ๊ฐ]
โ
[Kubernetes Scheduler๊ฐ ์ ๊ท ๋
ธ๋์ Pod ์ค์ผ์ค๋ง]
โ
[์๋น์ค ํ์ฅ ๋ฐ ๋ณต๊ตฌ ์๋ฃ]
- Kubernetes Node Controller๊ฐ node-monitor-grace-period ๋์ Heartbeat ์์ ์คํจ ์ ๋ ธ๋๋ฅผ "NotReady"๋ก ํ์
- ReplicaSet์ ํตํด ๋ณด์ฅ๋ Pod ์๋ฅผ ์ ์งํ๊ธฐ ์ํด Scheduler๊ฐ ๋ค๋ฅธ ์ ์ ๋ ธ๋๋ก Pod ์๋ ์ฌ๋ฐฐ์น
- AWS ALB + Ingress Controller๋ Kubernetes Service ๋ ๋ฒจ ๋ผ์ฐํ ์ ์ฌ์ฉํด Pod IP ๋ณ๊ฒฝ์๋ ํธ๋ํฝ ์๋ ์ฐ๊ฒฐ
- Cluster Autoscaler๊ฐ ๋ ธ๋ Capacity ๋ถ์กฑ ์ ์์ปค๋ ธ๋๋ฅผ ์๋ ํ์ฅํ์ฌ ๋ถํ๋ฅผ ๋ถ์ฐ
๋กค๋ง ์ ๋ฐ์ดํธ ํ๋ฆ
[New Docker Image Build & Push (GitHub Actions)]
โ
[Deployment Manifest Update (GitHub Actions)]
โ
[Git Repository ์
๋ฐ์ดํธ ๊ฐ์ง (ArgoCD)]
โ
[Kubernetes Deployment Rolling Update ์์]
โ
[๊ธฐ์กด Pod๋ฅผ ์์ฐจ์ ์ผ๋ก ์ข
๋ฃํ๊ณ ์ ๋ฒ์ Pod๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ธฐ๋]
โ
[ALB-Ingress-Service๋ฅผ ํตํ ๋ฌด์ค๋จ ํธ๋ํฝ ์ ์ง]
๋๊ท๋ชจ ํธ๋ํฝ ๋ณ๋์ด๋ ๊ณ ์ํ ๋ฐฐํฌ์ ๊ฒฝ์ฐ
์ ๊ท ๋ฒ์ ๊ณผ ๊ธฐ์กด ๋ฒ์ ์ ๋ณ๋ ฌ ๋ฐฐํฌ ํ ํธ๋ํฝ ์ค์์นญ ๋ฐฉ์์ผ๋ก ๋ฌด์ค๋จ ์ ํํ๋ Blue-Green Deployment ์ ๋ต ๊ณ ๋ ค
- Rolling Update ์ ๋ต์ ๊ธฐ์กด Pod๋ฅผ ํ ๋ฒ์ ๋ชจ๋ ๊ต์ฒดํ์ง ์๊ณ ์์ฐจ์ ์ผ๋ก ์ ๋ฒ์ ์ผ๋ก ๊ต์ฒด
- maxUnavailable, maxSurge ์ค์ ์ ํตํด ๋ฐฐํฌ ์ค ๊ฐ์ฉ์ฑ ๋ณด์ฅ
- ArgoCD๊ฐ Git ๋ณ๊ฒฝ์ฌํญ์ ์ค์๊ฐ ๊ฐ์งํด Deployment ์๋ ๋๊ธฐํ ์ํ
- ํ์ ์ Blue-Green Deployment๋ก ๋ฐฐํฌ ์์ ์ฑ๊ณผ ๋กค๋ฐฑ ์ ์์ฑ ํ๋ณด
๊ตฌ๋ถ | ๊ณ ๋ ค์ฌํญ |
---|---|
์์ปค๋ ธ๋ ์ฅ์ ๋ณต๊ตฌ | AZ๋ณ ์์ปค๋ ธ๋ ๋ถ์ฐ์ผ๋ก ๋จ์ผ AZ ์ฅ์ ์๋ ๋ฌด์ค๋จ ๋ณต๊ตฌ ๊ตฌ์ฑ |
๋กค๋ง ์ ๋ฐ์ดํธ | maxUnavailable: 1, maxSurge: 1 ์ค์ ์ผ๋ก ํธ๋ํฝ ์์ ์ฑ ํ๋ณด |
์๋ฆผ ์ฐ๋ | ์ฅ์ ๋ณต๊ตฌ ๋ฐ ๋ฐฐํฌ ์ด๋ฒคํธ ๋ฐ์ ์ Slack์ผ๋ก ์ค์๊ฐ ํต๋ณด ๊ตฌ์ฑ |
๋ฐฑ์ ๋ฐ ๋ณต์ | etcd ์ค๋ ์ท ๋ฐ PVC ๋ณผ๋ฅจ ์ค๋ ์ท์ ํ๋ฃจ 1ํ S3์ ์ ์ฅ, ์ต๊ทผ 7์ผ ๋ณด์กด, ์ 1ํ ๋ณต๊ตฌ ํ ์คํธ ์ํ |
Control Plane ์ฅ์ ๋ณต๊ตฌ ํ๋ฆ
[Master Node ์ฅ์ ๋ฐ์]
โ
[etcd ์ค๋
์ท ๋ณต์ ์ ์ฐจ ์ํ]
โ
[์ Master Node๋ก kubeadm init --skip-phases=etcd ์คํ]
โ
[Kubernetes API Server ๋ฐ Control Plane ๊ธฐ๋ฅ ๋ณต๊ตฌ]
โ
[ํด๋ฌ์คํฐ ์ ์ํ]
- Kubernetes NetworkPolicy๋ฅผ ํตํด ์๋น์ค ๊ฐ ํต์ ์ ์ด
- Frontend ์๋ฒ์์ DB ์๋ฒ๋ก์ ์ง์ ์ ๊ทผ ์ฐจ๋จ
- Backend API ์๋ฒ๋ฅผ ํตํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ๋ง ํ์ฉ
- ํ์ ์ Pod ๊ฐ ํต์ ์ํธํ๋ฅผ ์ํด Calico IPsec ๋๋ WireGuard ์ ์ฉ ๊ณ ๋ ค
- ์๋น์ค ๊ฐ ์ธ์ฆ ๊ฐํ๋ฅผ ์ํด Istio ๊ธฐ๋ฐ mTLS ์ ์ฉ ๊ฐ๋ฅ์ฑ ๊ฒํ
๐ ๋ณธ ํ์ด์ง๋ 2025๋ 4์ 29์ผ์ ๋ง์ง๋ง์ผ๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค.