2025년 10월 8일
minikube
란 로컬 환경에서 Kubernates 클러스터를 쉽게 실행할 수 있게 도와주는 도구이다.
여기서 Kubernates가 무엇인지 한번 짚고 가야한다.
전의 게시글에서, 컨테이너에 대한 개념을 기재한 적이 있다.
컨테이너를 정리해보자면 이미지를 기반으로 실행되는 격리된 프로세스 환경이다.
비유하면
VM은 건물 전체를 새롭게 짓는 것이고, 컨테이너는 한 건물 안에 여러 임대 사무실들을 구분해서 쓰는 것이다.
그리고 이 컨테이너들은 호스트 OS 커널을 공유하면서 프로세스 단위로 격리 되는데, 여기서 호스트 OS 커널은 건물에서 공통적으로 사용하는 전기, 수도, 네트워크 같은 것들이라고 비유할 수 있다.
컨테이너는 경량화 되어있고 독립적인 환경을 보장해준다는 장점이 있지만, 여러 대의 서버에서 수백, 수천 개의 컨테이너를 운영하기에는 관리가 쉽지 않다.
만약 서버가 수백, 수천대로 늘어난다면 어느 서버(머신)에 컨테이너를 배포할지 결정해야하고, 죽은 컨테이너를 다시 살려야하며, 트래픽이 몰리면 자동으로 확장해야한다.
이런 문제를 자동으로 해결해주는 오케스트레이션 도구가 바로 쿠버네티스이다.
쿠버네티스는 여러 대의 서버(노드)에 걸쳐 수백, 수천 개의 컨테이너를 자동으로 배포·관리·복구하는 시스템이다.
쿠버네티스는 여러 대의 컴퓨터(노드)를 묶어서 관리한다. 이 묶음을 클러스터(Cluster) 라고 부른다.
클러스터 안에는 두 종류의 노드가 있다.
클러스터의 두뇌라고 할 수 있다. Pod를 어디에 배포할지 결정한다.
실제 컨테이너가 실행 되는 컴퓨터이다.
노드는 쿠버네티스 클러스터 안에서 컨테이너(Pod)를 실제로 실행하는 컴퓨터 한 대
를 의미한다.
여기서 컴퓨터 한 대는 실제 물리 서버든, EC2 같은 가상 머신이든 상관없다.
즉, 노드는 컨테이너들이 실제로 작동 되는 실행 공간이다.
쿠버네티스에서 컨테이너들을 직접 다루지는 않지만, 대신 Pod라는 단위로 컨테이너들을 묶어서 관리한다.
[Node]
└── [Pod A]
├─ [Container 1: main-app]
└─ [Container 2: sidecar-logger]
└── [Pod B]
└─ [Container: nginx]
Pod A는 2개의 컨테이너(main + sidecar)를 가지고 있고, Pod B는 1개의 컨테이너만 가지고 있다.
컨테이너가 어플리케이션을 담은 상자라면, Pod는 그 상자들이 한 공간(네트워크, 스토리지, IP 등)을 공유하게 해주는 껍질이다.
즉 Pod는 쿠버네티스에서 컨테이너를 실행하고 관리하는 최소 단위이다.
햄버거로 한번 비유해보자.
컨테이너는 햄버거, 감자튀김, 음료로 이루어진 단일 셋트이다. (운영 시스템이 아님)
하지만 햄버거 가게 전체를 운영하기 위해서는 손님이 많을때는 햄버거를 더 만들고 잘못 주문 된 부분에 대해서는 새롭게 만들어야하고, 만약 손님이 많아져서 대기가 생긴다면 이 손님들에 대한 줄을 세워야한다.
이 운영에 대한 전체 조율을 담당하는게 쿠버네티스라고 할 수 있고, minikube는 이러한 경험을 해볼 수 있도록 미니 모형 가게를 하나 차려주는 프로그램인 것이다.
이를 실행하기 위해 도커, Kubectl를 설치했다.
kubectl은 쿠버네티스 클러스터를 명령어로 조작할 수 있게 해주는 CLI 도구이다.
배포 생성, 파드 상태 조회, 서비스 노출 등 대부분의 작업을 kubectl을 통해 수행한다.
brew install minikube
minikube start --driver=docker
Virtual Box로 실행시킬 수도 있는데, 현재 Virtual Box는 ARM (macOS M1 이상) 환경을 지원하지 않는다.
그렇기 때문에 Docker를 사용하여 시작해야한다.
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080
위 명령어를 통해, 이미 실행 중인 minikube 클러스터 안에 hello-node라는 디플로이먼트를 생성했다.
이 디플로이먼트는 Pod의 자동 배포와 복제, 복구를 담당하는 상위 관리 객체로, 지정된 이미지를 기반으로 하나의 Pod를 실행한다.
Container → 애플리케이션 실행 단위
Pod → 컨테이너 묶음 (공유 환경)
Deployment → Pod의 자동 배포/관리 단위
Node → Pod이 실행되는 컴퓨터
Cluster → 여러 노드를 묶은 쿠버네티스 전체 시스템
minikube → 그 전체를 로컬에서 경험해볼 수 있는 미니 클러스터 환경