우와한 개발자

[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 설치

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

 

 

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기