쿠버네티스 기본 오브젝트: Pod, ReplicaSet, Deployment, Service
CKA를 준비하며 Pod, ReplicaSet, Deployment, Service의 역할과 서로의 관계를 매니페스트와 함께 정리한다.
시리즈 · Kubernetes1 / 4
- 쿠버네티스 기본 오브젝트: Pod, ReplicaSet, Deployment, Service
- 쿠버네티스 Volume: PV, PVC, StorageClass
- kubeadm으로 쿠버네티스 클러스터 업그레이드하기
- CKA 2025 개정 시험 합격 후기
CKA를 준비하며 Pod, ReplicaSet, Deployment, Service의 개념을 정리했다. 하나씩 보면 헷갈리고, 같이 놓고 봐야 관계가 이해된다.
Pod
- 쿠버네티스에서 만들 수 있는 가장 작은 배포 단위이다.
- 1개 이상의 컨테이너로 구성되며, 같은 Pod 안의 컨테이너끼리는 네트워크와 스토리지를 공유한다. 서로 localhost로 접근할 수 있다.
- 다중 컨테이너 구성도 가능하지만 흔하지는 않다.
nginx:1.14.2 이미지를 실행하는 컨테이너 하나로 구성된 Pod는 다음과 같다.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
명령어로 바로 실행해도 된다.
kubectl run nginx --image=nginx:1.14.2
ReplicaSet
- Pod의 실행 개수를 안정적으로 유지하는 역할을 한다. 명시한 개수만큼 동일한 Pod가 떠 있도록 보장한다.
- 특정 Label을 기준으로 관리할 Pod를 고른다.
- 개수는 보장하지만 업데이트는 지원하지 않는다. 템플릿을 수정해도 기존 Pod는 그대로이고, 삭제 후 다시 만들어져야 반영된다. 그래서 단독으로 쓰기보다는 Deployment의 일부로 사용된다.
- ReplicationController와 동작은 같지만, ReplicaSet은 더 풍부한 표현식의 selector를 지원한다.

apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
replicas: 3 # 유지할 Pod의 수
selector: # 어떤 Pod를 관리할 것인지
matchLabels:
tier: frontend
template: # 어떤 Pod를 만들 것인지
metadata:
labels:
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
template으로 Pod를 만들고 selector로 관리 대상을 고르므로, selector.matchLabels와 template.metadata.labels는 일치해야 한다.
kubectl get rs
kubectl replace -f replicaset-definition.yml # 수정된 yml 파일 적용
kubectl scale --replicas=6 <type> <name> # replica 수 변경
Deployment
- Pod와 ReplicaSet에 대한 선언적 업데이트를 제공한다. 원하는 상태를 선언하면 그 상태에 맞게 Pod와 ReplicaSet이 변경된다.
- 애플리케이션 배포와 업데이트를 관리하는 상위 오브젝트로, ReplicaSet을 관리하는 컨트롤러 역할을 한다.
- 롤링 업데이트와 롤백을 지원한다.

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Service
- Pod는 각자 독립된 네트워크와 스토리지를 갖는다.
- Pod끼리 통신하거나 외부 트래픽이 Pod에 접근할 수 있도록 연결해 주는 네트워킹 오브젝트가 Service이다.
- 타입으로는 ClusterIP, NodePort, LoadBalancer가 있다.