Minikube는 로컬 컴퓨터에서 단일 노드 Kubernetes 클러스터를 실행하여 애플리케이션 개발, 테스트 및 배포를 쉽게 할 수 있게 도와준다. 처음 k8s를 접하는 사람에게 권장하여 나도 이를통해 알아가보려고한다.
Minikube를 사용하기 위해서는 docker가 필요한데, 나는 이미 설치했으니 넘어가겠다. 나머지 설치 명령어들은 아래와 같다.
세팅
kubectl 설치
# (Ubuntu 기준) 공식 문서 권장 방식:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 실행 권한 부여
chmod +x kubectl
# 시스템 경로에 이동
sudo mv kubectl /usr/local/bin/
# 확인
kubectl version --client
minikube 설치
# 최신 버전 예시 (버전 번호 확인해서 변경)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube-linux-amd64
sudo mv minikube-linux-amd64 /usr/local/bin/minikube
# 확인
minikube version
내부적으로 네트워크 패킷 필터링 등에 필요한 conntrack 등이 필요할 수 있다고 하여 conntrack도 미리 설치해두려고한다.
sudo apt-get update
sudo apt-get install -y conntrack
실행
minikube start --driver=docker
위 명령어를 통해 minikube가 내부적으로 docker 컨테이너를 하나 만들어서 그 안에 싱글 노드 k8s 클러스터를 구동한다.
minikube status
kubectl get nodes
위 명령어를 통해 상태를 확인할 수 있다.
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 46h v1.32.0
Deployment & Service 생성
간단한 Echo 서버 이미지를 사용하여 Deployment를 만든 뒤, NodePort 타입으로 Service를 개방해보자
# 간단한 HTTP Echo 서버 배포
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
# 8080 포트로 노출 (NodePort)
kubectl expose deployment hello-minikube --type=NodePort --port=8080
NodePort는 쿠버네티스에서 서비스의 유형 중 하나로, 클러스터 외부에서 특정 포트(30000~32767)를 통해 클러스터 내부의 파드에 접근할 수 있게 해준다.
kubectl get pods, kubectl get services 명령어로 배포 상태를 확인할 수 있다.
종료 및 초기화
클러스터 중지
minikube stop
완전 삭제(클러스터 초기화)
minikube delete
- 설정 및 컨테이너가 모두 제거되며, 재시작 시 완전히 새 클러스터가 생성된다.
구조
┌──────────────────────────┐
│ Windows Host OS │
│ │
│ (localhost) │
└────────────┬─────────────┘
│
(안 보이는 NAT + 가상 브릿지)
│
┌────────────▼─────────────┐
│ WSL2 (Ubuntu) │ ← 사용자 명령 실행 위치
│ │
│ ┌────────────────────┐ │
│ │ Minikube VM │ │ ← Docker driver 기반으로 실행 중
│ │ (k8s 클러스터 1노드)│ │
│ │ IP: 192.168.49.2 │ │ ← minikube ip
│ └──────────┬──────────┘ │
│ │ │
│ NodePort 서비스 │ ← 예: 31024
│ │ │
│ K8s 서비스 │
│ │ │
│ Pod │ ← 예: echo-server
└────────────┴─────────────┘
여기까지 진행했을때의 네트워크 구조이다. window에서 바로 minikube ip에 접근할 수 없고, 테스트를 위한 환경이지만 window - ubuntu - minikube 과정으로 접근해야하기 때문에 엄청 번거로운 구조이다.
여기서 문제는 또 다시 ubuntu에서 minikube로 포워딩을 해줘야한다. 그렇지않으면 접근할 수 없었다.
kubectl port-forward hello-minikube-ffcbb5874-kp97w 31024:8080
hello-minikube-ffcbb5874-kp97w은 pod name으로 kubectl get pod 등의 명령어를 사용하면 확인할 수 있다.
이와같은 과정으로 간단하게 k8s를 실행해 볼 수 있었다. kubectl port-forward방법 말고 다른 방법을 찾아본 뒤에 밀도있게 k8s에 대해 알아보자.

알아보니 kind(Kubernetes in Docker)를 사용하면 가능한듯하다.
먼저 minikube를 삭제한다.
minikube delete
sudo rm -rf ~/.minikube
sudo rm /usr/local/bin/minikube
다음으로 kind를 설치하자
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
다음으로 클러스터 구성 설정을 위한 yaml파일을 만들어야한다.
# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30000
hostPort: 30000
- role: worker
- role: worker
extraPortMappings는 kind에서만 사용하는 특별한 설정 항목으로, kind 클러스터를 생성할 때 Docker 컨테이너의 포트를 로컬(호스트) 포트로 포워딩(매핑) 해주는 역할을 한다.
kind는 minikube와 달리 여러 노드를 구성할 수 있다. 필요시 해당 파일에서 role: worker를 추가하자
kind create cluster --name my-cluster --config kind-config.yaml
위의 명령어로 클러스터 생성한뒤에
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx \
--type=NodePort \
--port=80 \
--target-port=80 \
--name=nginx \
--overrides='{"spec": {"ports": [{"port": 80, "targetPort": 80, "nodePort": 30000}]}}'
nginx를 배포하도록한다.

테스트를 삭제하고 다시하고싶다면?
kind delete cluster
kind create cluster --config kind-config.yaml
---
생각해보니 이건 좀 편법이고 nginx를 활용하면 해결할 수 있을듯.
'Web' 카테고리의 다른 글
| AWS DOP - CloudFormation (1) (0) | 2025.04.16 |
|---|---|
| AWS DOP - SDLC Automation 파트 개념 정리 (2) | 2025.04.15 |
| AWS EC2 -> 온프레미스 전환 (4) - 절전 모드 방지 (0) | 2025.04.11 |
| AWS EC2 -> 온프레미스 전환 (3) - ssh 설치 (0) | 2025.04.11 |
| AWS EC2 -> 온프레미스 전환 (2) - 포트포워딩 (0) | 2025.04.11 |