쿠버네티스 카인드(KinD, Kubernetes in Docker)는 이름 그대로 Docker 컨테이너를 쿠버네티스 노드(Node)로 사용하여 클러스터를 실행하는 도구입니다.
기존의 미니큐브(Minikube)가 주로 가상 머신(VM)을 기반으로 개별 노드를 띄웠다면, 카인드는 훨씬 가볍고 빠른 Docker 환경을 활용하는 것이 특징입니다. 특히 로컬에서 멀티 노드 클러스터를 테스트하거나 CI(지속적 통합) 환경에서 쿠버네티스를 검증할 때 매우 강력한 도구입니다.
미니큐브에서 카인드로 전환 시 알아야 할 핵심 키워드
미니큐브와 카인드는 ‘로컬 쿠버네티스’라는 목적은 같지만, 구조적 차이가 큽니다. 구조를 변경할 때 다음 키워드를 중심으로 준비하세요.
1. 노드 구현 방식 (Docker-as-a-Node)
- 미니큐브: 주로 가상 머신(VM)이나 별도의 드라이버(Hyper-V, VirtualBox 등)를 통해 노드를 생성합니다.
- 카인드: 별도의 가상화 레이어 없이 Docker 컨테이너 자체가 하나의 쿠버네티스 노드가 됩니다. 따라서 Docker 호스트의 자원을 직접 공유하며 실행 속도가 매우 빠릅니다.
2. 멀티 노드 구성 (Multi-node Configuration)
- 미니큐브는 단일 노드(Single-node) 중심이며 멀티 노드 구성이 상대적으로 번거롭습니다.
- 카인드는 YAML 설정 파일 하나로 제어 평면(Control-plane)과 작업 노드(Worker node)를 여러 개 정의할 수 있습니다. 실제 운영 환경과 유사한 분산 환경을 로컬에서 구현하기에 최적화되어 있습니다.
3. 로컬 이미지 로딩 (Image Loading)
- 미니큐브에서는
minikube image load명령어를 사용하거나 Docker 환경을 공유(eval $(minikube docker-env))했습니다. - 카인드에서는 로컬에서 빌드한 이미지를 클러스터 안으로 직접 넣어주는
kind load docker-image <이미지명>명령어를 명시적으로 사용해야 합니다. 클러스터 외부의 Docker 이미지 저장소를 거치지 않고 바로 노드에 배포할 수 있습니다.
4. 네트워크와 포트 매핑 (Networking & Port Mapping)
- 미니큐브는
minikube service명령어로 외부 접속 URL을 제공받았습니다. - 카인드는 컨테이너 기반이므로, 외부에서 클러스터 서비스에 접속하려면 클러스터 생성 시점에
extraPortMappings설정을 통해 호스트와 컨테이너 간의 포트를 미리 연결해두어야 합니다.
5. 인그레스(Ingress) 설정
- 미니큐브는
minikube addons enable ingress명령으로 간단히 활성화합니다. - 카인드에서는 별도의 Ingress Controller(예: NGINX Ingress Controller)를 직접 설치해야 하며, 이 과정에서 포트 80/443 매핑 설정이 사전에 cluster config에 포함되어야 정상 작동합니다.
6. 스토리지 (Storage Class)
- 카인드는 기본적으로
standard라는 이름의 Local Path Provisioner를 사용합니다. - 데이터 보존이 필요한 경우, 호스트의 특정 디렉토리를 노드(컨테이너)와 연결하는
extraMounts설정을 활용하여 영구 볼륨(PV)을 관리해야 합니다.
비교 요약 테이블
| 구분 | 미니큐브 (Minikube) | 카인드 (KinD) |
|---|---|---|
| 기반 기술 | VM, Docker, Bare Metal 등 다양함 | Docker 컨테이너 전용 |
| 실행 속도 | 상대적으로 느림 (VM 부팅 시간) | 매우 빠름 |
| 멀티 노드 | 설정이 다소 복잡함 | YAML 파일로 매우 간편함 |
| 주 용도 | 로컬 개발 및 학습용 | CI/CD 파이프라인 및 테스트 자동화 |