[Kubernetes] Minikube로 시작하는 쿠버네티스 - 설치부터 배포, 서비스까지
by 우와한개발자
1. Minikube(미니쿠브)란?
- 로컬 컴퓨터 환경(Windows, macOS, Linux)에서 단일 노드 쿠버네티스(Kubernetes) 클러스터를 쉽고 빠르게 실행할 수 있게 해주는 오픈소스 도구
2. Minikube 주요 명령어
| 명령어 | 설명 |
| minikube start | Minikube 클러스터 시작 |
| minikube stop | Minikube 클러스터 중지 |
| minikube delete | Minikube 클러스터 삭제 |
| minikube dashboard | 클러스터 대시보드 열기 |
| minikube status | Minikube 클러스터 상태 확인 |
| minikube ssh | Minikube 클러스터 가상 머신에 SSH 연결 |
| minikube service <service-name> | LoadBalancer 서비스 열기 (서비스 유형이 LoadBalancer일 때) |
| minikube k8s-version | Minikube에서 사용 중인 쿠버네티스 버전 확인 |
| minikube logs | Minikube 클러스터 로그 보기 |
3. kubectl 주요 명령어
- kubectl : 쿠버네티스 클러스터를 제어하는 CLI(명령줄 도구)
사용자
↓ 명령어 입력
kubectl
↓ HTTP 요청으로 변환
kube-api-server
↓
클러스터 실행
| 명령어 | 의미 | 예시 |
| kubectl get [리소스] | 목록 조회 | kubectl get pod |
| kubectl get all | 전체 리소스 조회 | kubectl get all |
| kubectl get pod -o wide | 상세정보 포함 조회 | IP, Node 정보까지 표시 |
| kubectl describe [리소스] [이름] | 상세 조회 | kubectl describe pod my-pod |
| kubectl apply -f [파일] | 생성·수정 | kubectl apply -f deployment.yaml |
| kubectl delete -f [파일] | 파일로 삭제 | kubectl delete -f deployment.yaml |
| kubectl delete [리소스] [이름] | 직접 삭제 | kubectl delete pod my-pod |
| kubectl logs [pod명] | 로그 조회 | kubectl logs tomcat-pod |
| kubectl logs -f [pod명] | 로그 실시간 조회 | kubectl logs -f tomcat-pod |
| kubectl exec -it [pod명] -- bash | Pod 내부 접속 | kubectl exec -it tomcat-pod -- bash |
| kubectl set image deployment/[이름] [컨테이너]=[이미지] | 이미지 업데이트 | kubectl set image deployment/tomcat-deployment tomcat=tomcat:11 |
| kubectl rollout status deployment/[이름] | 배포 진행상황 | kubectl rollout status deployment/tomcat-deployment |
| kubectl rollout undo deployment/[이름] | 롤백 | kubectl rollout undo deployment/tomcat-deployment |
| kubectl config get-contexts | 컨텍스트 목록 | 등록된 클러스터 목록 확인 |
| kubectl config use-context [이름] | 컨텍스트 전환 | kubectl config use-context minikube |
4. Minikube 실습
1) minikube 설치
- https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fdebian+package 접속해 컴퓨터 환경에 맞게 설치
curl -LO <https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb> # 리눅스 환경에 맞게 데비안패키지 다운
sudo dpkg -i minikube_latest_amd64.deb #패키지 설치
2) minikube 시작 및 상태 확인
- 이미지를 다운받고 컨테이너로 띄워짐
minikube start # 미니쿠브 이미지를 다운받고 minikube라는 이름의 컨테이너로 띄워짐
minikube status # 미니쿠브 상태 확인
3) kubectl 설치
sudo snap install kubectl --classic # kubectl 설치
kubectl version --client # kubectl 버전 확인
kubectl config use-context minikube # kubectl의 컨텍스트를 minikube로 변경
- 컨텍스트(context) : kubectl이 어느 클러스터에 명령을 보낼지 지정해놓은 설정값
- docker 명령어로 실행한게 아니라서 docker ps 해도 컨테이너 안보임 (대신 kubectl get pods 로 파드 보임.)
4) 디플로이먼트 정의 및 실행
- docker-compose.yml에 컨테이너 관련해서 정의되는 것처럼 정의
# 예시 - tomcat-deployment.yml
apiVersion: apps/v1 # 쿠버네티스 API 버전 (Deployment는 apps/v1 사용)
kind: Deployment # 리소스 종류
metadata:
name: tomcat-deployment # 이 Deployment의 이름
spec:
replicas: 1 # 실행할 Pod 수 (2, 3으로 늘리면 스케일 아웃)
selector:
matchLabels:
app: tomcat # 이 라벨이 붙은 Pod를 이 Deployment가 관리
template: # 아래부터 Pod 설계도
metadata:
labels:
app: tomcat # Pod에 붙이는 라벨 (위 selector와 반드시 일치)
spec:
containers:
- name: tomcat # 컨테이너 이름
image: jinkyoungheo/tomcat10 # 사용할 Docker 이미지
ports:
- containerPort: 8080 # 컨테이너가 사용하는 포트
kubectl apply -f tomcat-deployment.yml # yml 실행해서 컨테이너 실행
kubectl get pods -n default # default 네임스페이스의 pod 상태 확인
kubectl get pods # pod 확인
kubectl get replicasets # replicaset 확인
kubectl get deployments # deployment 확인
# 디플로이먼트명-레플리카셋명-파드명으로 이름이 지어짐
(1) 디플로이먼트 정의시 볼륨 설정
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deployment
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: jinkyoungheo/tomcat10
ports:
- containerPort: 8080
volumeMounts:
- name: my-volume # 아래 volumes의 name과 일치해야 함
mountPath: /usr/local/tomcat/webapps # 컨테이너 안의 경로
volumes:
- name: my-volume # volumeMounts의 name과 일치해야 함
hostPath:
path: /data/webapps # 호스트(서버)의 실제 경로
5) 서비스 정의 및 실행
# 예시 - tomcat-service.yml
apiVersion: v1 # 쿠버네티스 API 버전 (Service는 v1 사용)
kind: Service # 리소스 종류
metadata:
name: tomcat-service # 이 Service의 이름
spec:
selector:
app: tomcat # 이 라벨이 붙은 Pod에게 트래픽 전달
# Deployment의 template.labels.app과 일치해야 함
ports:
- protocol: TCP
port: 8080 # Service가 받는 포트 (클러스터 내부에서 접근하는 포트)
targetPort: 8080 # 실제 Pod(컨테이너)의 포트
nodePort: 30080 # 외부에서 접근하는 포트 (30000~32767 범위)
type: NodePort # 서비스 타입 (외부에서 접근 가능하게 노출)
외부 브라우저
↓ 30080 (nodePort)
Node (서버)
↓ 8080 (port)
Service
↓ 8080 (targetPort)
Pod (tomcat 컨테이너)
6) 디플로이먼트와 서비스 한번에 정의
- --- 로 리소스를 구분해 한번에 정의 가능
7) pod 접속 및 종료
(1) 파드에 명령
# Pod 내부 접속
kubectl exec -it <pod-name> -- bash
# Pod 내부에서 명령어 실행 (접속 없이)
kubectl exec <pod-name> -- ls /usr/local/tomcat
kubectl exec <pod-name> -- cat /etc/hosts
kubectl exec <pod-name> -- env # 환경변수 확인
(2) 종료
# Pod 삭제 (Deployment가 있으면 자동으로 다시 생성됨)
kubectl delete pod <pod-name>
# Deployment 삭제 (Pod까지 같이 삭제됨)
kubectl delete deployment <deployment-name>
# YAML 파일로 삭제
kubectl delete -f deployment.yaml
# 전체 다 삭제
kubectl delete all --all
'인프라' 카테고리의 다른 글
| [Docker] Docker Swarm 이란? 아키텍처와 주요 명령어(+쿠버네티스 비교) (0) | 2026.03.17 |
|---|---|
| [Kubernetes] 쿠버네티스(Kubernetes)란? 아키텍처와 리소스 (0) | 2026.03.17 |
| [Docker] Docker Networking이란? docker network driver 종류와 명령어 정리 (0) | 2026.03.17 |
| [Docker] Docker Volume이란? 컨테이너 데이터 관리와 mount (0) | 2026.03.16 |
| [Docker] Docker Compose란? 명령어와 yml 작성법 정리 (0) | 2026.03.16 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자