본문으로 건너뛰기
Kubernetes 로고

생성 수정

Kubernetes · 6장

미니쿠베

노트북 한 대에서 쿠버네티스를 처음 만나는 가장 쉬운 길. WSL2(우분투) 기준으로 설치하고, 클러스터를 띄우고, 배포해 브라우저로 확인하는 데까지 화면 캡처를 따라가며 진행한다.

6장 · 총 6개 절 · 전체 9개 장 중 6번째

미니쿠베는 무엇을 위한 도구인가

6장 · 01

미니쿠베는 내 컴퓨터 안에 쿠버네티스 클러스터 한 대를 통째로 띄워주는 도구입니다. 서버도, 클라우드 계정도 필요 없이 몇 분 만에 kubectl을 써볼 수 있어서 "처음"에 가장 잘 맞습니다.

  • 노트북 한 대에 단일 노드(기본) 클러스터를 만든다 — VM 또는 컨테이너 안에 컨트롤 플레인과 kubelet이 함께 들어간다
  • 쿠버네티스 프로젝트가 직접 관리하는 공식 도구라 새 버전 대응이 빠르다
  • 애드온(대시보드·인그레스·metrics-server)을 명령 한 줄로 켜고 끌 수 있다
  • --nodes 옵션으로 다중 노드 흉내도 낼 수 있지만, 어디까지나 로컬 학습·개발용이다
  • 비슷한 도구로 kind(도커 컨테이너를 노드로 쓰는 방식)가 있고, Docker Desktop 내장 쿠버네티스는 5장에서 이미 다뤘다
  • 운영 서버에는 쓰지 않는다 — 그 자리는 K3s(7장)나 kubeadm(8장)이 맡는다

WSL2 준비와 미니쿠베 설치

6장 · 02

이 노트는 WSL2(우분투) 한 가지 환경만 다룹니다. 도커 데스크톱의 WSL 통합을 켜두면 우분투 안에서 docker 명령이 그대로 통하고, 미니쿠베는 그 도커를 드라이버로 써서 클러스터를 컨테이너 하나로 만듭니다.

  • 전제 — 5장에서 세운 WSL2 우분투와 도커 데스크톱이 그대로 쓰인다
  • 도커 데스크톱 → Settings → Resources → WSL integration 에서 쓰는 배포판이 켜져 있어야 한다(꺼져 있으면 우분투에서 docker 명령을 찾지 못한다)
  • 미니쿠베는 바이너리 하나다 — 내려받아 /usr/local/bin 에 넣으면 설치가 끝난다
  • 설치 확인은 minikube version 한 줄이다

미니쿠베 설치 — 우분투 터미널에 그대로 붙여넣기

세 줄을 한 번에 복사해 붙여넣는다. sudo 비밀번호를 한 번 묻는다.

미니쿠베 설치
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube version
curl 로 미니쿠베 바이너리를 내려받아 install 로 설치하고 minikube version 으로 확인한 터미널 화면
설치가 끝나면 minikube version 이 버전과 커밋 해시를 출력한다

클러스터 기동과 kubectl 연결

6장 · 03

minikube start 가 도커 컨테이너 하나를 노드로 만들어 컨트롤 플레인을 띄우고 kubeconfig까지 등록합니다. 그다음 kubectl을 설치하면 클러스터를 다룰 준비가 끝납니다.

  • --driver=docker — 클러스터를 도커 컨테이너 안에 담는다(WSL2에서 가장 간단한 방법)
  • 처음 실행은 이미지를 내려받느라 몇 분 걸린다. 끝나면 kubectl 컨텍스트가 minikube 로 자동 전환된다
  • kubectl 은 별도 설치다 — 우분투에서는 snap 한 줄이 가장 간단하다
  • kubectl get nodes 에 minikube 노드가 Ready 로 보이면 클러스터가 살아 있는 것이다
  • docker ps 에 kicbase 컨테이너가 하나 보인다 — 그 컨테이너가 곧 노드다
  • minikube ssh 로 그 노드 안에 들어가 볼 수 있고, exit 로 빠져나온다

1. 클러스터 기동과 kubectl 설치 — 한 번에 붙여넣기

클러스터 기동
minikube start --driver=docker
sudo snap install kubectl --classic
kubectl get nodes
docker ps

루트 계정으로 실행 중이라 start 가 거부되면 --force를 붙인다(아래 캡처가 그 경우다). 일반 사용자 계정이면 필요 없다.

minikube start --driver=docker 실행 로그 — 이미지 내려받기, 컨트롤 플레인 기동, kubectl 설정까지
Done! 메시지가 뜨면 kubectl 이 minikube 클러스터를 바라보도록 설정까지 끝난 것이다

2. 노드 확인과 컨테이너 들여다보기

kubectl 로 보면 노드 한 대, docker 로 보면 컨테이너 한 개다 — 같은 것을 위아래에서 본 것이다. minikube ssh 로 그 안에 들어갔다가 exit 로 나온다.

kubectl get nodes 로 minikube 노드가 Ready 인 것과 docker ps 로 kicbase 컨테이너를 확인한 화면
kubectl get nodes → minikube Ready · docker ps → kicbase 컨테이너 한 개
minikube ssh 로 접속한 노드에서 exit 로 빠져나오는 화면
exit 로 노드 밖(호스트 우분투)으로 돌아온다

첫 배포 — hello-minikube 띄우고 브라우저로 확인

6장 · 04

클러스터가 떴으면 배포는 다른 장과 똑같습니다. 디플로이먼트를 만들고, 서비스로 노출하고, 포트포워딩으로 브라우저에서 확인하는 데까지 한 번에 가봅니다.

  • create deployment — 파드를 만들고 개수를 유지할 디플로이먼트를 만든다
  • expose --type=NodePort — 그 파드 앞에 고정 접점(서비스)을 둔다
  • kubectl get all 로 파드·서비스·디플로이먼트·레플리카셋을 한 화면에서 확인한다
  • port-forward 는 파드 이름을 인자로 받는다 — get all 에 보이는 실제 파드 이름을 쓴다(이름은 매번 다르다)
  • 포워딩을 띄운 채로 브라우저에서 localhost:8080 을 열면 에코 서버 응답이 보인다
  • port-forward 는 터미널을 붙잡고 있는 임시 터널이다 — Ctrl+C 로 끊으면 접근도 끊긴다

1. 배포하고 노출하기 — 한 번에 붙여넣기

배포와 노출
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
kubectl expose deployment hello-minikube --type=NodePort --port=8080
kubectl get all
kubectl get svc

deployment.apps/hello-minikube created · service/hello-minikube exposed 두 줄이 나오면 성공이다.

kubectl create deployment 와 expose deployment 실행 결과 — created, exposed 메시지
created · exposed 두 줄이 성공 신호다

2. 만들어진 것 확인하고 파드 이름 찾기

get all 첫 줄의 pod/hello-minikube-… 가 다음 단계에 쓸 파드 이름이다. 뒤의 임의 문자열은 사람마다 다르므로 화면에 보이는 값을 그대로 복사한다.

kubectl get all 과 kubectl get svc 결과 — 파드·서비스·디플로이먼트·레플리카셋 목록
pod/hello-minikube-5dd9d5dc5b-q5h7f — 이 이름을 그대로 다음 명령에 넣는다

3. 포트포워딩하고 브라우저로 확인

파드 이름 자리를 위에서 확인한 값으로 바꿔 실행한다.

kubectl port-forward 실행 화면 — 127.0.0.1:8080 에서 파드의 8080 으로 포워딩
Forwarding from 127.0.0.1:8080 -> 8080 이 뜨면 터미널을 그대로 둔 채 브라우저를 연다
브라우저에서 localhost:8080 에 접속해 에코 서버가 요청 정보를 출력한 화면
localhost:8080 — Hostname 에 파드 이름이 그대로 찍힌다

이미지를 받지 못한다면 k8s.gcr.io 는 registry.k8s.io 로 옮겨간 옛 주소다 — registry.k8s.io/echoserver:1.10 으로 바꿔 실행한다.

애드온 — 대시보드·인그레스·메트릭

6장 · 05

인그레스 컨트롤러·메트릭 서버·대시보드처럼 실습에 자주 필요한 구성 요소를 미니쿠베는 애드온으로 갖고 있습니다. K3s가 이것들을 처음부터 품고 있는 것과 대비되는 지점입니다.

  • minikube addons list 로 켜고 끌 수 있는 목록을 본다
  • ingress — NGINX 인그레스 컨트롤러를 설치한다. 켜야 Ingress 객체가 실제로 동작한다
  • metrics-server — kubectl top 과 HPA(오토스케일러)가 필요로 하는 지표 수집기다
  • dashboard — 웹 UI. minikube dashboard 명령이 브라우저까지 열어준다
  • registry·storage-provisioner 등도 있다 — 필요할 때만 켠다(켤수록 자원을 먹는다)

애드온 켜기

정지·삭제와 미니쿠베의 한계

6장 · 06

실습이 끝나면 멈추거나 지웁니다. stop 은 상태를 남긴 채 끄는 것이고 delete 는 클러스터 자체를 없애는 것입니다. 마지막으로 미니쿠베가 어디까지의 도구인지 선을 그어둡니다.

  • minikube stop — 클러스터를 멈춘다. 다음 start 에서 그대로 이어진다
  • minikube delete — 클러스터를 삭제한다. --all 은 모든 프로필까지 지운다
  • 노트북 자원을 계속 먹으므로 쓰지 않을 때는 stop 해두는 편이 낫다
  • 한계 1 — 로컬 단일 머신이라 진짜 다중 노드 장애·네트워크 상황을 재현하지 못한다
  • 한계 2 — 노드가 곧 내 노트북이므로 외부에 서비스를 공개하는 실습에는 맞지 않는다
  • 그래서 다음 장(K3s)에서는 실제 서버에 클러스터를 세우고 노드를 붙여본다

정리 명령