본문 바로가기
클라우드/쿠버네티스

🤔 Kind는 어떻게 쿠버네티스 클러스터를 만들까요? VM? 호스트 CRI? 속 시원히 파헤쳐 보기!

by gasbugs 2025. 9. 4.

안녕하세요! 쿠버네티스를 로컬 환경에서 테스트하고 개발할 때 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단계의 컨테이너 구조를 가집니다.

  1. 호스트 레벨 (Host Level) 🏠: 여러분의 컴퓨터에 설치된 Docker는 오직 '노드 역할'을 하는 컨테이너들을 실행하는 역할만 합니다. 예를 들어 컨트롤 플레인 노드 컨테이너 1개, 워커 노드 컨테이너 2개를 실행하는 것이죠.
  2. 노드 컨테이너 레벨 (Node Container Level) 🏢: '노드 역할'을 하는 컨테이너 내부에는 쿠버네티스 노드가 되기 위한 모든 것들이 독립적으로 설치되어 있습니다. 여기에는 kubelet, kubeadm 그리고 가장 중요한 자체적인 컨테이너 런타임 (containerd)이 포함됩니다.

즉, 여러분이 kubectl apply -f my-app.yaml 명령으로 애플리케이션 파드를 배포하면 다음과 같은 순서로 동작합니다.

  1. kubectl은 컨트롤 플레인 노드(컨테이너)의 API 서버와 통신합니다.
  2. 스케줄러가 파드를 특정 워커 노드(컨테이너)에 할당합니다.
  3. 해당 워커 노드(컨테이너) 안에 있는 kubelet이 같은 컨테이너 안에 있는 containerd에게 "이 앱 컨테이너를 실행해 줘!"라고 명령합니다.
  4. 워커 노드 컨테이너 내부의 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에 대한 궁금증이 많이 해결되셨기를 바랍니다!

핵심 요약:

  1. No VM!: kind는 VM 대신 Docker 컨테이너를 노드로 사용하여 매우 가볍고 빠릅니다.
  2. Nested Runtime: 호스트의 Docker는 노드 컨테이너를 실행할 뿐, 실제 파드는 각 노드 컨테이너 안에 있는 독립적인 컨테이너 런타임(containerd)이 실행합니다.
  3. Perfect for Local Dev: 이러한 구조 덕분에 kind는 실제 클러스터와 거의 동일한 환경을 최소한의 리소스로 구축할 수 있어, 로컬 개발 및 CI/CD 파이프라인에서의 테스트용으로 최고의 선택지 중 하나입니다.

이제 kind를 사용하실 때 내부적으로 어떻게 동작하는지 명확하게 이해하고 더욱 자신감 있게 활용하실 수 있을 거예요! 😊

 

 

태그: kind, kubernetes, docker, CRI, 컨테이너, 클러스터아키텍처, 로컬쿠버네티스