쿠버네티스를 구성하는 핵심 리소스
Node
- 쿠버네티스 클러스터에서 파드(Pod)를 실행하는 실제 컴퓨터다.
- Minikube에서는 하나의 노드만 존재하며, 그 안에서 모든 리소스가 실행된다.
Pod
- 컨테이너를 실행하기 위한 최소 실행 단위로, 컨테이너를 감싸는 껍데기다.
- 보통 하나의 파드에는 하나의 컨테이너가 들어간다.
- 컨테이너가 꺼지면 함께 없어지기 때문에, 파드를 통해 컨테이너를 관리한다.
ReplicaSet
- 파드를 여러 개 유지하는 역할을 한다.
- 예: nginx 파드를 항상 2개 실행 상태로 유지하도록 관리
- 직접 만들 일은 거의 없고, Deployment가 내부적으로 자동으로 생성한다.
Deployment
- 우리가 가장 많이 사용하는 리소스이며, 파드의 설정과 개수, 업데이트 전략을 모두 정의한다.
- 실제 파드는 Deployment → ReplicaSet → Pod의 흐름으로 자동 생성된다.
- 파드를 직접 만들지 않고, Deployment로 모든 관리를 맡긴다.
관계 구조 요약
Deployment → ReplicaSet → Pod → (실행) → Node
- 우리는 보통 Deployment만 정의한다.
- 그 외 리소스들은 쿠버네티스가 자동으로 만들어서 관리한다.
흐름
- nginx 컨테이너를 쿠버네티스에 배포한다.
- Deployment를 통해 파드를 생성하고 관리한다.
- Service를 만들어 외부(브라우저)에서 접속할 수 있게 만든다.
deployment.yaml 작성
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Deployment는 nginx 컨테이너를 포함한 파드를 2개 유지하도록 관리한다.(replicas : 2 -> ReplicaSet)
생성 명령어
kubectl apply -f deployment.yaml
생성된 리소스 확인
kubectl get deployments
kubectl get pods
kubectl get rs
deployment.yaml에서 replicas:2를 설정했기 때문에 nginx 파드 2개가 생성
Deployment와 ReplicaSet은 어떤 관계일까?
Deployment만 만들었는데 ReplicaSet이 자동으로 생성되었다. 실제로는 Deployment가 내부적으로 ReplicaSet을 만들고 파드를 유지하도록 함
Deployment → (자동 생성) → ReplicaSet → (관리) → Pod
- Deployment는 파드의 정의와 개수를 설정하는 상위 리소스다.
- ReplicaSet은 파드의 실제 복제본을 유지하고 관리한다.
- 우리는 Deployment만 정의하면, ReplicaSet과 파드는 쿠버네티스가 자동 생성하고 유지한다.
Dashboard에서 확인
Service 생성 (NodePort)
파드는 직접 접근할 수 없으므로, 외부 연결을 위해 Service를 생성해야 한다.
service.yaml 작성
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
이 설정은 외부에서 minikube IP:30080으로 nginx에 접속할 수 있도록 해준다.
생성 명령어
kubectl apply -f service.yaml
minikube IP 확인
minikube ip
브라우저에서 nginx 접속 확인
브라우저 주소창에 아래와 같이 입력한다:
http://192.168.49.2:30080
nginx의 기본 환영 페이지가 뜨면 배포 성공이다.
접속에러
Minikube가 Docker 드라이버 사용 중일 때는 외부에서 직접 브라우저로 접속하는 것이 차단될 수 있으므로, 터널링 서버를 수동으로 열어야 함
해결 방법: 서비스 터널링을 수동으로 열기
minikube service nginx-service
- 브라우저가 자동으로 열리거나. 콘솔에 127.0.0.1:xxxxx 형식의 주소가 다시 표시됨
- 내부적으로 포트 터널링을 열어서 nginx 서비스에 접근할 수 있음
클러스터 리소스 전체 확인
kubectl get all
'Kubernetes' 카테고리의 다른 글
Kubernetes - GitOps 기반 배포 자동화 Argo CD (3) | 2025.06.21 |
---|---|
Kubernetes - 기초 개념과 클러스터 구조 이해 (0) | 2025.06.21 |