Kubernetes를 처음 공부하면 가장 헷갈리는 부분이 Control Plane과 Data Plane의 역할 차이다.
minikube로 실습하면서 구조를 직접 확인해보고 나서야 전체 그림이 정리됐다.
Kubernetes는 크게 다음 2가지 영역으로 나뉜다.
Control Plane (Master Node)
Data Plane (Worker Node)
1. Control Plane (Master Node)
클러스터 전체를 통제하고 관리하는 영역 “두뇌 역할”을 한다고 보면 된다.
1-1 .kube-apiserver

✔ Kubernetes의 모든 요청이 들어오는 관문(Gateway)
✔ kubectl 명령어도 결국 API Server로 요청을 보낸다.
→ kubectl → kube-apiserver → etcd 조회 → 결과 반환
즉, 모든 컴포넌트는 직접 통신하지 않고
반드시 kube-apiserver를 통해서만 통신한다.
Kubernetes의 “중앙 통제 허브”
1-2. etcd
✔ 클러스터의 모든 상태 정보 저장소 (Key-Value DB)
✔ 분산 환경에서도 일관성 보장
저장되는 정보 예:
- Pod 정보
- Deployment 설정
- Service 설정
- ConfigMap / Secret
중요한 점:
Kubernetes는 “현재 상태”가 아니라
“원하는 상태(Desired State)”를 etcd에 저장한다.
그리고 이 상태를 맞추기 위해 컨트롤러들이 계속 동작한다.
1-3. kube-scheduler
✔ 새로 생성된 Pod를
✔ 어떤 Worker Node에 배치할지 결정
기준:
- CPU / Memory
- Node 리소스 상황
- Taints / Tolerations
- Affinity / Anti-affinity
ex) 3개의 Pod를 → 어떤 노드에 배치할지 판단하는 게 Scheduler 역할
1-4.kube-controller-manager
✔ 클러스터 상태를 지속적으로 감시
✔ “현재 상태”와 “원하는 상태”를 맞추는 역할
예:
- ReplicaController
- DeploymentController
- NodeController
- JobController
예시 상황:
Pod 3개 유지해야 하는데 1개가 죽었다
→ Controller가 감지
→ 새 Pod 생성
→ 상태 복구
1-5.cloud-controller-manager
✔ AWS, GCP 같은 클라우드 환경 연동 담당
✔ LoadBalancer, Volume, Node 연동 처리
minikube에서는 거의 체감이 없다.
EKS 같은 환경에서 중요해진다.
2. Data Plane (Worker Node)
실제 애플리케이션이 배포되는 영역 “몸통 역할”
2-1.kubelet
✔ 각 Worker Node에서 실행
✔ Control Plane과 통신
✔ Pod 실행 및 상태 보고
kubelet은 다음을 수행한다:
- API Server에서 Pod 스펙을 받아옴
- Container Runtime에게 컨테이너 실행 요청
- Pod 상태를 API Server에 보고
즉, 노드의 대리인 역할.
2-2. container runtime
✔ 실제로 컨테이너를 실행하는 엔진
예:
- containerd
- CRI-O
- (예전에는 Docker)
minikube에서는 보통 containerd 사용
흐름: kubelet → container runtime → 컨테이너 실행
2-3 kube-proxy
✔ 네트워크 라우팅 담당
✔ Service가 Pod로 트래픽을 전달할 수 있도록 처리
흐름
Service (ClusterIP)
↓
kube-proxy가 iptables/ipvs 설정
↓
실제 Pod로 트래픽 전달
Service가 Pod를 직접 찾는 게 아니라
kube-proxy가 네트워크 규칙을 만들어주는 구조다.
전체 흐름 정리
Pod를 하나 생성한다고 가정해보자.
kubectl apply -f deployment.yaml
1️⃣ kubectl → kube-apiserver
2️⃣ apiserver → etcd에 desired state 저장
3️⃣ scheduler → Pod를 어느 노드에 배치할지 결정
4️⃣ kubelet → container runtime에게 실행 요청
5️⃣ kube-proxy → 네트워크 설정
6️⃣ Controller → 상태 계속 감시
이 모든 과정이 자동으로 돌아간다.
'코드 > dev' 카테고리의 다른 글
| 쿠버네티스 (0) | 2025.11.21 |
|---|---|
| Jaeger와 Kibana로 로그통합 (1) | 2025.09.24 |
| 확장성을 고려한 CI/CD 구축 방법 -3 (0) | 2025.09.22 |
| 확장성을 고려한 CI/CD 구축 방법 -2 (0) | 2025.09.17 |
| 확장성을 고려한 CI/CD 구축 방법 -1 (0) | 2025.09.12 |
















