2026. 6. 13. 10:00ㆍKubernetes
Ⅰ. Minikube 설치
| Minikube 설치 |
구분 | 설명 | |
| 개념 | Minikube는 로컬 환경 (개인 PC, 가상머신 등)에 Kubernetes 단일 노드 클러스터 설치 | ||
| master와 node 기능을 동시에 구현할 수 있는 경량 테스트용 Kubernetes 배포 도구 | |||
| 구성 | 하나의 노드에 Control Plane (Master)과 Worker (Node) 기능 함께 포함 | ||
| Docker, containerd, Podman 등 다양한 컨테이너 런타임 지원 | |||
| 특징 | 로컬에서 Kubernetes 클러스터 쉽게 구성 및 테스트 가능 | ||
| kubectl과 완전 호환되어 실제 운영 클러스터와 동일한 명령어 사용 | |||
| 다양한 드라이버 (VM, Docker, Hyper - V 등)를 통해 실행 환경 선택 가능 | |||
| 학습, 테스트, 개발 환경 구축에 적합 | |||
| 역할 / 활용 | Kubernetes의 구성 요소 동작 테스트 및 실습용 환경 구축 | ||
| 애플리케이션 배포, 서비스 노출, 리소스 관리 실습 가능 | |||
| 운영 환경 배포 전 YAML 설정 검증 및 트러블슈팅 테스트 가능 | |||
| 기본 명령어 | 명령어 | 설명 | |
| minikube start | 클러스터 시작 (자동으로 control plane과 node 생성) | ||
| minikube status | 클러스터 상태 확인 | ||
| minikube stop | 클러스터 중지 | ||
| minikube delete | 클러스터 삭제 | ||
| minikube dashboard | 웹 UI 대시보드 실행 | ||

minikube start 명령을 통해 Minikube 클러스터 시작
kubectl get nodes 명령을 통해 클러스터 내 노드 목록과 상태 확인
kubectl get nodes -o wide 명령을 통해 클러스터 내 노드의 상세 정보 (IP, OS, Kernel 등) 확인
Ⅰ - Ⅰ. Pod (파드)
| Pod (파드) | 구분 | 내용 |
|
| 개념 | Kubernetes에서 가장 작은 배포 단위 (Unit of Deployment)로, 하나 이상의 컨테이너를 하나의 논리적 그룹으로 묶은 단위 |
||
| 구성 | 같은 작업을 수행하는 하나 이상의 컨테이너, 스토리지 볼륨, 네트워크 네임스페이스 포함 | ||
| 특징 | 여러 컨테이너가 존재할 수 있지만, 일반적으로 하나의 애플리케이션 컨테이너만 포함 | ||
| 동일한 Pod 내 컨테이너들은 네트워크 (IP, 포트)와 저장공간 (Volume) 공유 | |||
| Pod는 노드에 스케줄되어 실행되고, 상태에 따라 재시작 또는 교체 가능 | |||
| 역할 | 애플리케이션 실행의 기본 단위 | ||
| Kubernetes가 관리하는 모든 컨테이너는 Pod 형태로 존재 | |||
| Deployment, ReplicaSet, StatefulSet 등이 여러 Pod를 관리하여 서비스 가용성 유지 | |||
| 상태 관리 | 일시적 (Ephemeral) 객체로, 직접 유지되지 않고, 상위 컨트롤러 (ReplicaSet, Deployment)에 의해 관리 |
||
| 삭제되거나 장애가 발생할 경우, 자동으로 새 Pod로 대체 | |||
| 예시 명령어 | 예시 | 설명 | |
| ex) kubectl get pods | 실행 중인 모든 파드 확인 | ||
| ex) kubectl describe pod [이름] | 파드의 상세 정보 확인 | ||

kubectl get pod -A 명령을 통해 모든 네임스페이스의 Pod 확인
Ⅰ - Ⅱ. Namespace (네임스페이스)
| Namespace (네임스페이스) |
구분 | 설명 | |
| 개념 | Kubernetes 클러스터 내 리소스 (Pod, Service, ConfigMap 등)를 논리적으로 구분하기 위한 가상 공간 |
||
| 리소스의 이름 충돌 방지 | |||
| 프로젝트, 팀, 환경별로 자원 분리 관리 | |||
| 특징 | 리소스 격리 단위로, 동일한 클러스터 내에서도 네임스페이스별로 독립적인 환경 구성 가능 | ||
| 서로 다른 Namespace에 동일한 이름의 리소스가 존재해도 충돌 없음 | |||
| 일부 리소스 (Node, PersistentVolume 등)는 클러스터 전체 (global scope) 리소스로 Namespace에 속하지 않음 |
|||
| 기본 Namespace |
Namespace | 설명 | |
| default | 기본 리소스가 배치되는 공간 | ||
| kube-system | Kubernetes 시스템 리소스가 위치 | ||
| kube-public | 모든 사용자가 접근 가능한 공개 리소스 | ||
| kube-node-lease | 노드 상태 (HeartBeat) 관련 리소스 저장 | ||
| 역할 | 리소스 관리와 접근 권한을 분리하여 보안성과 운영 효율성 향상 | ||
| 프로젝트별, 환경별 (dev, test, prod 등)로 자원 할당, 정책 (ResourceQuota, LimitRange) 적용 가능 | |||
| 추가 관리 리소스 |
리소스 | 설명 | |
| ResourceQuota | 네임스페이스 내 리소스 사용량 확인 | ||
| LimitRange | Pod / Container 단위 자원 사용 기본값 및 최대값 설정 | ||
| 예시 명령어 | 예시 명령어 | 설명 | |
| ex) kubectl get ns | 네임스페이스 목록 확인 | ||
| ex) kubectl create ns dev | dev 네임스페이스 생성 | ||
| ex) kubectl get pods -n kube-system | 특정 네임스페이스의 파드 조회 | ||

kubectl get namespaces 명령을 통해 네임스페이스 목록 확인
Ⅰ - Ⅲ. Service (서비스)
| Service (서비스) |
구분 | 설명 | |
| 개념 | Kubernetes 클러스터 내부 및 외부 간 네트워크 접근을 안정적으로 제공하기 위한 추상화 리소스 | ||
| Pod의 IP는 동적으로 바뀌기 때문에 Service를 이용해 고정된 접근 Endpoint 제공 | |||
| Pod 재시작 및 교체 시에도 Service는 동일한 IP (ClusterIP) 유지 | |||
| 특징 | Kubernetes 기본 네트워크 추상화 계층 | ||
| Pod들의 집합을 Selector (Label)을 묶어 하나의 Endpoint로 제공 | |||
| 로드밸런싱 (라운드로빈 등) 기능 내장 | |||
| Cluster 내부 및 외부 구간에 따라 다양한 Service 타입 제공 | |||
| kube-proxy가 iptables / IPVS 기반으로 Service 트래픽 전달 관리 | |||
| 타입 | 타입 | 설명 | |
| ClusterIP (기본값) | 클러스터 내부에서만 접근 가능한 가상 IP 생성 | ||
| 외부에서 직접 접근 불가 | |||
| 내부 Pod 간 통신에 가장 많이 사용 | |||
| NodePort | 각 노드의 정해진 PortRange (30000 ~ 32767) 오픈하여 외부에서 접근 가능 |
||
| <노드 IP> : NodePort 방식으로 접속 | |||
| 간단한 테스트 환경에서 주로 사용 | |||
| LoadBalancer | 클라우드 환경 (AWS, GCP, Azure 등)에서 외부 L4 LoadBalancer 자동 생성 |
||
| 외부 클라이언트가 LB -> Service -> Pod로 접근 | |||
| ExternalName | Service가 CNAME 레코드처럼 외부 도메인 주소로 매핑 | ||
| 클러스터 내부 DNS에서 외부 도메인을 사용하도록 설정 | |||
| ClusterIP 없음 (DNS 기반 매핑만 존재) | |||
| 구성 요소 | 구성 요소 | 설명 | |
| Selector (Label 기반) | 어떤 Pod를 Service 대상 (Endpoint)으로 묶을지 결정 | ||
| ClusterIP | Service가 가지는 고정 내부 IP (Pod는 절대 사용 불가) | ||
| Ports | Service가 노출하는 포트 (ex. port=80, targePort=8080) | ||
| Endpoints | Service가 실제로 트래픽을 전달하는 Pod들의 IP 목록 | ||
| SessionAffinity | 클라이언트 -> 특정 Pod로 고정 연결 (Client IP 방식 등) | ||
| kube-proxy | 서비스 트래픽을 실제 Pod로 전달하는 컴포넌트 | ||
| 역할 | 역할 | 설명 | |
| Pod 접근 안정화 | Pod 재시작 및 IP 변경에도 동일한 서비스 주소 제공 | ||
| 로드밸런싱 | 여러 Pod가 있을 경우 자동 분산 처리 | ||
| 내부 DNS 제공 | <서비스명>.<네임스페이스>.svc.cluster.local | ||
| 서비스 유형에 따라 외부 및 내부 통신 제어 |
NodePort, LoadBalancer, ClusterIP, ExternalName 등 | ||
| 엔드포인트 자동 관리 | Pod가 생성 및 삭제될 때 자동 업데이트 | ||
| 추가 관리 리소스 | 리소스 | 설명 | |
| Endpoints | Service가 실제로 연결되는 Pod들의 IP 리스트 | ||
| EndpointSlice | 확장성을 높인 Endpoints 고도화 리소스 | ||
| Ingress (추가 기능) | HTTP / HTTPS 기반 외부 라우팅을 위한 L7 진입점 | ||

kubectl get service 명령을 통해 클러스터 내에서 생성된 서비스 목록 조회
Ⅱ. Kubernetes 리소스 생성
Ⅱ - Ⅰ. Deployment Controller 이용한 Pod 생성
| Deployment Controller 이용한 Pod 생성 |
구분 | 설명 | |
| 개념 | Deployment Controller는 사용자가 지정한 Pod 템플릿 (spce)을 기반으로 ReplicaSet 생성 | ||
| 생성된 ReplicaSet이 실제 Pod를 생성 및 관리하도록 제어하는 상위 리소스 | |||
| 생성 구조 | Deployment -> ReplicaSet -> Pod 구조로 자동 계층화되어 관리 | ||
| 특징 | Pod를 직접 생성하지 않고 Deployment가 ReplicaSet 생성 | ||
| 생성된 ReplicaSet이 Pod 생성 및 유지 | |||
| Pod의 수 (replicas) 나 이미지 버전이 변경될 경우, Deployment가 이를 감지하여 롤링 업데이트 (Rolling Update) 수행 |
|||
| Pod가 비정상 종료될 경우, ReplicaSet이 자동으로 새로운 Pod 재생성 | |||
| 역할 | Pod 생성 및 버전 관리 자동화 | ||
| 롤링 업데이트 및 롤백 지원 | |||
| 애플리케이션 무중단 배포 환경 제공 | |||
| 생성 확인 | 명령어 | 설명 | |
| ex) bash kubectl get deployment | Deployment 상태 확인 | ||
| ex) bash kubectl get rs | ReplicaSet 확인 | ||
| ex) bash kubectl get pods | Pod 생성 여부 확인 | ||

# hello-minikube 리소스 생성 (Deployment)
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.5 명령을 통해
k8s.gcr.io/echoserver:1.5 이미지 사용하여 hello-minikube 리소스 생성
kubectl get deploy 명령을 통해 Deployment 리소스가 잘 생성되었는지 확인
kukbectl get deploy,pod 명령을 통해 hello-minikube 리소스가
실제로 어떤 Pod를 생성했는지 같이 확인

kubectl describe deploy hello-minikube 명령을 통해
hello-minikube 리소스의 상세 상태와 이벤트 확인

kubectl get deploy,rs,pod 명령을 통해 Deployment 리소스, ReplicaSet 리소스, Pod 정보 확인

kubectl describe rs hello-minikube-5458498444 명령을 통해 ReplicaSet의 상태, 설정, 이벤트 등 상세 정보 확인

kubectl get pod 명령을 통해 클러스터 내 Pod 목록 정보를 기본 형태로 확인
kubectl get pod –o wide 명령을 통해 기본 get Pod 출력에 추가로 파드 IP 주소, 노드 이름 등 상세 정보 확인
Ⅱ - Ⅱ. Deployment Controller 이용하여 NodePort Service 생성
| Deployment Controller 이용하여 NodePort Service 생성 |
구분 | 설명 | |
| 개념 | NodePort Service는 클러스터 외부에서도 접근할 수 있도록 노드의 특정 포트 (NodePort)를 열어주는 Servie 타입 |
||
| Deployment로 생성된 Pod를 외부 트래픽과 연결하는 역할 수행 | |||
| 구성 구조 | Deployment -> ReplicaSet -> Pod -> Service (NodePort) 형태로 연결되어, 클러스터 내부 Pod를 외부 클라이언트가 접근 가능하게 함 |
||
| 특징 | 클러스터 외부 요청을 노드의 고정 포트 (기본 30000 ~ 32767)를 통해 수신 | ||
| NodePort는 내부적으로 ClusterIP 자동 생성 | |||
| 생성된 ClusterIP를 통해 Pod로 트래픽 전달 | |||
| 외부 접속 주소 : http://<Node_IP> : <Node_Port> | |||
| 역할 | Deployment로 실행 중인 Pod를 외부 네트워크와 연결 | ||
| Node IP와 NodePort를 이용해 외부 사용자 직접 접근 가능 | |||
| 서비스 트래픽이 Pod 간에 자동 로드밸런싱 | |||
| 확인 명령어 | 명령어 | 설명 | |
| ex) bash kubectl get svc | 서비스 목록 확인 | ||
| ex) bash kubectl describe svc hello-minikube | 포트 및 엔드포인트 확인 | ||

# hello-minikube (Deployment) 를 대상으로 NodePort 타입의 Service 생성
kubectl expose deployment hello-minikube --type=NodePort 명령을 통해
hello-minikube (Deployment)를 대상으로 NodePort 타입의 Service 생성하도록 지정
--port=8080 옵션을 통해 hello-minikube (Deployment)의 Pod를 8080번 포트로 노출시키도록 설정
kubectl get services 명령을 통해 Kubernetes 클러스터 내 생성된 모든 서비스의 상태와 기본 정보 확인

# loadbalancer 리소스 생성 (Deployment)
kubectl create deployment loadbalancer —image=k8s.gcr.io/echoserver:1.5 명령을 통해
k8s.gcr.io/echoserver:1.5 이미지 사용하여 loadbalacner Deployment 생성
kubectl get deploy 명령을 통해 생성된 Deployment 목록 조회
# loadbalancer (Deployment)를 기반으로 LoadBalancer 타입의 Service 생성
kubectl expose deployment loadbalancer --type=LoadBalancer 명령을 통해
loadbalancer (Deployment)를 기반으로 LoadBalancer 타입의 Service 생성
--port=8080 옵션을 통해 loadbalancer (Deployment)를 Pod를 8080번 포트로 노출시키도록 설정
kubectl get services 명령을 통해 클러스터 내 모든 서비스 목록 조회

# 노드 일시 정지
minikube pause 명령을 통해 Minikube 클러스터에서 실행 중인 노드 일시 정지
minikube status 명령을 통해 잘 정지되었는지 확인

# 정지되었던 것 다시 실행
minikube unpause 명령을 통해 Minikube 클러스터 내 일시 정지 상태인 노드와 컨테이너를 실행 상태로 되돌림
minikube status 명령을 통해 다시 실행되었는지 확인
# 리소스 삭제
minikube delete —all 명령을 통해 Minikube 클러스터와 관련된 모든 프로필과 리소스 삭제
minikube status 명령을 통해 잘 삭제되었는지 확인

minikube start —force 명령을 통해 Minikube 클러스터 재시작
'Kubernetes' 카테고리의 다른 글
| Kubernetes Label과 Annotation (0) | 2026.06.13 |
|---|---|
| Kubernetes Ingress (0) | 2026.06.13 |
| Kubernetes Service (0) | 2026.06.13 |
| kubernetes Controller (0) | 2026.06.13 |
| Kubernetes 기본 개념 (0) | 2026.06.13 |