미니큐브로 쿠버네티스 컨테이너 오케스트레이션 실습
AWS EKS cluster를 생성하면 컨트롤 플레인을 관리형으로 구성해줍니다.
데이터 플레인은 Managed Node Group, EC2, Fargate 등을 이용해 별도로 구성합니다.
EKS는 비용이 많이 발생하니 연습용 쿠버네티스 클러스터 미니큐브로 학습하는 것이 좋습니다.
쿠버네티스에서 제공하는 미니 큐브는 무료로 사용할 수 있는 로컬 쿠버네티스 환경입니다.
기본값으로 하나의 노드가 컨트롤 플레인 노드와 워커 노드 역할을 모두 수행합니다.
미니큐브 사용법
미니큐브 및 k9s 설치
winget install Kubernetes.minikube
minikube start --driver=docker
winget install -e --id Kubernetes.kubectl
winget install k9s
minikube는 로컬 Kubernetes 클러스터를 띄워주는 도구입니다.
kubectl은 쿠버네티스를 명령어로 조회하고 조작하기 위한 CLI 도구입니다.
k9s는 터미널 화면에서 쿠버네티스 클러스터 리소스를 조회하고 관리할 수 있는 TUI 도구입니다.
미니큐브 대시보드 실행
minikube dashboard
미니큐브 대시보드 실행 후 출력되는 로그에서 대시보드 URL을 복사해 웹으로 접속하면 됩니다.
상단 네임스페이스 선택 박스에서 모든 네임스페이스를 선택하면,
Pods 메뉴에서 쿠버네티스 클러스터 안에서 실행되는 모든 Pod들을 볼 수 있습니다.
k9s 실행
k9s
:를 입력하고 명령 모드에 들어가면, 명령어로 원하는 쿠버네티스 리소스로 빠르게 이동하고 관리 가능합니다.
파드 관리 Deployment 생성
kubectl create deployment Deployment명 --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080
현재 네임스페이스에서 Deployment와 함께 생성된 Pod가 Running 상태인 것을 확인할 수 있습니다.
k8s에서 Deployment 재시작 방법
Deployment를 선택한 상태에서 R을 누르면,
Deployment가 관리하는 Pod들이 순차적으로 신규 Pod들로 교체됩니다.
기본 RollingUpdate 전략은 점진적으로 신규 Pod를 생성하면서 기존 Pod를 제거합니다.
외부 접근용 LoadBalancer 타입 Service 생성
kubectl expose deployment Deployment명 --type=LoadBalancer --port=8080
Pod는 TCP/IP 기반 통신을 하므로, Pod마다 IP주소가 할당됩니다.
Pod 내부의 컨테이너들은 같은 네트워크 네임스페이스를 사용하므로 같은 IP 주소를 공유합니다.
쿠버네티스 클러스터 네트워크 외부에서 Pod에 접근하려면, Service를 통해 Pod를 노출할 수 있습니다.
Service IP로 Pod를 구분하는 것이 권장됩니다.
미니큐브 환경에서 서비스 접속 URL 확인
minikube service 서비스명
서비스 URL을 통해 Service가 연결된 Pod의 애플리케이션에 웹으로 접근할 수 있습니다.
로컬 PC의 임시 포트로 들어온 요청을 Service의 NodePort로 패킷을 전달합니다.
로컬 임시 포트, 접속 URL은 미니큐브 재시작 후 달라질 수 있습니다.
metrics-server 애드온 활성화
minikube addons enable metrics-server
Minikube 클러스터에 metrics-server 애드온을 활성화하는 명령어입니다.
metrics-server 기동 상태 확인
kubectl get pods -n kube-system
metrics-server가 1/1 Running이고 정상 동작하면,
각 파드가 사용하고 있는 CPU, 메모리 사용량을 확인할 수 있게 됩니다.
파드 리소스 확인 방법
kubectl top pods
metrics-server가 수집한 정보로 현재 Pod들이 CPU와 메모리를 얼마나 쓰고 있는지 확인합니다.
미니큐브 종료 후 재시작 방법
minikube stop
minikube start
쿠버네티스 명령어 정리
https://0songha0.github.io/op/2026-09-17-1
쿠버네티스로 애플리케이션 배포 방법
쿠버네티스 deployment 매니페스트 파일 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: 애플리케이션명 # Deployment 이름 (생성되는 pod 이름 프리픽스)
labels:
app: 애플리케이션명 # Deployment 자체 라벨
spec:
replicas: 3 # 유지할 pod 개수 (파드가 삭제되면 Deployment가 자동 생성하여 지정한 개수를 유지)
selector:
matchLabels:
app: 애플리케이션명 # Deployment가 관리할 Pod 라벨
template:
metadata:
labels:
app: 애플리케이션명 # 생성되는 Pod에 붙이는 라벨 (Deployment/Service selector와 매칭 필요)
spec:
containers:
- name: 애플리케이션명
image: 이미지명
ports:
- containerPort: 3000
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
프로젝트폴더경로에 k8s 폴더를 만들고, deployment.yaml 파일을 생성합니다.
Scalability 기능
k9s에서 Deployment를 선택하고 S를 누르면,
Deployment가 유지할 Pod 개수 (replicas) 를 직접 변경할 수 있습니다.
쿠버네티스에 애플리케이션 배포
kubectl apply -f /프로젝트폴더경로/k8s/deployment.yaml
deployment.yaml에 정의한 Deployment 설정을 Kubernetes 클러스터에 적용합니다.
Deployment가 지정한 수의 Pod를 생성하고 지속적으로 관리하며,
Deployment에 지정한 이미지를 기반으로 Pod 내부에서 컨테이너가 실행됩니다.
쿠버네티스 service 매니페스트 파일 생성
apiVersion: v1
kind: Service
metadata:
name: 애플리케이션명-service
labels:
app: 애플리케이션명
spec:
type: LoadBalancer # service 타입
ports:
- port: 80 # service가 요청을 받는 포트
targetPort: 3000 # 요청을 전달할 Pod 포트
protocol: TCP
selector:
app: 애플리케이션명 # Pod 라벨과 매칭
프로젝트폴더경로/k8s 폴더에 service.yaml 파일을 생성합니다.
LoadBalancer 타입 Service를 생성하면 일반적으로 30000~32767 범위 NodePort가 자동 할당됩니다.
외부 TCP 요청은 LoadBalancer의 80 포트로 들어오고, NodePort 30660을 거쳐 Pod 3000 포트로 전달됩니다.
쿠버네티스에 Service 적용
kubectl apply -f /프로젝트폴더경로/k8s/service.yaml
service.yaml에 정의한 service 설정을 Kubernetes 클러스터에 적용합니다.
Minikube Service 접속
minikube service 애플리케이션명-service
위 명령어 실행 시 제공되는 Service 접속 URL을 통해 웹에서 Minikube 내부 Service에 접속합니다.
단일 Pod 매니페스트 파일 생성
apiVersion: v1
kind: Pod
metadata:
name: 애플리케이션명-pod
labels:
app: 애플리케이션명-pod
spec:
containers:
- name: 애플리케이션명-pod
image: rookie0031/sample-server:v1
# 필요한 경우 작성
# command: 컨테이너 실행 시 실행할 명령어 입력
ports:
- containerPort: 3000
restartPolicy: OnFailure # 컨테이너 프로세스가 오류로 종료된 경우, kubelet이 컨테이너를 다시 실행
# 생략 시 기본값은 Always (종료 원인과 관계없이 다시 실행)
프로젝트폴더경로/k8s 폴더에 테스트용 단일 pod.yaml 파일을 생성합니다.
쿠버네티스에 단일 Pod 수동 생성
kubectl apply -f pod.yaml
deployment로 관리되지 않는 단일 Pod는 삭제되어도 자동으로 다시 생성되지 않습니다.
쿠버네티스에서는 deployment로 Pod를 생성하고 관리하는 것을 권장합니다.