안녕하세요! 쿠버네티스를 로컬 환경에서 테스트하고 개발할 때 minikube와 함께 가장 많이 언급되는 도구, 바로 kind에 대해 궁금증을 가지신 분들을 위해 준비했습니다.
"kind로 클러스터를 만들면, 내 컴퓨터에 가상머신(VM)이 여러 개 생기는 걸까? 🤔", "내 컴퓨터에 이미 설치된 Docker의 컨테이너 런타임(CRI)을 그대로 사용하는 걸까?" 와 같은 질문들을 정말 많이 받는데요.
오늘 이 블로그 포스트를 통해 kind가 어떤 아키텍처로 쿠버네티스 클러스터를 구성하는지, 그 영리한 작동 방식을 속 시원하게 파헤쳐 보겠습니다! 🚀

결론부터 말하자면: Docker 컨테이너를 노드로 사용합니다! 🐳➡️💻
가장 핵심적인 질문에 먼저 답을 드릴게요.
kind는 가상 머신(VM)을 사용하지 않습니다. 대신, Docker 컨테이너 하나하나를 쿠버네티스 클러스터의 '노드(Node)'로 사용합니다. 이름부터 kubernetes in docker의 약자이죠!
- 가상 머신(VM) 방식 ❌: 하드웨어 전체를 가상화하여 별도의 운영체제(OS)를 설치하는 무거운 방식입니다. 부팅 시간도 길고 리소스도 많이 차지하죠.
- Kind (컨테이너) 방식 ✅: 호스트 OS의 커널을 공유하며 프로세스를 격리하는 가벼운 방식입니다. 각 노드가 컨테이너이기 때문에 시작 속도가 매우 빠르고 리소스 효율이 뛰어납니다.
이해하기 쉽게 비유해 볼까요?
VM을 사용하는 것은 클러스터를 위해 독립적인 집(VM)을 여러 채 짓는 것과 같습니다. 🏠🏠🏠
반면, kind를 사용하는 것은 내 큰 집(호스트 컴퓨터) 안에 잘 꾸며진 방(Docker 컨테이너) 여러 개를 만들고, 그 방들을 연결해서 하나의 사무 공간(쿠버네티스 클러스터)처럼 쓰는 것과 같습니다. 🏢
이 방식 덕분에 우리는 단 몇 분, 심지어는 몇십 초 만에 멀티 노드 쿠버네티스 클러스터를 내 컴퓨터에 띄울 수 있게 되는 것입니다!
컨테이너 런타임(CRI)의 비밀: 호스트 것을 쓸까? 🤔
자, 이제 두 번째 궁금증으로 넘어가 보겠습니다. "노드가 컨테이너라면, 내가 배포하는 파드(Pod)들은 내 컴퓨터(호스트)의 Docker가 직접 실행하는 걸까?"
이 질문의 답은 "아니요, 그렇지 않습니다" 입니다. kind의 아키텍처는 조금 더 흥미롭게 구성되어 있습니다.
kind는 2단계의 컨테이너 구조를 가집니다.
- 호스트 레벨 (Host Level) 🏠: 여러분의 컴퓨터에 설치된 Docker는 오직 '노드 역할'을 하는 컨테이너들을 실행하는 역할만 합니다. 예를 들어 컨트롤 플레인 노드 컨테이너 1개, 워커 노드 컨테이너 2개를 실행하는 것이죠.
- 노드 컨테이너 레벨 (Node Container Level) 🏢: '노드 역할'을 하는 컨테이너 내부에는 쿠버네티스 노드가 되기 위한 모든 것들이 독립적으로 설치되어 있습니다. 여기에는 kubelet, kubeadm 그리고 가장 중요한 자체적인 컨테이너 런타임 (containerd)이 포함됩니다.
즉, 여러분이 kubectl apply -f my-app.yaml 명령으로 애플리케이션 파드를 배포하면 다음과 같은 순서로 동작합니다.
- kubectl은 컨트롤 플레인 노드(컨테이너)의 API 서버와 통신합니다.
- 스케줄러가 파드를 특정 워커 노드(컨테이너)에 할당합니다.
- 해당 워커 노드(컨테이너) 안에 있는 kubelet이 같은 컨테이너 안에 있는 containerd에게 "이 앱 컨테이너를 실행해 줘!"라고 명령합니다.
- 워커 노드 컨테이너 내부의 containerd가 최종적으로 앱 컨테이너(파드)를 실행합니다.
결론적으로, 호스트의 Docker는 '노드 컨테이너'를 관리하고, '노드 컨테이너' 내부의 containerd가 실제 '애플리케이션 컨테이너(파드)'를 관리하는 이중 구조인 셈입니다. 이 덕분에 각 노드는 실제 물리적인 노드처럼 독립적인 환경을 가질 수 있습니다.
Kind 클러스터 아키텍처 한눈에 보기 🏗️
지금까지 설명한 내용을 그림으로 표현하면 다음과 같습니다.
┌──────────────────────────────────────────────────────────┐
│ 내 컴퓨터 (Host Machine) │
│ │
│ ┌───────────────────────────────────────────────┐ │
│ │ Docker Engine │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ 🌐 Docker Network (kind) │ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ │ ▲ ▲ │ │
│ │ │ │ │ │
│ │ ┌───────▼──────────┐ ┌───▼────────────┐ │ │
│ │ │ Node Container 1 │ │ Node Container 2 │ │ │
│ │ │ (Control Plane) │ │ (Worker) │ │ │
│ │ │ ---------------- │ │ ---------------- │ │ │
│ │ │ - kubelet │ │ - kubelet │ │ │
│ │ │ - containerd │ │ - containerd │ │ │
│ │ │ - etcd, apiserver│ │ │ │ │
│ │ │ │ │ ┌────────────┐ │ │ │
│ │ │ │ │ │ Pod │ │ │ │
│ │ │ │ │ │ (My App) │ │ │ │
│ │ │ │ │ └────────────┘ │ │ │
│ │ └──────────────────┘ └──────────────────┘ │ │
│ └───────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────┘
- 네트워킹 🌐: kind는 클러스터를 생성할 때 Docker 브릿지 네트워크를 만들어 각 노드 컨테이너들이 서로 통신할 수 있도록 연결해줍니다.
정리하며: 가볍고, 빠르고, 독립적인 Kind! ✅
오늘 내용을 통해 kind에 대한 궁금증이 많이 해결되셨기를 바랍니다!
핵심 요약:
- No VM!: kind는 VM 대신 Docker 컨테이너를 노드로 사용하여 매우 가볍고 빠릅니다.
- Nested Runtime: 호스트의 Docker는 노드 컨테이너를 실행할 뿐, 실제 파드는 각 노드 컨테이너 안에 있는 독립적인 컨테이너 런타임(containerd)이 실행합니다.
- Perfect for Local Dev: 이러한 구조 덕분에 kind는 실제 클러스터와 거의 동일한 환경을 최소한의 리소스로 구축할 수 있어, 로컬 개발 및 CI/CD 파이프라인에서의 테스트용으로 최고의 선택지 중 하나입니다.
이제 kind를 사용하실 때 내부적으로 어떻게 동작하는지 명확하게 이해하고 더욱 자신감 있게 활용하실 수 있을 거예요! 😊
태그: kind, kubernetes, docker, CRI, 컨테이너, 클러스터아키텍처, 로컬쿠버네티스
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| 📝 YAML의 진화: 쿠버네티스 사용자를 위한 KYAML 톺아보기! ✨ (1) | 2025.09.09 |
|---|---|
| 미리보는 쿠버네티스 v1.34: 주목해야 할 7가지 핵심 기능! 🚀 (0) | 2025.09.09 |
| 🏙️ 쿠버네티스 도시 건설! 핵심 건물 4가지 만나보기 (Pod, Service, Deployment, Namespace) (0) | 2025.09.03 |
| 🚀 쿠버네티스(Kubernetes) 완벽 정복: 컨테이너 오케스트레이션의 지휘자를 만나다! (0) | 2025.09.03 |
| 🚀 쿠버네티스 대탐험: Context와 Namespace 완전 정복 가이드 (CKAD 필수!) (1) | 2025.09.03 |